[aarch64-port-dev ] RFR: 8075930: AARCH64: Use FP Register in C2
Edward Nevill
edward.nevill at linaro.org
Tue Apr 28 14:43:45 UTC 2015
On Fri, 2015-04-24 at 15:22 -0700, Dean Long wrote:
> On 4/24/2015 4:35 AM, Edward Nevill wrote:
> >
> >
> > On 23 April 2015 at 20:01, Dean Long <dean.long at oracle.com> wrote:
> I was expecting to see r29=Oop, but if it works for x86 I don't see why it wouldn't work for aarch64.
>
> dl
Hi Dean,
Thanks for this. It was just an example of an OopMap at a safepoint.
However, when I tried to generate a case where it would put R29 into an OopMap and I found I could not. On investigation I found a separate 'reg_class' in aarch64.ad
// Class for all non_special pointer registers
reg_class no_special_ptr_reg(
...
);
which is used for all normal pointers. Unfortunately I had not included R29 in this reg_class, therefore it was never using R29 for a pointer, only for integral values. When I put R29 in this reg_class I get for example.
0x000003ffa83d7ba4: mov x29, x13
0x000003ffa83d7ba8: mov x1, x13
0x000003ffa83d7bac: mov x2, x11
0x000003ffa83d7bb0: mov w3, wzr
0x000003ffa83d7bb4: ldr w4, [sp,#4]
0x000003ffa83d7bb8: bl 0x000003ffa80b2300 ; OopMap{rfp=Oop [8]=Oop off=636}
-------------------------------------------------------------^^^^^^^
;*invokespecial get
; - java.nio.DirectByteBuffer::get at 117 (line 285)
; - java.nio.ByteBuffer::get at 5 (line 715)
; - jdk.internal.jimage.ImageStrings::get at 117 (line 90)
; {optimized virtual_call}
0x000003ffa83d7bbc: mov x12, x29
0x000003ffa83d7bc0: ldr w10, [x12,#12] ;*getfield mark
It would seem that the patch has already been pushed so I will raise a new JIRA issue and a new patch to include R29 in the no_special_ptr_reg class.
Thanks for your help spotting this!,
Ed.
More information about the aarch64-port-dev
mailing list