[12] RFR(M) 8209594: guarantee(this->is8bit(imm8)) failed: Short forward jump exceeds 8-bit offset
Vladimir Kozlov
vladimir.kozlov at oracle.com
Wed Aug 29 02:24:15 UTC 2018
Thank you, Dean
Vladimir
On 8/28/18 4:44 PM, dean.long at oracle.com wrote:
> On 8/28/18 3:48 PM, Vladimir Kozlov wrote:
>> Thank you, Dean
>>
>> On 8/27/18 10:21 AM, dean.long at oracle.com wrote:
>>> Looks good. I did not review avx changes.
>>>
>>> A couple questions:
>>>
>>> Did you consider adding "const char* file = NULL, int line = 0" for x86 only instead of all platforms?
>>
>> Unfortunately pd_patch_instruction() method which is called from shared Label::patch_instructions() is not virtual and
>> is declared on all platforms.
>> Also I think other platforms can implement this functionality using new API.
>>
>
> OK.
>
>>>
>>> Are _file[] and _line[] arrays every used?
>>
>> They are used in macroAssembler_x86.hpp in guarantee() in pd_patch_instruction() which is called when forward branches
>> are processed in bind(Label):
>>
>> http://cr.openjdk.java.net/~kvn/8209594/webrev.05/src/hotspot/cpu/x86/macroAssembler_x86.hpp.udiff.html
>>
>
> Actually I was asking about these two:
>
> +#ifdef ASSERT
> + // Sourcre file and line location of jump instruction
> + int _lines[PatchCacheSize];
> + const char* _files[PatchCacheSize];
> +#endif
>
> but I see now the use in Label::patch_instructions().
>
> dl
>
>> Thanks,
>> Vladimir
>>
>>>
>>> dl
>>>
>>> On 8/25/18 1:05 PM, Vladimir Kozlov wrote:
>>>> http://cr.openjdk.java.net/~kvn/8209594/webrev.05/
>>>> https://bugs.openjdk.java.net/browse/JDK-8209594
>>>>
>>>> All platforms are affected. Please, test.
>>>>
>>>> I instrumented code to generated biggest code and find all possible incorrect short jumps. This is the result.
>>>>
>>>> Changed jump instruction patching API to added jump's source location in debug build but implemented it only on x86.
>>>> I tired to search instructions by code offsets. I used very simple macro:
>>>>
>>>> #define jmpb(L) jmpb_0(L, __FILE__, __LINE__)
>>>>
>>>> 'do {} while(0)' does not work here because I need to replace non-static method. I will be glad if someone can give
>>>> better suggestion how implement this macro.
>>>>
>>>> Fixed incorrect avx512 code in macroAssembler_x86.cpp and x86.ad file. There were missing instructions and incorrect
>>>> instructions (copy-paste typos).
>>>>
>>>> Fixed C2 scratch buffer sizing. It did not take into account everything and as result from MAX_inst_size=1024 only
>>>> 700 bytes were available. I hit this issue when RTM locking was generated for FastLock node.
>>>>
>>>> Tested tier1-3 on all our platforms. And also running these tiers on avx512 machine.
>>>>
>>>
>
More information about the hotspot-dev
mailing list