XCHG is slow ?

Rémi Forax forax at univ-mlv.fr
Tue Jul 3 16:38:40 PDT 2012


On 07/04/2012 01:29 AM, John Rose wrote:
> On Jul 3, 2012, at 4:26 PM, John Rose wrote:
>
>> Isn't "dec %esi" really a REX prefix? — John
>
> No, not if it's two bytes.
>
> Pretty strange.  I don't think our nop-generator produces xchg.

it seems so.

>
> — John

Here is the output of PrintOptoAssembly,

Rémi

#
#  int ( int )
#
#r018 rsi   : parm 0: int
# -- Old rsp -- Framesize: 48 --
#r089 rsp+44: in_preserve
#r088 rsp+40: return address
#r087 rsp+36: in_preserve
#r086 rsp+32: saved fp register
#r085 rsp+28: pad2, stack alignment
#r084 rsp+24: pad2, stack alignment
#r083 rsp+20: Fixed slot 1
#r082 rsp+16: Fixed slot 0
#r093 rsp+12: spill
#r092 rsp+ 8: spill
#r091 rsp+ 4: spill
#r090 rsp+ 0: spill
#
abababab   N1: #    B1 <- B6 B9  Freq: 1
abababab
000   B1: #    B5 B2 <- BLOCK HEAD IS JUNK   Freq: 1
000       # stack bang
     pushq   rbp    # Save rbp
     subq    rsp, #32    # Create frame

00c       movl    RBP, RSI    # spill
00e       cmpl    RSI, #2
011       jl,s   B5  P=0.500597 C=6700.000000
011
013   B2: #    B7 B3 <- B1  Freq: 0.499403
013       decl    RSI    # int
           nop     # 2 bytes pad for loops and calls
017       call,static  ClassicFibo::fibo
         # ClassicFibo::fibo @ bci:10  L[0]=RBP
         # OopMap{off=28}
01c
01c   B3: #    B8 B4 <- B2  Freq: 0.499393
         # Block is sole successor of call
01c       movl    [rsp + #0], RAX    # spill
01f       movl    RSI, RBP    # spill
021       addl    RSI, #-2    # int
           nop     # 3 bytes pad for loops and calls
027       call,static  ClassicFibo::fibo
         # ClassicFibo::fibo @ bci:16  L[0]=_ STK[0]=rsp + #0
         # OopMap{off=44}
02c
02c   B4: #    B6 <- B3  Freq: 0.499383
         # Block is sole successor of call
02c       addl    RAX, [RSP + #0 (32-bit)]    # int
02f       jmp,s   B6
02f
031   B5: #    B6 <- B1  Freq: 0.500597
031       movl    RAX, #1    # int
031
036   B6: #    N1 <- B5 B4  Freq: 0.99998
036       addq    rsp, 32    # Destroy frame
     popq   rbp
     testl  rax, [rip + #offset_to_poll_page]    # Safepoint: poll for GC

041       ret
041
042   B7: #    B9 <- B2  Freq: 4.99403e-06
042       # exception oop is in rax; no code emitted
042       movq    RSI, RAX    # spill
045       jmp,s   B9
045
047   B8: #    B9 <- B3  Freq: 4.99393e-06
047       # exception oop is in rax; no code emitted
047       movq    RSI, RAX    # spill
047
04a   B9: #    N1 <- B7 B8  Freq: 9.98796e-06
04a       addq    rsp, 32    # Destroy frame
     popq   rbp

04f       jmp     rethrow_stub




More information about the hotspot-compiler-dev mailing list