[aarch64-port-dev ] RFR(S): 8204353 - AARCH64: optimize FPU load and stores in macroAssembler

Andrew Haley aph at redhat.com
Wed Jun 6 12:15:26 UTC 2018


On 06/06/2018 12:41 PM, Andrew Haley wrote:
> On 06/06/2018 12:16 PM, Dmitrij Pochepko wrote:
>> You're probably referring to confusing addressing notation here. I was 
>> confused originally as well.
>>
>> According to AARCH64 specification, ld* and st* instructions has 3 
>> addressing modes:
>> 1) base register, no offset
>> 2) post-index, immediate value
>> 3) post-index, register value
>> (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802b/LD1_advsimd_sngl_vector.html)
>>
>> Address class was designed with post-index to be an immediate values, 
>> so, that is probably why "register post-index" mode for ld/st is using 
>> regular "register offset" mode, treating it as "register post-index".
>>
>> My patch is using this "register post-index" mode to have less 
>> instructions generated. I was a bit confused when first tried to use 
>> this mode and found such specifics. I had to recheck specific 
>> instruction generation code to be sure.
> 
> Oh no, that is too horrible.  We must fix that before using this
> addressing mode for anything else.

But is it even true?  I just grepped for st1 and I can find no examples
of it being used in that way.  Are there any?  I do see this, which looks
fine:

      st1(Vtmp1, Vtmp2, T16B, post(dst, 32));


-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the hotspot-compiler-dev mailing list