[aarch64-port-dev ] RFR(S): 8204473 - AARCH64: register post-index addressing mode is not supported directly

Dmitrij Pochepko dmitrij.pochepko at bell-sw.com
Wed Jun 6 17:46:23 UTC 2018



On 06.06.2018 20:26, Dmitrij Pochepko wrote:
>
>
> On 06.06.2018 20:16, Andrew Haley wrote:
>> On 06/06/2018 05:59 PM, Dmitrij Pochepko wrote:
>>> Ahh, sorry. Missed single existing [ab]usage of such addressing in
>>> fastdebug mode:
>> Mmm.  It's always a really, really good idea to run tests with
>> assertions enabled.
> Yes. My bad.
>>> http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/cpu/aarch64/assembler_aarch64.cpp#l1179 
>>>
>>>
>>> However, there is a confusing comment there: "// BEGIN Generated code
>>> -- do not edit // Generated by aarch64-asmtest.py"
>>> What should we do about it? I don't see aarch64-asmtest.py to edit.
>> Oh yes.  It must not have been included when we merged into mainline.
>> Oops.
>>
>>> Do we need to edit this smoke test directly despite this comment?
>> Yes, please.  The code you need to edit is *after* the line
>> END  Generated code -- do not edit
> Thanks. Running full test cycle now.
>>
>> I did this:
>>
>>    address PC = __ pc();
>>    __ ld1(v0, __ T16B, Address(r16)); // No offset
>>    __ ld1(v0, __ T16B, __ post(r16, 8)); // Post-index
>>    __ ld1(v0, __ T16B, __ post(r16, r17)); //
>>
>> which at least checks that we can generate the instructions, for which
>> I get
>>
>>    0x000003ffa1000764: ld1    {v0.16b}, [x16]
>>    0x000003ffa1000768: ld1    {v0.16b}, [x16], #16
>>    0x000003ffa100076c: ld1    {v0.16b}, [x16], x17
>>
>> That "#16" looks odd.  Presumably there's some scaling going on there.
>> Do you know?
>>
> Yes. I also investigated this some time ago. It is also related to 
> ld/st addressing modes.
> For immediate post-index of ld/st only one immediate value per type is 
> supported (which is size of loaded/stored data) and the instruction 
> doesn't allow any other options for immediates (see specification, 
> C7.2.152
> LD1 (multiple structures)).
> So, hotspot just checks if immediate is not zero and silently 
> generates the instruction.
>
> Thanks,
> Dmitrij

Please take a look to webrev.02: 
http://cr.openjdk.java.net/~dpochepk/8204473/webrev.02/
Simple sanity with fastdebug build passed. Currently waiting for large 
test cycle to be finished.

Thanks,
Dmitrij


More information about the hotspot-compiler-dev mailing list