graal icon indicating copy to clipboard operation
graal copied to clipboard

[GR-51491] Adapt to ICStubs removal.

Open graalvmbot opened this issue 1 year ago • 3 comments

This PR adapts to JDK-8322630 which removes the use of ICStubs from HotSpot.

AMD64

With ICStubs (ie., before JDK-8322630):

[Entry Point]
  # {method} {0x00007ffa1641ee10} 'isLatin1' '()Z' in 'java/lang/String'
  #           [sp+0x20]  (sp of caller)
  0x00007ffa8172f900:   mov    r10d,DWORD PTR [rsi+0x8]
  0x00007ffa8172f904:   movabs r12,0x7ffa16000000
  0x00007ffa8172f90e:   add    r10,r12
  0x00007ffa8172f911:   xor    r12,r12
  0x00007ffa8172f914:   cmp    rax,r10
  0x00007ffa8172f917:   jne    0x00007ffa8164e080           ;   {runtime_call ic_miss_stub}
  0x00007ffa8172f91d:   data16 xchg ax,ax
[Verified Entry Point]
  0x00007ffa8172f920:   mov    DWORD PTR [rsp-0x14000],eax

Without ICStubs (i.e., after JDK-8322630):

[Instructions begin]
  0x00007f40b572a380:   data16 data16 nop WORD PTR [rax+rax*1+0x0]
  0x00007f40b572a38b:   data16 data16 xchg ax,ax
  0x00007f40b572a38f:   data16 xchg ax,ax
[Entry Point]
  # {method} {0x00007f404241e630} 'isLatin1' '()Z' in 'java/lang/String'
  #           [sp+0x20]  (sp of caller)
  0x00007f40b572a392:   mov    r10d,DWORD PTR [rsi+0x8]
  0x00007f40b572a396:   cmp    r10d,DWORD PTR [rax+0x8]
  0x00007f40b572a39a:   jne    0x00007f40b564e080           ;   {runtime_call ic_miss_stub}
[Verified Entry Point]
  0x00007f40b572a3a0:   mov    DWORD PTR [rsp-0x14000],eax

AArch64

With ICStubs (ie., before JDK-8322630):

[Entry Point]
  # {method} {0x0000000148012f00} 'isLatin1' '()Z' in 'java/lang/String'
  #           [sp+0x20]  (sp of caller)
  0x000000010d39ce40:   ldr	x8, [x1, #8]                ;   {no_reloc}
  0x000000010d39ce44:   cmp	x9, x8
  0x000000010d39ce48:   b.eq	0x000000010d39ce80  // b.none
  0x000000010d39ce4c:   b	0x000000010d2d7e80          ;   {runtime_call ic_miss_stub}
  0x000000010d39ce50:   nop
  0x000000010d39ce54:   nop
  0x000000010d39ce58:   nop
  0x000000010d39ce5c:   nop
  0x000000010d39ce60:   nop
  0x000000010d39ce64:   nop
  0x000000010d39ce68:   nop
  0x000000010d39ce6c:   nop
  0x000000010d39ce70:   nop
  0x000000010d39ce74:   nop
  0x000000010d39ce78:   nop
  0x000000010d39ce7c:   nop
[Verified Entry Point]
  0x000000010d39ce80:   nop

Without ICStubs (i.e., after JDK-8322630):

[Instructions begin]
  0x000000010d72a740:   nop                                 ;   {no_reloc}
  0x000000010d72a744:   nop
  0x000000010d72a748:   nop
  0x000000010d72a74c:   nop
  0x000000010d72a750:   nop
  0x000000010d72a754:   nop
  0x000000010d72a758:   nop
  0x000000010d72a75c:   nop
  0x000000010d72a760:   nop
  0x000000010d72a764:   nop
  0x000000010d72a768:   nop
[Entry Point]
  # {method} {0x0000000128012f00} 'isLatin1' '()Z' in 'java/lang/String'
  #           [sp+0x30]  (sp of caller)
  0x000000010d72a76c:   ldr     x8, [x1, #8]
  0x000000010d72a770:   ldr     x10, [x9, #8]
  0x000000010d72a774:   cmp     x8, x10
  0x000000010d72a778:   b.eq    0x000000010d72a780  // b.none
  0x000000010d72a77c:   b       0x000000010d67be80          ;   {runtime_call ic_miss_stub}
[Verified Entry Point]
  0x000000010d72a780:   nop

Note that the above output comes from a run with -XX:-UseCompressedClassPointers.

graalvmbot avatar Jan 31 '24 14:01 graalvmbot

Hmm. In the generated code you show from before my change, I'm surprised that you seem to decode the receiver klass on AMD64 (which looks correct), but seemingly not decoding any compressed class pointer on AArch64, which to me seems a bit surprising. Why is that?

fisk avatar Jan 31 '24 15:01 fisk

Hmm. In the generated code you show from before my change, I'm surprised that you seem to decode the receiver klass on AMD64 (which looks correct), but seemingly not decoding any compressed class pointer on AArch64, which to me seems a bit surprising. Why is that?

The output comes from a run with -XX:-UseCompressedClassPointers.

dougxc avatar Jan 31 '24 17:01 dougxc

Hmm. In the generated code you show from before my change, I'm surprised that you seem to decode the receiver klass on AMD64 (which looks correct), but seemingly not decoding any compressed class pointer on AArch64, which to me seems a bit surprising. Why is that?

The output comes from a run with -XX:-UseCompressedClassPointers.

Okay good.

fisk avatar Jan 31 '24 17:01 fisk