Using x86 pause instr in SpinPause

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Aug 16 14:07:13 PDT 2012


On Win64, SpinPause() has been "return 0" since mid-2005. Way back
when Win64 code was in os_win32_amd64.cpp:

     SCCS/s.os_win32_amd64.cpp:

     D 1.9.1.1 05/07/04 03:20:45 dice 12 10  00025/00000/00334
     MRs:
     COMMENTS:
     5030359 -- back-end synchonization improvements - adaptive 
spinning, etc

When the i486 and amd64 cpu dirs were merged back in 2007, the code
became like it is below (#ifdef'ed):

     D 1.32 07/09/17 09:11:33 sgoldman 37 35 00264/00008/00218
     MRs:
     COMMENTS:
     5108146 Merge i486 and amd64 cpu directories.
     Macro-ized register names. Inserted amd64 specific code.

Looks like on Linux-X64, the code has used the PAUSE instruction
since mid-2005:

     D 1.3 05/07/04 03:14:09 dice 4 3        00031/00000/00353
     MRs:
     COMMENTS:
     5030359 -- back-end synchonization improvements - adaptive 
spinning, etc

We'll have to see if Dave Dice remember why he implemented
it this way...

Dan


On 8/16/12 12:01 PM, Eric Caspole wrote:
> Hi everybody,
> Does anybody know the reason why SpinPause is simply "return 0" on 
> Win64 but uses PAUSE on Linux in a .s file?
> We would like to remove PAUSE from linux too.
>
> Thanks,
> Eric
>
>
> ./src/os_cpu/windows_x86/vm/os_windows_x86.cpp
>
>     548 extern "C" int SpinPause () {
>     549 #ifdef AMD64
>     550    return 0 ;
>     551 #else
>     552    // pause == rep:nop
>     553    // On systems that don't support pause a rep:nop
>     554    // is executed as a nop.  The rep: prefix is ignored.
>     555    _asm {
>     556       pause ;
>     557    };
>     558    return 1 ;
>     559 #endif // AMD64
>     560 }
>
>
> src/os_cpu/linux_x86/vm/linux_x86_64.s
>
>      63         .globl SpinPause
>      64         .align 16
>      65         .type  SpinPause, at function
>      66 SpinPause:
>      67         rep
>      68         nop
>      69         movq   $1, %rax
>      70         ret
>
>


More information about the hotspot-runtime-dev mailing list