RFR: 8362193: Re-work MacOS/AArch64 SpinPause to handle SB [v3]

Aleksey Shipilev shade at openjdk.org
Tue Jul 22 16:09:55 UTC 2025


On Tue, 22 Jul 2025 15:57:46 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> I put cases in enum order. On my M3 Pro I get:
>> 
>> libjvm.dylib[0x8a75e8] <+0>:   stp    x29, x30, [sp, #-0x10]!
>> libjvm.dylib[0x8a75ec] <+4>:   mov    x29, sp
>> libjvm.dylib[0x8a75f0] <+8>:   adrp   x8, 1417
>> libjvm.dylib[0x8a75f4] <+12>:  add    x8, x8, #0x80 ; VM_Version::_spin_wait
>> libjvm.dylib[0x8a75f8] <+16>:  ldr    w8, [x8]
>> libjvm.dylib[0x8a75fc] <+20>:  cmp    w8, #0x1
>> libjvm.dylib[0x8a7600] <+24>:  b.gt   0x8a7620       ; <+56> at os_bsd_aarch64.cpp:534:5
>> libjvm.dylib[0x8a7604] <+28>:  cbz    w8, 0x8a7640 ; <+88> at os_bsd_aarch64.cpp:538:7
>> libjvm.dylib[0x8a7608] <+32>:  cmp    w8, #0x1
>> libjvm.dylib[0x8a760c] <+36>:  b.ne   0x8a7614       ; <+44> at os_bsd_aarch64.cpp:555:5
>> libjvm.dylib[0x8a7610] <+40>:  isb
>> libjvm.dylib[0x8a7614] <+44>:  mov    w0, #0x1 ; =1
>> libjvm.dylib[0x8a7618] <+48>:  ldp    x29, x30, [sp], #0x10
>> libjvm.dylib[0x8a761c] <+52>:  ret
>> libjvm.dylib[0x8a7620] <+56>:  cmp    w8, #0x2
>> libjvm.dylib[0x8a7624] <+60>:  b.eq   0x8a7650       ; <+104> at os_bsd_aarch64.cpp:544:7
>> libjvm.dylib[0x8a7628] <+64>:  cmp    w8, #0x3
>> libjvm.dylib[0x8a762c] <+68>:  b.ne   0x8a7614       ; <+44> at os_bsd_aarch64.cpp:555:5
>> libjvm.dylib[0x8a7630] <+72>:  sb
>> libjvm.dylib[0x8a7634] <+76>:  mov    w0, #0x1 ; =1
>> libjvm.dylib[0x8a7638] <+80>:  ldp    x29, x30, [sp], #0x10
>> libjvm.dylib[0x8a763c] <+84>:  ret
>> libjvm.dylib[0x8a7640] <+88>:  nop
>> libjvm.dylib[0x8a7644] <+92>:  mov    w0, #0x1 ; =1
>> libjvm.dylib[0x8a7648] <+96>:  ldp    x29, x30, [sp], #0x10
>> libjvm.dylib[0x8a764c] <+100>: ret
>> libjvm.dylib[0x8a7650] <+104>: yield
>> libjvm.dylib[0x8a7654] <+108>: mov    w0, #0x1 ; =1
>> libjvm.dylib[0x8a7658] <+112>: ldp    x29, x30, [sp], #0x10
>> libjvm.dylib[0x8a765c] <+116>: ret
>> 
>> 
>> It's interesting. My code is binary search tree version.
>> It does not depend on the order of the cases. 
>> I could not get jump table version you've got.
>
> Still getting a jump table with your current version. Maybe this comes down to the compiler toolchain. Dang, maybe this is one reason to go for hand-written assembly: make it stable across toolchains.

@fbredber @theRealAph, thoughts?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26387#discussion_r2223062256


More information about the hotspot-dev mailing list