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