42 1 3 java.lang.Object:: (1 bytes) 44 2 3 java.lang.String::hashCode (60 bytes) 45 3 3 java.util.ImmutableCollections$SetN$SetNIterator::nextIndex (56 bytes) 45 4 3 java.util.concurrent.ConcurrentHashMap::tabAt (22 bytes) 46 5 3 java.util.ImmutableCollections$SetN$SetNIterator::next (47 bytes) 46 6 3 java.util.concurrent.ConcurrentHashMap::spread (10 bytes) 46 13 n 0 jdk.internal.misc.Unsafe::compareAndSetLong (native) 47 10 ! 3 java.util.concurrent.ConcurrentHashMap::putVal (432 bytes) 47 17 4 java.lang.Object:: (1 bytes) 47 19 n 0 jdk.internal.misc.Unsafe::compareAndSetReference (native) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x0000000800424eb8 - method holder: 'java/lang/Object' - constants: 0x000000080058a0f0 constant pool [96] {0x000000080058a0f0} for 'java/lang/Object' cache=0x0000000800424f70 - access: 0x81000001 public - name: '' - signature: '()V' - max stack: 1 - max locals: 1 - size of params: 1 - method size: 13 - intrinsic id: 297 _Object_init - highest level: 3 - vtable index: -2 - i2i entry: 0x0000000800000000 - adapters: AHE@0x00007f2f64247600: 0xb0000000 i2c: 0x00007f2f4c87f160 c2i: 0x00007f2f4c87f284 c2iUV: 0x00007f2f4c87f247 c2iNCI: 0x00007f2f4c87f2c1 - compiled entry 0x00007f2f4ccfd200 - code size: 1 - code start: 0x0000000800ac4e00 - code end (excl): 0x0000000800ac4e01 - method data: 0x00007f2f3580c680 - checked ex length: 0 - linenumber start: 0x0000000800ac4e01 - localvar length: 1 - localvar start: 0x0000000800ac4e0a - compiled code: nmethod 47 1 3 java.lang.Object:: (1 bytes) --------------------------------- OptoAssembly --------------------------------- # # void ( java/lang/Object:NotNull * ) # #r018 rsi:rsi : parm 0: java/lang/Object:NotNull * # -- Old rsp -- Framesize: 32 -- #r583 rsp+28: in_preserve #r582 rsp+24: return address #r581 rsp+20: in_preserve #r580 rsp+16: saved fp register #r579 rsp+12: pad2, stack alignment #r578 rsp+ 8: pad2, stack alignment #r577 rsp+ 4: Fixed slot 1 #r576 rsp+ 0: Fixed slot 0 # 000 N14: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()] # compressed klass decode_klass_not_null rscratch1, rscratch1 cmpq rax, rscratch1 # Inline cache check jne SharedRuntime::_ic_miss_stub nop # nops to align entry point nop # 12 bytes pad for loops and calls 030 B1: # out( N14 ) <- BLOCK HEAD IS JUNK Freq: 1 030 # stack bang (96 bytes) pushq rbp # Save rbp subq rsp, #16 # Create frame 03c addq rsp, 16 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 04b ret -------------------------------------------------------------------------------- 48 1 3 java.lang.Object:: (1 bytes) made not entrant 51 21 3 java.util.HashMap::putVal (300 bytes) 54 7 3 java.util.HashMap::hash (20 bytes) 54 9 3 java.util.ImmutableCollections$SetN$SetNIterator::hasNext (13 bytes) 55 23 3 java.util.HashMap::newNode (13 bytes) 55 22 3 java.util.HashMap::put (13 bytes) 56 8 1 java.lang.module.ModuleReference::descriptor (5 bytes) 56 15 1 java.lang.module.ResolvedModule::reference (5 bytes) 56 14 1 java.lang.module.ModuleDescriptor::name (5 bytes) 56 24 3 java.util.HashMap$Node:: (26 bytes) 57 25 3 java.util.HashMap::afterNodeInsertion (1 bytes) 57 20 1 java.lang.module.ModuleDescriptor$Exports::source (5 bytes) 57 11 3 java.util.concurrent.ConcurrentHashMap$Node:: (20 bytes) 57 32 3 java.util.ImmutableCollections$Set12$1::hasNext (13 bytes) 57 34 4 java.util.ImmutableCollections$SetN$SetNIterator::nextIndex (56 bytes) 57 12 3 java.util.concurrent.ConcurrentHashMap::addCount (280 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00000008002cdd80 - method holder: 'java/util/ImmutableCollections$SetN$SetNIterator' - constants: 0x000000080094c2b0 constant pool [74] {0x000000080094c2b0} for 'java/util/ImmutableCollections$SetN$SetNIterator' cache=0x00000008002cdaa0 - access: 0x81000002 private - name: 'nextIndex' - signature: '()I' - max stack: 4 - max locals: 2 - size of params: 1 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x0000000800000000 - adapters: AHE@0x00007f2f64247ab0: 0xb0000000 i2c: 0x00007f2f4c8769e0 c2i: 0x00007f2f4c876b04 c2iUV: 0x00007f2f4c876ac7 c2iNCI: 0x00007f2f4c876b41 - compiled entry 0x00007f2f4ccfe060 - code size: 56 - code start: 0x000000080094c768 - code end (excl): 0x000000080094c7a0 - method data: 0x00007f2f3580f9b8 - checked ex length: 0 - linenumber start: 0x000000080094c7a0 - localvar length: 2 - localvar start: 0x000000080094c7ae - compiled code: nmethod 58 3 3 java.util.ImmutableCollections$SetN$SetNIterator::nextIndex (56 bytes) --------------------------------- OptoAssembly --------------------------------- # # int ( java/util/ImmutableCollections$SetN$SetNIterator:NotNull:exact * ) # #r018 rsi:rsi : parm 0: java/util/ImmutableCollections$SetN$SetNIterator:NotNull:exact * # -- Old rsp -- Framesize: 32 -- #r583 rsp+28: in_preserve #r582 rsp+24: return address #r581 rsp+20: in_preserve #r580 rsp+16: saved fp register #r579 rsp+12: pad2, stack alignment #r578 rsp+ 8: pad2, stack alignment #r577 rsp+ 4: Fixed slot 1 #r576 rsp+ 0: Fixed slot 0 # 000 N63: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()] # compressed klass decode_klass_not_null rscratch1, rscratch1 cmpq rax, rscratch1 # Inline cache check jne SharedRuntime::_ic_miss_stub nop # nops to align entry point nop # 12 bytes pad for loops and calls 030 B1: # out( B6 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 030 # stack bang (136 bytes) pushq rbp # Save rbp subq rsp, #16 # Create frame 03c movl R11, [RSI + #20 (8-bit)] # compressed ptr ! Field: java/util/ImmutableCollections$SetN$SetNIterator.this$0 040 movl R10, [R12 + R11 << 3 + #16] (compressed oop addressing) # compressed ptr ! Field: java/util/ImmutableCollections$SetN.elements (constant) 045 NullCheck R11 045 B2: # out( B7 B3 ) <- in( B1 ) Freq: 0.999999 045 movl R11, [R12 + R10 << 3 + #12] (compressed oop addressing) # range 04a NullCheck R10 04a B3: # out( B5 B4 ) <- in( B2 ) Freq: 0.999998 04a movl RAX, [RSI + #16 (8-bit)] # int ! Field: java/util/ImmutableCollections$SetN$SetNIterator.idx 04d incl RAX # int 04f cmpl RAX, R11 052 jge,s B5 P=0.033380 C=5662.000000 054 B4: # out( N63 ) <- in( B3 B5 ) Freq: 0.999998 054 movl [RSI + #16 (8-bit)], RAX # int ! Field: java/util/ImmutableCollections$SetN$SetNIterator.idx 057 addq rsp, 16 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 066 ret 067 B5: # out( B4 ) <- in( B3 ) Freq: 0.0333804 067 xorl RAX, RAX # int 069 jmp,s B4 06b B6: # out( N63 ) <- in( B1 ) Freq: 1.01328e-06 06b movl RSI, #-10 # int nop # 3 bytes pad for loops and calls 073 call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # java.util.ImmutableCollections$SetN$SetNIterator::nextIndex @ bci:19 L[0]=_ L[1]=_ STK[0]=_ STK[1]=#NULL # OopMap {off=120/0x78} 078 ud2 # ShouldNotReachHere 07a B7: # out( N63 ) <- in( B2 ) Freq: 1.01328e-06 07a movl RSI, #-10 # int 07f call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # java.util.ImmutableCollections$SetN$SetNIterator::nextIndex @ bci:22 L[0]=_ L[1]=_ STK[0]=_ STK[1]=#NULL # OopMap {off=132/0x84} 084 ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 59 3 3 java.util.ImmutableCollections$SetN$SetNIterator::nextIndex (56 bytes) made not entrant 60 27 1 java.lang.module.ModuleDescriptor::isAutomatic (5 bytes) 60 30 1 java.util.ImmutableCollections$Set12::isEmpty (2 bytes) 60 28 1 java.lang.module.ResolvedModule::configuration (5 bytes) 60 16 3 java.util.concurrent.ConcurrentHashMap::putIfAbsent (8 bytes) 60 26 1 java.util.ImmutableCollections$SetN::size (5 bytes) 61 18 3 java.util.concurrent.ConcurrentHashMap::casTabAt (21 bytes) 61 35 3 java.lang.String::coder (15 bytes) 61 31 1 java.lang.module.ModuleDescriptor::isOpen (5 bytes) 61 33 1 java.lang.Module::getDescriptor (5 bytes) 61 29 1 java.lang.module.ModuleDescriptor$Exports::targets (5 bytes) 64 36 % 3 SmallByteAdd::doit2 @ 8 (46 bytes) 64 37 3 SmallByteAdd::doit2 (46 bytes) 65 38 % 4 SmallByteAdd::doit2 @ 8 (46 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00007f2f35c007b0 - method holder: 'SmallByteAdd' - constants: 0x00007f2f35c000c8 constant pool [124]/operands[5] {0x00007f2f35c000c8} for 'SmallByteAdd' cache=0x00007f2f35c00ae0 - access: 0xc1000009 public static - name: 'doit2' - signature: '(J)V' - max stack: 6 - max locals: 3 - size of params: 2 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x00007f2f4c782460 - adapters: AHE@0x00007f2f64314d20: 0xbe000000 i2c: 0x00007f2f4c94ff60 c2i: 0x00007f2f4c9500aa c2iUV: 0x00007f2f4c95006d c2iNCI: 0x00007f2f4c9500e7 - compiled entry 0x00007f2f4cd0f9c0 - code size: 46 - code start: 0x00007f2f35c00770 - code end (excl): 0x00007f2f35c0079e - method data: 0x00007f2f35c01040 - checked ex length: 0 - linenumber start: 0x00007f2f35c0079e - localvar length: 0 - compiled code: nmethod 90 37 3 SmallByteAdd::doit2 (46 bytes) --------------------------------- OptoAssembly --------------------------------- # # void ( rawptr:BotPTR ) # #r018 rsi:rsi : parm 0: rawptr:BotPTR # -- Old rsp -- Framesize: 64 -- #r583 rsp+60: in_preserve #r582 rsp+56: return address #r581 rsp+52: in_preserve #r580 rsp+48: saved fp register #r579 rsp+44: pad2, stack alignment #r578 rsp+40: pad2, stack alignment #r577 rsp+36: Fixed slot 1 #r576 rsp+32: Fixed slot 0 #r591 rsp+28: spill #r590 rsp+24: spill #r589 rsp+20: spill #r588 rsp+16: spill #r587 rsp+12: spill #r586 rsp+ 8: spill #r585 rsp+ 4: spill #r584 rsp+ 0: spill # 000 N518: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 # breakpoint nop # 11 bytes pad for loops and calls 010 B1: # out( B13 ) <- BLOCK HEAD IS JUNK Freq: 1 010 # stack bang (160 bytes) pushq rbp # Save rbp subq rsp, #48 # Create frame 01c movl R13, [RSI] # int 01f movq RBX, [RSI + #8 (8-bit)] # long 023 movq RDI, RSI # spill 026 call_leaf,runtime OSR_migration_end No JVM State Info # 036 movq R8, java/lang/Class:exact * # ptr 040 movl R10, [R8 + #112 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data 044 movl R11, [R8 + #120 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data3 048 movl R8, [R8 + #116 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data2 04c decode_heap_oop_not_null RCX,R10 050 decode_heap_oop_not_null RDX,R8 054 movl R9, RCX # ptr -> int 057 decode_heap_oop_not_null RSI,R11 05b andl R9, #31 # int 05f # TLS is in R15 05f movl RDI, #256000 # int 064 jmp B13 nop # 3 bytes pad for loops and calls 06c B2: # out( B3 ) <- in( B27 ) top-of-loop Freq: 31847.7 06c # castII of R13 06c B3: # out( B3 B4 ) <- in( B2 B3 ) Loop( B3-B3 inner post of N1531) Freq: 63695.4 06c movslq R11, R13 # i2l 06f vmovdqu XMM4,[RSI + #16 + R11] ! load vector (32 bytes) 076 vpaddb XMM4,XMM4,[RDX + #16 + R11] ! add packed32B 07d vmovdqu [RCX + #16 + R11],XMM4 ! store vector (32 bytes) 084 addl R13, #32 # int 088 cmpl R13, R10 08b jl,s B3 # loop end P=0.500000 C=79862.000000 08d B4: # out( B10 B5 ) <- in( B22 B3 B28 ) top-of-loop Freq: 63695.5 08d cmpl R13, #1024 094 jge,s B10 P=0.500000 C=-1.000000 096 B5: # out( B6 ) <- in( B4 ) Freq: 31847.7 096 # castII of R13 nop # 2 bytes pad for loops and calls 098 B6: # out( B29 B7 ) <- in( B5 B9 ) Loop( B6-B9 inner post of N412) Freq: 63695.3 098 cmpl R13, RBX # unsigned 09b jnb,u B29 P=0.000001 C=-1.000000 0a1 B7: # out( B30 B8 ) <- in( B6 ) Freq: 63695.2 0a1 movslq R10, R13 # i2l 0a4 movsbl R8, [RDX + #16 + R10] # byte 0aa cmpl R13, R9 # unsigned 0ad jnb,u B30 P=0.000001 C=-1.000000 0b3 B8: # out( B32 B9 ) <- in( B7 ) Freq: 63695.2 0b3 movsbl R11, [RSI + #16 + R10] # byte 0b9 addl R11, R8 # int 0bc cmpl R13, RAX # unsigned 0bf jnb,u B32 P=0.000001 C=-1.000000 0c5 B9: # out( B6 B10 ) <- in( B8 ) Freq: 63695.1 0c5 movb [RCX + #16 + R10], R11 # byte 0ca incl R13 # int 0cd cmpl R13, #1024 0d4 jl,s B6 # loop end P=0.500000 C=79862.000000 0d6 B10: # out( B11 ) <- in( B9 B4 ) Freq: 63695.3 0d6 movdq RBX, XMM0 # spill 0db movdl R10, XMM1 # spill 0e0 movdl R11, XMM3 # spill 0e5 movdl R8, XMM2 # spill 0ea movl R9, [rsp + #0] # spill 0ee B11: # out( B34 B12 ) <- in( B13 B10 ) Freq: 63757.6 0ee movq RAX, [R15 + #288 (32-bit)] # ptr 0f5 decq RBX # long 0f8 testl rax, [RAX] # Safepoint: poll for GC # SmallByteAdd::doit2 @ bci:42 L[0]=RBX L[1]=_ L[2]=_ # OopMap {r10=NarrowOop r11=NarrowOop r8=NarrowOop rcx=Oop rdx=Oop rsi=Oop off=248/0xf8} 0fa testq RBX, RBX 0fd jle B34 P=0.000000 C=78.000000 103 B12: # out( B13 ) <- in( B11 ) Freq: 63757.5 103 xorl R13, R13 # int 106 B13: # out( B11 B14 ) <- in( B1 B12 ) Loop( B13-B12 ) Freq: 63758.5 106 cmpl R13, #1024 10d jge,s B11 P=0.000977 C=79862.000000 10f B14: # out( B15 ) <- in( B13 ) Freq: 63696.2 10f movl [rsp + #0], R9 # spill 113 movdl XMM2, R8 # spill 118 movdl XMM3, R11 # spill 11d movdl XMM1, R10 # spill 122 movdq XMM0, RBX # spill 127 movl R11, R13 # spill 12a incl R11 # int 12d xorl R10, R10 # int 130 xorl R9, R9 # int 133 cmpl R11, R10 136 cmovllt R11, R9 # max 13a movl R8, #1024 # int 140 cmpl R11, R8 143 movl R10, #1024 # int 149 cmovlgt R11, R10 # min 14d movl R10, #16 # int 153 subl R10, R11 # int 156 subl R10, [RSP + #0 (32-bit)] # int 15a andl R10, #31 # int 15e addl R10, R11 # int 161 cmpl R10, R8 164 movl R11, #1024 # int 16a cmovlgt R10, R11 # min 16e B15: # out( B35 B16 ) <- in( B14 B21 ) Loop( B15-B21 inner pre of N412) Freq: 127392 16e movdl R11, XMM2 # spill 173 movl RBX, [R12 + R11 << 3 + #12] (compressed oop addressing) # range 178 NullCheck R11 178 B16: # out( B29 B17 ) <- in( B15 ) Freq: 127392 178 cmpl R13, RBX # unsigned 17b jnb,u B29 P=0.000001 C=-1.000000 181 B17: # out( B36 B18 ) <- in( B16 ) Freq: 127391 181 movdl R11, XMM3 # spill 186 movl R9, [R12 + R11 << 3 + #12] (compressed oop addressing) # range 18b NullCheck R11 18b B18: # out( B30 B19 ) <- in( B17 ) Freq: 127391 18b movslq RBP, R13 # i2l 18e movsbl R8, [RDX + #16 + RBP] # byte 194 cmpl R13, R9 # unsigned 197 jnb,u B30 P=0.000001 C=-1.000000 19d B19: # out( B37 B20 ) <- in( B18 ) Freq: 127391 19d movsbl R11, [RSI + #16 + RBP] # byte 1a3 addl R11, R8 # int 1a6 movdl R8, XMM1 # spill 1ab movl RAX, [R12 + R8 << 3 + #12] (compressed oop addressing) # range 1b0 NullCheck R8 1b0 B20: # out( B31 B21 ) <- in( B19 ) Freq: 127391 1b0 cmpl R13, RAX # unsigned 1b3 jnb,u B31 P=0.000001 C=-1.000000 1b9 B21: # out( B15 B22 ) <- in( B20 ) Freq: 127391 1b9 movb [RCX + #16 + RBP], R11 # byte 1be incl R13 # int 1c1 cmpl R13, R10 1c4 jl,s B15 # loop end P=0.500000 C=79862.000000 1c6 B22: # out( B4 B23 ) <- in( B21 ) Freq: 63695.5 1c6 cmpl RBX, R9 1c9 movl R8, RBX # spill 1cc cmovlgt R8, R9 # min 1d0 cmpl R8, RAX 1d3 cmovlgt R8, RAX # min 1d7 movl R10, #1024 # int 1dd cmpl R8, R10 1e0 movl R11, #1024 # int 1e6 cmovlgt R8, R11 # min 1ea movl R11, R8 # spill 1ed addl R11, #-255 # int 1f4 cmpl R8, R11 1f7 movl R10, #-2147483648 # int 1fd cmovll R11, R10 # signed, int 201 cmpl R13, R11 204 jge B4 P=0.000001 C=-1.000000 20a B23: # out( B24 ) <- in( B22 ) Freq: 63695.4 20a # castII of R13 20a B24: # out( B25 ) <- in( B23 B26 ) Loop( B24-B26 ) Freq: 6.52161e+07 20a movl R10, R11 # spill 20d subl R10, R13 # int 210 cmpl R10, RDI 213 cmovlgt R10, RDI # min 217 addl R10, R13 # int nop # 6 bytes pad for loops and calls 220 B25: # out( B25 B26 ) <- in( B24 B25 ) Loop( B25-B25 inner main of N150 strip mined) Freq: 6.67732e+10 220 movslq RBP, R13 # i2l 223 movslq R14, R13 # i2l 226 vmovdqu XMM4,[RSI + #16 + R14] ! load vector (32 bytes) 22d vpaddb XMM4,XMM4,[RDX + #16 + R14] ! add packed32B 234 vmovdqu [RCX + #16 + R14],XMM4 ! store vector (32 bytes) 23b vmovdqu XMM4,[RSI + #48 + RBP] ! load vector (32 bytes) 241 vpaddb XMM4,XMM4,[RDX + #48 + RBP] ! add packed32B 247 vmovdqu [RCX + #48 + RBP],XMM4 ! store vector (32 bytes) 24d vmovdqu XMM4,[RSI + #80 + RBP] ! load vector (32 bytes) 253 vpaddb XMM4,XMM4,[RDX + #80 + RBP] ! add packed32B 259 vmovdqu [RCX + #80 + RBP],XMM4 ! store vector (32 bytes) 25f vmovdqu XMM4,[RSI + #112 + RBP] ! load vector (32 bytes) 265 vpaddb XMM4,XMM4,[RDX + #112 + RBP] ! add packed32B 26b vmovdqu [RCX + #112 + RBP],XMM4 ! store vector (32 bytes) 271 vmovdqu XMM4,[RSI + #144 + RBP] ! load vector (32 bytes) 27a vpaddb XMM4,XMM4,[RDX + #144 + RBP] ! add packed32B 283 vmovdqu [RCX + #144 + RBP],XMM4 ! store vector (32 bytes) 28c vmovdqu XMM4,[RSI + #176 + RBP] ! load vector (32 bytes) 295 vpaddb XMM4,XMM4,[RDX + #176 + RBP] ! add packed32B 29e vmovdqu [RCX + #176 + RBP],XMM4 ! store vector (32 bytes) 2a7 vmovdqu XMM4,[RSI + #208 + RBP] ! load vector (32 bytes) 2b0 vpaddb XMM4,XMM4,[RDX + #208 + RBP] ! add packed32B 2b9 vmovdqu [RCX + #208 + RBP],XMM4 ! store vector (32 bytes) 2c2 vmovdqu XMM4,[RSI + #240 + RBP] ! load vector (32 bytes) 2cb vpaddb XMM4,XMM4,[RDX + #240 + RBP] ! add packed32B 2d4 vmovdqu [RCX + #240 + RBP],XMM4 ! store vector (32 bytes) 2dd addl R13, #256 # int 2e4 cmpl R13, R10 2e7 jl B25 # loop end P=0.999023 C=79862.000000 2ed B26: # out( B24 B27 ) <- in( B25 ) Freq: 6.52161e+07 2ed movq R10, [R15 + #288 (32-bit)] # ptr 2f4 testl rax, [R10] # Safepoint: poll for GC # SmallByteAdd::doit2 @ bci:35 L[0]=XMM0 L[1]=_ L[2]=R13 # OopMap {rcx=Oop rdx=Oop rsi=Oop xmm1=NarrowOop xmm2=NarrowOop xmm3=NarrowOop off=756/0x2f4} 2f7 cmpl R13, R11 2fa jl B24 P=0.999023 C=79862.000000 300 B27: # out( B2 B28 ) <- in( B26 ) Freq: 63695.4 300 movl R10, R8 # spill 303 addl R10, #-31 # int 307 cmpl R8, R10 30a movl R8, #-2147483648 # int 310 cmovll R10, R8 # signed, int 314 cmpl R13, R10 317 jl B2 P=0.500000 C=-1.000000 31d B28: # out( B4 ) <- in( B27 ) Freq: 31847.7 31d jmp B4 322 B29: # out( N518 ) <- in( B6 B16 ) Freq: 0.193624 322 movl RSI, #-28 # int 327 movdq RBP, XMM0 # spill 32c movss [rsp + #4], XMM1 # spill 332 movl [rsp + #8], R13 # spill 337 movss [rsp + #12], XMM2 # spill 33d movl [rsp + #16], R13 # spill nop # 2 bytes pad for loops and calls 344 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:23 L[0]=RBP L[1]=_ L[2]=rsp + #8 STK[0]=rsp + #4 STK[1]=rsp + #16 STK[2]=rsp + #12 STK[3]=rsp + #8 # OopMap {[4]=NarrowOop [12]=NarrowOop off=844/0x34c} 34c ud2 # ShouldNotReachHere 34e B30: # out( N518 ) <- in( B7 B18 ) Freq: 0.193624 34e movl RSI, #-28 # int 353 movdq RBP, XMM0 # spill 358 movss [rsp + #4], XMM1 # spill 35e movl [rsp + #8], R13 # spill 363 movl [rsp + #12], R8 # spill 368 movss [rsp + #16], XMM3 # spill 36e movl [rsp + #20], R13 # spill nop # 1 bytes pad for loops and calls 374 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:28 L[0]=RBP L[1]=_ L[2]=rsp + #8 STK[0]=rsp + #4 STK[1]=rsp + #20 STK[2]=rsp + #12 STK[3]=rsp + #16 STK[4]=rsp + #8 # OopMap {[4]=NarrowOop [16]=NarrowOop off=892/0x37c} 37c ud2 # ShouldNotReachHere 37e B31: # out( B33 ) <- in( B20 ) Freq: 0.129083 37e movsbl RBP, R11 # i2b 382 jmp,s B33 384 B32: # out( B33 ) <- in( B8 ) Freq: 0.064541 384 movsbl RBP, R11 # i2b 388 B33: # out( N518 ) <- in( B32 B31 ) Freq: 0.193624 388 movl RSI, #-28 # int 38d movsd [rsp + #0], XMM0 # spill 392 movss [rsp + #12], XMM1 # spill 398 movl [rsp + #16], R13 # spill nop # 3 bytes pad for loops and calls 3a0 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:31 L[0]=rsp + #0 L[1]=_ L[2]=rsp + #16 STK[0]=rsp + #12 STK[1]=rsp + #16 STK[2]=RBP # OopMap {[12]=NarrowOop off=936/0x3a8} 3a8 ud2 # ShouldNotReachHere 3aa B34: # out( N518 ) <- in( B11 ) Freq: 0.0318788 3aa xorl R10, R10 # long 3ad cmpq RBX, R10 # CmpL3 movl RBP, -1 jl,s done setne RBP movzbl RBP, RBP done: 3bf movl RSI, #-187 # int 3c4 movq [rsp + #0], RBX # spill 3c8 call,static wrapper for: uncommon_trap(reason='unstable_if' action='reinterpret' debug_id='0') # SmallByteAdd::doit2 @ bci:3 L[0]=rsp + #0 L[1]=_ L[2]=_ STK[0]=RBP # OopMap {off=976/0x3d0} 3d0 ud2 # ShouldNotReachHere 3d2 B35: # out( N518 ) <- in( B15 ) Freq: 0.129083 3d2 movl RSI, #-10 # int 3d7 movl RBP, R13 # spill nop # 2 bytes pad for loops and calls 3dc call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:23 L[0]=_ L[1]=_ L[2]=_ STK[0]=_ STK[1]=_ STK[2]=#NULL STK[3]=RBP # OopMap {off=996/0x3e4} 3e4 ud2 # ShouldNotReachHere 3e6 B36: # out( N518 ) <- in( B17 ) Freq: 0.129083 3e6 movl RSI, #-10 # int 3eb movl RBP, R13 # spill nop # 2 bytes pad for loops and calls 3f0 call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:28 L[0]=_ L[1]=_ L[2]=_ STK[0]=_ STK[1]=_ STK[2]=_ STK[3]=#NULL STK[4]=RBP # OopMap {off=1016/0x3f8} 3f8 ud2 # ShouldNotReachHere 3fa B37: # out( N518 ) <- in( B19 ) Freq: 0.129083 3fa movsbl RBP, R11 # i2b 3fe movl RSI, #-10 # int 403 movl [rsp + #0], R13 # spill nop # 1 bytes pad for loops and calls 408 call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:31 L[0]=_ L[1]=_ L[2]=_ STK[0]=#NULL STK[1]=rsp + #0 STK[2]=RBP # OopMap {off=1040/0x410} 410 ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 93 36 % 3 SmallByteAdd::doit2 @ 8 (46 bytes) made not entrant 216 38 % 4 SmallByteAdd::doit2 @ 8 (46 bytes) made not entrant 217 39 % 4 SmallByteAdd::doit2 @ 8 (46 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00007f2f35c007b0 - method holder: 'SmallByteAdd' - constants: 0x00007f2f35c000c8 constant pool [124]/operands[5] {0x00007f2f35c000c8} for 'SmallByteAdd' cache=0x00007f2f35c00ae0 - access: 0xc1000009 public static - name: 'doit2' - signature: '(J)V' - max stack: 6 - max locals: 3 - size of params: 2 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x00007f2f4c782460 - adapters: AHE@0x00007f2f64314d20: 0xbe000000 i2c: 0x00007f2f4c94ff60 c2i: 0x00007f2f4c9500aa c2iUV: 0x00007f2f4c95006d c2iNCI: 0x00007f2f4c9500e7 - compiled entry 0x00007f2f4cd0f9c0 - code size: 46 - code start: 0x00007f2f35c00770 - code end (excl): 0x00007f2f35c0079e - method data: 0x00007f2f35c01040 - checked ex length: 0 - linenumber start: 0x00007f2f35c0079e - localvar length: 0 - compiled code: nmethod 241 37 3 SmallByteAdd::doit2 (46 bytes) --------------------------------- OptoAssembly --------------------------------- # # void ( rawptr:BotPTR ) # #r018 rsi:rsi : parm 0: rawptr:BotPTR # -- Old rsp -- Framesize: 64 -- #r583 rsp+60: in_preserve #r582 rsp+56: return address #r581 rsp+52: in_preserve #r580 rsp+48: saved fp register #r579 rsp+44: pad2, stack alignment #r578 rsp+40: pad2, stack alignment #r577 rsp+36: Fixed slot 1 #r576 rsp+32: Fixed slot 0 #r591 rsp+28: spill #r590 rsp+24: spill #r589 rsp+20: spill #r588 rsp+16: spill #r587 rsp+12: spill #r586 rsp+ 8: spill #r585 rsp+ 4: spill #r584 rsp+ 0: spill # 000 N507: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 # breakpoint nop # 11 bytes pad for loops and calls 010 B1: # out( B13 ) <- BLOCK HEAD IS JUNK Freq: 1 010 # stack bang (160 bytes) pushq rbp # Save rbp subq rsp, #48 # Create frame 01c movl R13, [RSI] # int 01f movq RBX, [RSI + #8 (8-bit)] # long 023 movq RDI, RSI # spill 026 call_leaf,runtime OSR_migration_end No JVM State Info # 036 movq R8, java/lang/Class:exact * # ptr 040 movl R10, [R8 + #112 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data 044 movl R11, [R8 + #120 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data3 048 movl R8, [R8 + #116 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data2 04c decode_heap_oop_not_null RCX,R10 050 decode_heap_oop_not_null RDX,R8 054 movl R9, RCX # ptr -> int 057 decode_heap_oop_not_null RSI,R11 05b andl R9, #31 # int 05f # TLS is in R15 05f movl RDI, #256000 # int 064 jmp B13 nop # 3 bytes pad for loops and calls 06c B2: # out( B3 ) <- in( B27 ) top-of-loop Freq: 1905.83 06c # castII of R13 06c B3: # out( B3 B4 ) <- in( B2 B3 ) Loop( B3-B3 inner post of N1527) Freq: 3811.65 06c movslq R10, R13 # i2l 06f vmovdqu XMM3,[RSI + #16 + R10] ! load vector (32 bytes) 076 vpaddb XMM3,XMM3,[RDX + #16 + R10] ! add packed32B 07d vmovdqu [RCX + #16 + R10],XMM3 ! store vector (32 bytes) 084 addl R13, #32 # int 088 cmpl R13, R11 08b jl,s B3 # loop end P=0.500000 C=4149870.000000 08d B4: # out( B10 B5 ) <- in( B22 B3 B28 ) top-of-loop Freq: 3811.66 08d cmpl R13, #1024 094 jge,s B10 P=0.500000 C=-1.000000 096 B5: # out( B6 ) <- in( B4 ) Freq: 1905.83 096 # castII of R13 nop # 2 bytes pad for loops and calls 098 B6: # out( B30 B7 ) <- in( B5 B9 ) Loop( B6-B9 inner post of N408) Freq: 3811.64 098 cmpl R13, RBX # unsigned 09b jnb,u B30 P=0.000001 C=-1.000000 0a1 B7: # out( B31 B8 ) <- in( B6 ) Freq: 3811.64 0a1 movslq R11, R13 # i2l 0a4 movsbl R8, [RDX + #16 + R11] # byte 0aa cmpl R13, R9 # unsigned 0ad jnb,u B31 P=0.000001 C=-1.000000 0b3 B8: # out( B33 B9 ) <- in( B7 ) Freq: 3811.64 0b3 movsbl R10, [RSI + #16 + R11] # byte 0b9 addl R10, R8 # int 0bc cmpl R13, RAX # unsigned 0bf jnb,u B33 P=0.000001 C=-1.000000 0c5 B9: # out( B6 B10 ) <- in( B8 ) Freq: 3811.63 0c5 movb [RCX + #16 + R11], R10 # byte 0ca incl R13 # int 0cd cmpl R13, #1024 0d4 jl,s B6 # loop end P=0.500000 C=4149870.000000 0d6 B10: # out( B11 ) <- in( B9 B4 ) Freq: 3811.64 0d6 movdq RBX, XMM0 # spill 0db movdl R10, XMM2 # spill 0e0 movdl R11, XMM1 # spill 0e5 movdl R8, XMM4 # spill 0ea movl R9, [rsp + #0] # spill 0ee B11: # out( B29 B12 ) <- in( B13 B10 ) Freq: 3815.37 0ee movq RAX, [R15 + #288 (32-bit)] # ptr 0f5 decq RBX # long 0f8 testl rax, [RAX] # Safepoint: poll for GC # SmallByteAdd::doit2 @ bci:42 L[0]=RBX L[1]=_ L[2]=_ # OopMap {r10=NarrowOop r11=NarrowOop r8=NarrowOop rcx=Oop rdx=Oop rsi=Oop off=248/0xf8} 0fa testq RBX, RBX 0fd jle B29 P=0.000247 C=4048.000000 103 B12: # out( B13 ) <- in( B11 ) Freq: 3814.42 103 xorl R13, R13 # int 106 B13: # out( B11 B14 ) <- in( B1 B12 ) Loop( B13-B12 ) Freq: 3815.42 106 cmpl R13, #1024 10d jge,s B11 P=0.000975 C=4149870.000000 10f B14: # out( B15 ) <- in( B13 ) Freq: 3811.7 10f movl [rsp + #0], R9 # spill 113 movdl XMM4, R8 # spill 118 movdl XMM1, R11 # spill 11d movdl XMM2, R10 # spill 122 movdq XMM0, RBX # spill 127 movl R8, R13 # spill 12a incl R8 # int 12d xorl R11, R11 # int 130 xorl R10, R10 # int 133 cmpl R8, R11 136 cmovllt R8, R10 # max 13a movl R10, #1024 # int 140 cmpl R8, R10 143 movl R11, #1024 # int 149 cmovlgt R8, R11 # min 14d movl R10, #16 # int 153 subl R10, R8 # int 156 subl R10, R9 # int 159 andl R10, #31 # int 15d addl R10, R8 # int 160 cmpl R10, R11 163 movl R8, #1024 # int 169 cmovlgt R10, R8 # min 16d B15: # out( B35 B16 ) <- in( B14 B21 ) Loop( B15-B21 inner pre of N408) Freq: 7623.36 16d movdl R11, XMM4 # spill 172 movl RBX, [R12 + R11 << 3 + #12] (compressed oop addressing) # range 177 NullCheck R11 177 B16: # out( B30 B17 ) <- in( B15 ) Freq: 7623.35 177 cmpl R13, RBX # unsigned 17a jnb,u B30 P=0.000001 C=-1.000000 180 B17: # out( B36 B18 ) <- in( B16 ) Freq: 7623.34 180 movdl R11, XMM1 # spill 185 movl R9, [R12 + R11 << 3 + #12] (compressed oop addressing) # range 18a NullCheck R11 18a B18: # out( B31 B19 ) <- in( B17 ) Freq: 7623.34 18a movslq RBP, R13 # i2l 18d movsbl R8, [RDX + #16 + RBP] # byte 193 cmpl R13, R9 # unsigned 196 jnb,u B31 P=0.000001 C=-1.000000 19c B19: # out( B37 B20 ) <- in( B18 ) Freq: 7623.33 19c movsbl R11, [RSI + #16 + RBP] # byte 1a2 addl R11, R8 # int 1a5 movdl R8, XMM2 # spill 1aa movl RAX, [R12 + R8 << 3 + #12] (compressed oop addressing) # range 1af NullCheck R8 1af B20: # out( B32 B21 ) <- in( B19 ) Freq: 7623.32 1af cmpl R13, RAX # unsigned 1b2 jnb,u B32 P=0.000001 C=-1.000000 1b8 B21: # out( B15 B22 ) <- in( B20 ) Freq: 7623.31 1b8 movb [RCX + #16 + RBP], R11 # byte 1bd incl R13 # int 1c0 cmpl R13, R10 1c3 jl,s B15 # loop end P=0.500000 C=4149870.000000 1c5 B22: # out( B4 B23 ) <- in( B21 ) Freq: 3811.66 1c5 cmpl RBX, R9 1c8 movl R8, RBX # spill 1cb cmovlgt R8, R9 # min 1cf cmpl R8, RAX 1d2 cmovlgt R8, RAX # min 1d6 movl R11, #1024 # int 1dc cmpl R8, R11 1df movl R10, #1024 # int 1e5 cmovlgt R8, R10 # min 1e9 movl R11, R8 # spill 1ec addl R11, #-255 # int 1f3 cmpl R8, R11 1f6 movl R10, #-2147483648 # int 1fc cmovll R11, R10 # signed, int 200 cmpl R13, R11 203 jge B4 P=0.000001 C=-1.000000 209 B23: # out( B24 ) <- in( B22 ) Freq: 3811.65 209 # castII of R13 209 B24: # out( B25 ) <- in( B23 B26 ) Loop( B24-B26 ) Freq: 3.90766e+06 209 movl R10, R11 # spill 20c subl R10, R13 # int 20f cmpl R10, RDI 212 cmovlgt R10, RDI # min 216 addl R10, R13 # int nop # 7 bytes pad for loops and calls 220 B25: # out( B25 B26 ) <- in( B24 B25 ) Loop( B25-B25 inner main of N150 strip mined) Freq: 4.00609e+09 220 movslq RBP, R13 # i2l 223 movslq R14, R13 # i2l 226 vmovdqu XMM3,[RSI + #16 + R14] ! load vector (32 bytes) 22d vpaddb XMM3,XMM3,[RDX + #16 + R14] ! add packed32B 234 vmovdqu [RCX + #16 + R14],XMM3 ! store vector (32 bytes) 23b vmovdqu XMM3,[RSI + #48 + RBP] ! load vector (32 bytes) 241 vpaddb XMM3,XMM3,[RDX + #48 + RBP] ! add packed32B 247 vmovdqu [RCX + #48 + RBP],XMM3 ! store vector (32 bytes) 24d vmovdqu XMM3,[RSI + #80 + RBP] ! load vector (32 bytes) 253 vpaddb XMM3,XMM3,[RDX + #80 + RBP] ! add packed32B 259 vmovdqu [RCX + #80 + RBP],XMM3 ! store vector (32 bytes) 25f vmovdqu XMM3,[RSI + #112 + RBP] ! load vector (32 bytes) 265 vpaddb XMM3,XMM3,[RDX + #112 + RBP] ! add packed32B 26b vmovdqu [RCX + #112 + RBP],XMM3 ! store vector (32 bytes) 271 vmovdqu XMM3,[RSI + #144 + RBP] ! load vector (32 bytes) 27a vpaddb XMM3,XMM3,[RDX + #144 + RBP] ! add packed32B 283 vmovdqu [RCX + #144 + RBP],XMM3 ! store vector (32 bytes) 28c vmovdqu XMM3,[RSI + #176 + RBP] ! load vector (32 bytes) 295 vpaddb XMM3,XMM3,[RDX + #176 + RBP] ! add packed32B 29e vmovdqu [RCX + #176 + RBP],XMM3 ! store vector (32 bytes) 2a7 vmovdqu XMM3,[RSI + #208 + RBP] ! load vector (32 bytes) 2b0 vpaddb XMM3,XMM3,[RDX + #208 + RBP] ! add packed32B 2b9 vmovdqu [RCX + #208 + RBP],XMM3 ! store vector (32 bytes) 2c2 vmovdqu XMM3,[RSI + #240 + RBP] ! load vector (32 bytes) 2cb vpaddb XMM3,XMM3,[RDX + #240 + RBP] ! add packed32B 2d4 vmovdqu [RCX + #240 + RBP],XMM3 ! store vector (32 bytes) 2dd addl R13, #256 # int 2e4 cmpl R13, R10 2e7 jl B25 # loop end P=0.999025 C=4149870.000000 2ed B26: # out( B24 B27 ) <- in( B25 ) Freq: 3.90766e+06 2ed movq R10, [R15 + #288 (32-bit)] # ptr 2f4 testl rax, [R10] # Safepoint: poll for GC # SmallByteAdd::doit2 @ bci:35 L[0]=XMM0 L[1]=_ L[2]=R13 # OopMap {rcx=Oop rdx=Oop rsi=Oop xmm1=NarrowOop xmm2=NarrowOop xmm4=NarrowOop off=756/0x2f4} 2f7 cmpl R13, R11 2fa jl B24 P=0.999025 C=4149870.000000 300 B27: # out( B2 B28 ) <- in( B26 ) Freq: 3811.65 300 movl R11, R8 # spill 303 addl R11, #-31 # int 307 cmpl R8, R11 30a movl R10, #-2147483648 # int 310 cmovll R11, R10 # signed, int 314 cmpl R13, R11 317 jl B2 P=0.500000 C=-1.000000 31d B28: # out( B4 ) <- in( B27 ) Freq: 1905.83 31d jmp B4 322 B29: # out( N507 ) <- in( B11 ) Freq: 0.942066 322 vzeroupper addq rsp, 48 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 334 ret 335 B30: # out( N507 ) <- in( B6 B16 ) Freq: 0.0115868 335 movl RSI, #-28 # int 33a movdq RBP, XMM0 # spill 33f movss [rsp + #4], XMM2 # spill 345 movl [rsp + #8], R13 # spill 34a movss [rsp + #12], XMM4 # spill 350 movl [rsp + #16], R13 # spill nop # 3 bytes pad for loops and calls 358 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:23 L[0]=RBP L[1]=_ L[2]=rsp + #8 STK[0]=rsp + #4 STK[1]=rsp + #16 STK[2]=rsp + #12 STK[3]=rsp + #8 # OopMap {[4]=NarrowOop [12]=NarrowOop off=864/0x360} 360 ud2 # ShouldNotReachHere 362 B31: # out( N507 ) <- in( B7 B18 ) Freq: 0.0115868 362 movl RSI, #-28 # int 367 movdq RBP, XMM0 # spill 36c movss [rsp + #4], XMM2 # spill 372 movl [rsp + #8], R13 # spill 377 movl [rsp + #12], R8 # spill 37c movss [rsp + #16], XMM1 # spill 382 movl [rsp + #20], R13 # spill nop # 1 bytes pad for loops and calls 388 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:28 L[0]=RBP L[1]=_ L[2]=rsp + #8 STK[0]=rsp + #4 STK[1]=rsp + #20 STK[2]=rsp + #12 STK[3]=rsp + #16 STK[4]=rsp + #8 # OopMap {[4]=NarrowOop [16]=NarrowOop off=912/0x390} 390 ud2 # ShouldNotReachHere 392 B32: # out( B34 ) <- in( B20 ) Freq: 0.00772455 392 movsbl RBP, R11 # i2b 396 jmp,s B34 398 B33: # out( B34 ) <- in( B8 ) Freq: 0.00386225 398 movsbl RBP, R10 # i2b 39c B34: # out( N507 ) <- in( B33 B32 ) Freq: 0.0115868 39c movl RSI, #-28 # int 3a1 movsd [rsp + #0], XMM0 # spill 3a6 movss [rsp + #12], XMM2 # spill 3ac movl [rsp + #16], R13 # spill nop # 3 bytes pad for loops and calls 3b4 call,static wrapper for: uncommon_trap(reason='range_check' action='make_not_entrant' debug_id='0') # SmallByteAdd::doit2 @ bci:31 L[0]=rsp + #0 L[1]=_ L[2]=rsp + #16 STK[0]=rsp + #12 STK[1]=rsp + #16 STK[2]=RBP # OopMap {[12]=NarrowOop off=956/0x3bc} 3bc ud2 # ShouldNotReachHere 3be B35: # out( N507 ) <- in( B15 ) Freq: 0.00772459 3be movl RSI, #-10 # int 3c3 movl RBP, R13 # spill nop # 2 bytes pad for loops and calls 3c8 call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:23 L[0]=_ L[1]=_ L[2]=_ STK[0]=_ STK[1]=_ STK[2]=#NULL STK[3]=RBP # OopMap {off=976/0x3d0} 3d0 ud2 # ShouldNotReachHere 3d2 B36: # out( N507 ) <- in( B17 ) Freq: 0.00772457 3d2 movl RSI, #-10 # int 3d7 movl RBP, R13 # spill nop # 2 bytes pad for loops and calls 3dc call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:28 L[0]=_ L[1]=_ L[2]=_ STK[0]=_ STK[1]=_ STK[2]=_ STK[3]=#NULL STK[4]=RBP # OopMap {off=996/0x3e4} 3e4 ud2 # ShouldNotReachHere 3e6 B37: # out( N507 ) <- in( B19 ) Freq: 0.00772456 3e6 movsbl RBP, R11 # i2b 3ea movl RSI, #-10 # int 3ef movl [rsp + #0], R13 # spill nop # 1 bytes pad for loops and calls 3f4 call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:31 L[0]=_ L[1]=_ L[2]=_ STK[0]=#NULL STK[1]=rsp + #0 STK[2]=RBP # OopMap {off=1020/0x3fc} 3fc ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 244 40 4 SmallByteAdd::doit2 (46 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00007f2f35c007b0 - method holder: 'SmallByteAdd' - constants: 0x00007f2f35c000c8 constant pool [124]/operands[5] {0x00007f2f35c000c8} for 'SmallByteAdd' cache=0x00007f2f35c00ae0 - access: 0xc1000009 public static - name: 'doit2' - signature: '(J)V' - max stack: 6 - max locals: 3 - size of params: 2 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x00007f2f4c782460 - adapters: AHE@0x00007f2f64314d20: 0xbe000000 i2c: 0x00007f2f4c94ff60 c2i: 0x00007f2f4c9500aa c2iUV: 0x00007f2f4c95006d c2iNCI: 0x00007f2f4c9500e7 - compiled entry 0x00007f2f4cd0f9c0 - code size: 46 - code start: 0x00007f2f35c00770 - code end (excl): 0x00007f2f35c0079e - method data: 0x00007f2f35c01040 - checked ex length: 0 - linenumber start: 0x00007f2f35c0079e - localvar length: 0 - compiled code: nmethod 264 37 3 SmallByteAdd::doit2 (46 bytes) --------------------------------- OptoAssembly --------------------------------- # # void ( long, half ) # #r018 rsi:rsi : parm 0: long # -- Old rsp -- Framesize: 48 -- #r583 rsp+44: in_preserve #r582 rsp+40: return address #r581 rsp+36: in_preserve #r580 rsp+32: saved fp register #r579 rsp+28: pad2, stack alignment #r578 rsp+24: pad2, stack alignment #r577 rsp+20: Fixed slot 1 #r576 rsp+16: Fixed slot 0 #r587 rsp+12: spill #r586 rsp+ 8: spill #r585 rsp+ 4: spill #r584 rsp+ 0: spill # 000 N1: # out( B1 ) <- in( B24 B25 ) Freq: 1 000 B1: # out( B24 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 000 # stack bang (160 bytes) pushq rbp # Save rbp subq rsp, #32 # Create frame 00c movq RCX, RSI # spill 00f testq RSI, RSI 012 jle B24 P=0.000079 C=12706.000000 018 B2: # out( B25 B3 ) <- in( B1 ) Freq: 0.999921 018 movq R10, java/lang/Class:exact * # ptr 022 movl R11, [R10 + #120 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data3 026 movl R9, [R12 + R11 << 3 + #12] (compressed oop addressing) # range 02b NullCheck R11 02b B3: # out( B25 B4 ) <- in( B2 ) Freq: 0.99992 02b testl R9, R9 # unsigned 02e jbe,u B25 P=0.000001 C=-1.000000 034 B4: # out( B25 B5 ) <- in( B3 ) Freq: 0.999919 034 cmpl R9, #1023 # unsigned 03b jbe,u B25 P=0.000001 C=-1.000000 041 B5: # out( B25 B6 ) <- in( B4 ) Freq: 0.999918 041 movl R8, [R10 + #112 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data 045 movl RBX, [R12 + R8 << 3 + #12] (compressed oop addressing) # range 04a NullCheck R8 04a B6: # out( B25 B7 ) <- in( B5 ) Freq: 0.999917 04a testl RBX, RBX # unsigned 04c jbe,u B25 P=0.000001 C=-1.000000 052 B7: # out( B25 B8 ) <- in( B6 ) Freq: 0.999916 052 cmpl RBX, #1023 # unsigned 058 jbe,u B25 P=0.000001 C=-1.000000 05e B8: # out( B25 B9 ) <- in( B7 ) Freq: 0.999915 05e movl R10, [R10 + #116 (8-bit)] # compressed ptr ! Field: SmallByteAdd.data2 062 movl RBX, [R12 + R10 << 3 + #12] (compressed oop addressing) # range 067 NullCheck R10 067 B9: # out( B25 B10 ) <- in( B8 ) Freq: 0.999914 067 testl RBX, RBX # unsigned 069 jbe,u B25 P=0.000001 C=-1.000000 06f B10: # out( B25 B11 ) <- in( B9 ) Freq: 0.999913 06f cmpl RBX, #1023 # unsigned 075 jbe,u B25 P=0.000001 C=-1.000000 07b B11: # out( B15 ) <- in( B10 ) Freq: 0.999912 07b decode_heap_oop_not_null RDI,R11 07f decode_heap_oop_not_null RDX,R8 083 decode_heap_oop_not_null RSI,R10 087 movl R8, RDX # ptr -> int 08a andl R8, #31 # int 08e movl R10, #15 # int 094 subl R10, R8 # int 097 andl R10, #31 # int 09b incl R10 # int 09e # TLS is in R15 09e movl R11, #1024 # int 0a4 cmpl R10, R11 0a7 cmovlgt R10, R11 # min 0ab jmp,s B15 nop # 3 bytes pad for loops and calls 0b0 B12: # out( B13 ) <- in( B22 ) top-of-loop Freq: 6352.44 0b0 # castII of R11 0b0 B13: # out( B13 B14 ) <- in( B12 B13 ) Loop( B13-B13 inner post of N322) Freq: 12704.9 0b0 movslq RBX, R11 # i2l 0b3 movsbl R9, [RSI + #16 + RBX] # byte 0b9 movsbl R8, [RDI + #16 + RBX] # byte 0bf addl R9, R8 # int 0c2 movb [RDX + #16 + RBX], R9 # byte 0c7 incl R11 # int 0ca cmpl R11, #1024 0d1 jl,s B13 # loop end P=0.500000 C=13010031.000000 0d3 B14: # out( B24 B15 ) <- in( B13 B23 ) top-of-loop Freq: 12704.9 0d3 movq R11, [R15 + #288 (32-bit)] # ptr 0da decq RCX # long 0dd testl rax, [R11] # Safepoint: poll for GC # SmallByteAdd::doit2 @ bci:42 L[0]=RCX L[1]=_ L[2]=_ # OopMap {rdi=Oop rdx=Oop rsi=Oop off=221/0xdd} 0e0 testq RCX, RCX 0e3 jle B24 P=0.000079 C=12704.000000 0e9 B15: # out( B16 ) <- in( B11 B14 ) Loop( B15-B14 ) Freq: 12704.9 0e9 xorl R11, R11 # int 0ec B16: # out( B16 B17 ) <- in( B15 B16 ) Loop( B16-B16 inner pre of N322) Freq: 25409.8 0ec movslq RBX, R11 # i2l 0ef movsbl R9, [RSI + #16 + RBX] # byte 0f5 movsbl R8, [RDI + #16 + RBX] # byte 0fb addl R9, R8 # int 0fe movb [RDX + #16 + RBX], R9 # byte 103 incl R11 # int 106 cmpl R11, R10 109 jl,s B16 # loop end P=0.500000 C=13010031.000000 10b B17: # out( B18 ) <- in( B16 ) Freq: 12704.9 10b # castII of R11 nop # 5 bytes pad for loops and calls 110 B18: # out( B18 B19 ) <- in( B17 B18 ) Loop( B18-B18 inner main of N29) Freq: 1.30233e+07 110 movslq R8, R11 # i2l 113 vmovdqu XMM0,[RDI + #16 + R8] ! load vector (32 bytes) 11a vpaddb XMM0,XMM0,[RSI + #16 + R8] ! add packed32B 121 vmovdqu [RDX + #16 + R8],XMM0 ! store vector (32 bytes) 128 vmovdqu XMM0,[RDI + #48 + R8] ! load vector (32 bytes) 12f vpaddb XMM0,XMM0,[RSI + #48 + R8] ! add packed32B 136 vmovdqu [RDX + #48 + R8],XMM0 ! store vector (32 bytes) 13d vmovdqu XMM0,[RDI + #80 + R8] ! load vector (32 bytes) 144 vpaddb XMM0,XMM0,[RSI + #80 + R8] ! add packed32B 14b vmovdqu [RDX + #80 + R8],XMM0 ! store vector (32 bytes) 152 vmovdqu XMM0,[RDI + #112 + R8] ! load vector (32 bytes) 159 vpaddb XMM0,XMM0,[RSI + #112 + R8] ! add packed32B 160 vmovdqu [RDX + #112 + R8],XMM0 ! store vector (32 bytes) 167 vmovdqu XMM0,[RDI + #144 + R8] ! load vector (32 bytes) 171 vpaddb XMM0,XMM0,[RSI + #144 + R8] ! add packed32B 17b vmovdqu [RDX + #144 + R8],XMM0 ! store vector (32 bytes) 185 vmovdqu XMM0,[RDI + #176 + R8] ! load vector (32 bytes) 18f vpaddb XMM0,XMM0,[RSI + #176 + R8] ! add packed32B 199 vmovdqu [RDX + #176 + R8],XMM0 ! store vector (32 bytes) 1a3 vmovdqu XMM0,[RDI + #208 + R8] ! load vector (32 bytes) 1ad vpaddb XMM0,XMM0,[RSI + #208 + R8] ! add packed32B 1b7 vmovdqu [RDX + #208 + R8],XMM0 ! store vector (32 bytes) 1c1 vmovdqu XMM0,[RDI + #240 + R8] ! load vector (32 bytes) 1cb vpaddb XMM0,XMM0,[RSI + #240 + R8] ! add packed32B 1d5 vmovdqu [RDX + #240 + R8],XMM0 ! store vector (32 bytes) 1df addl R11, #256 # int 1e6 cmpl R11, #769 1ed jl B18 # loop end P=0.999024 C=13010031.000000 1f3 B19: # out( B22 B20 ) <- in( B18 ) Freq: 12704.9 1f3 cmpl R11, #993 1fa jge,s B22 P=0.500000 C=-1.000000 1fc B20: # out( B21 ) <- in( B19 ) Freq: 6352.44 1fc # castII of R11 1fc B21: # out( B21 B22 ) <- in( B20 B21 ) Loop( B21-B21 inner post of N1411) Freq: 12704.9 1fc movslq R8, R11 # i2l 1ff vmovdqu XMM0,[RDI + #16 + R8] ! load vector (32 bytes) 206 vpaddb XMM0,XMM0,[RSI + #16 + R8] ! add packed32B 20d vmovdqu [RDX + #16 + R8],XMM0 ! store vector (32 bytes) 214 addl R11, #32 # int 218 cmpl R11, #993 21f jl,s B21 # loop end P=0.500000 C=13010031.000000 221 B22: # out( B12 B23 ) <- in( B21 B19 ) Freq: 12704.9 221 cmpl R11, #1024 228 jl B12 P=0.500000 C=-1.000000 22e B23: # out( B14 ) <- in( B22 ) Freq: 6352.44 22e jmp B14 233 B24: # out( N1 ) <- in( B14 B1 ) Freq: 0.999991 233 vzeroupper addq rsp, 32 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 245 ret 246 B25: # out( N1 ) <- in( B10 B2 B3 B4 B5 B6 B7 B8 B9 ) Freq: 9.03909e-06 246 movl RSI, #-66 # int 24b xorl R10, R10 # long 24e cmpq RCX, R10 # CmpL3 movl RBP, -1 jl,s done setne RBP movzbl RBP, RBP done: 260 movq [rsp + #0], RCX # spill 264 call,static wrapper for: uncommon_trap(reason='profile_predicate' action='maybe_recompile' debug_id='0') # SmallByteAdd::doit2 @ bci:3 L[0]=rsp + #0 L[1]=_ L[2]=_ STK[0]=RBP # OopMap {off=620/0x26c} 26c ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 266 37 3 SmallByteAdd::doit2 (46 bytes) made not entrant 642 41 3 java.lang.String::isLatin1 (19 bytes) 643 42 n 0 java.lang.Object::hashCode (native) 643 43 3 java.lang.String::equals (50 bytes) 644 44 3 java.lang.String::length (11 bytes) 645 45 n 0 java.lang.invoke.MethodHandle::linkToStatic(LLLLLLL)L (native) (static) 646 46 3 java.util.HashMap::getNode (148 bytes) 647 49 n 0 java.lang.invoke.MethodHandle::linkToStatic(IIL)I (native) (static) 647 50 n 0 java.lang.invoke.MethodHandle::invokeBasic(LLLLLL)L (native) 647 51 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LLLLLLLL)L (native) (static) 648 47 3 java.lang.String::charAt (25 bytes) 649 48 3 java.lang.StringLatin1::charAt (28 bytes) 649 52 1 java.lang.Enum::ordinal (5 bytes) 650 53 n 0 java.lang.invoke.MethodHandle::linkToStatic(IL)L (native) (static) 650 54 n 0 java.lang.invoke.MethodHandle::invokeBasic(I)L (native) 651 55 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LIL)L (native) (static) 651 56 n 0 java.lang.invoke.MethodHandle::linkToStatic(IL)I (native) (static) 651 57 n 0 java.lang.System::arraycopy (native) (static) 652 58 3 java.util.Objects::requireNonNull (14 bytes) 652 60 n 0 java.lang.Class::isPrimitive (native) 653 59 1 java.lang.Class::getClassLoader0 (5 bytes) 653 61 1 java.lang.invoke.MethodType::returnType (5 bytes) 653 62 n 0 java.lang.invoke.MethodHandle::linkToStatic(LLL)L (native) (static) 654 63 3 java.lang.invoke.MethodTypeForm::canonicalize (233 bytes) 654 64 n 0 java.lang.invoke.MethodHandle::linkToStatic(LLLL)L (native) (static) 656 65 3 java.lang.invoke.MemberName::testFlags (16 bytes) 656 66 n 0 java.lang.invoke.MethodHandle::invokeBasic()L (native) 656 67 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LL)L (native) (static) 657 68 3 java.util.concurrent.ConcurrentHashMap::get (162 bytes) 657 70 n 0 java.lang.invoke.MethodHandle::linkToStatic(IIIL)I (native) (static) 657 71 n 0 java.lang.invoke.MethodHandle::linkToStatic(IIL)L (native) (static) 657 74 n 0 java.lang.invoke.MethodHandle::invokeBasic(II)L (native) 658 76 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LIIL)L (native) (static) 658 77 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LLIL)I (native) (static) 658 69 3 java.lang.invoke.MethodType::checkPtype (19 bytes) 659 80 n 0 java.lang.invoke.MethodHandle::invokeBasic(LL)L (native) 659 81 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LLLL)L (native) (static) 659 73 3 java.util.Objects::equals (23 bytes) 660 72 3 java.lang.Math::min (11 bytes) 660 79 1 java.lang.invoke.MemberName::getDeclaringClass (5 bytes) 660 78 1 java.lang.invoke.MethodType::form (5 bytes) 660 75 1 java.lang.invoke.MethodType::ptypes (5 bytes) 662 82 3 java.lang.StringLatin1::equals (36 bytes) 662 83 3 sun.util.locale.LocaleUtils::isUpper (18 bytes) 662 84 3 java.util.AbstractMap:: (5 bytes) 663 85 3 java.util.AbstractCollection:: (5 bytes) 666 86 3 java.lang.StringLatin1::canEncode (13 bytes) 668 87 3 java.lang.StringLatin1::hashCode (42 bytes) 669 88 3 java.lang.StringLatin1::indexOf (61 bytes) 669 89 n 0 java.lang.invoke.MethodHandle::linkToStatic(LL)L (native) (static) 669 90 n 0 java.lang.invoke.MethodHandle::invokeBasic(L)L (native) 670 92 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LLL)L (native) (static) 670 91 3 java.lang.invoke.MethodType::checkSlotCount (33 bytes) 670 97 4 java.lang.String::isLatin1 (19 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00000008003456f0 - method holder: 'java/lang/String' - constants: 0x00000008009f56e0 constant pool [1050]/operands[28] {0x00000008009f56e0} for 'java/lang/String' cache=0x00000008003d55c8 - access: 0x81000000 - name: 'isLatin1' - signature: '()Z' - max stack: 2 - max locals: 1 - size of params: 1 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x0000000800000000 - adapters: AHE@0x00007f2f64247ab0: 0xb0000000 i2c: 0x00007f2f4c8769e0 c2i: 0x00007f2f4c876b04 c2iUV: 0x00007f2f4c876ac7 c2iNCI: 0x00007f2f4c876b41 - compiled entry 0x00007f2f4cd10800 - code size: 19 - code start: 0x00000008009f9540 - code end (excl): 0x00000008009f9553 - method data: 0x00007f2f3580eff8 - checked ex length: 0 - linenumber start: 0x00000008009f9553 - localvar length: 1 - localvar start: 0x00000008009f955a - compiled code: nmethod 671 41 3 java.lang.String::isLatin1 (19 bytes) --------------------------------- OptoAssembly --------------------------------- # # bool ( java/lang/String:NotNull:exact * ) # #r018 rsi:rsi : parm 0: java/lang/String:NotNull:exact * # -- Old rsp -- Framesize: 32 -- #r583 rsp+28: in_preserve #r582 rsp+24: return address #r581 rsp+20: in_preserve #r580 rsp+16: saved fp register #r579 rsp+12: pad2, stack alignment #r578 rsp+ 8: pad2, stack alignment #r577 rsp+ 4: Fixed slot 1 #r576 rsp+ 0: Fixed slot 0 # 000 N30: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()] # compressed klass decode_klass_not_null rscratch1, rscratch1 cmpq rax, rscratch1 # Inline cache check jne SharedRuntime::_ic_miss_stub nop # nops to align entry point nop # 12 bytes pad for loops and calls 030 B1: # out( B3 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 030 # stack bang (112 bytes) pushq rbp # Save rbp subq rsp, #16 # Create frame 03c movsbl R11, [RSI + #20 (8-bit)] # byte ! Field: java/lang/String.coder (constant) 041 testl R11, R11 044 jne,s B3 P=0.000000 C=6671.000000 046 B2: # out( N30 ) <- in( B1 ) Freq: 1 046 movl RAX, #1 # int 04b addq rsp, 16 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 05a ret 05b B3: # out( N30 ) <- in( B1 ) Freq: 5e-07 05b movl RSI, #-187 # int 060 movl RBP, R11 # spill 063 call,static wrapper for: uncommon_trap(reason='unstable_if' action='reinterpret' debug_id='0') # java.lang.String::isLatin1 @ bci:10 L[0]=_ STK[0]=RBP # OopMap {off=104/0x68} 068 ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 671 95 3 java.util.HashMap::resize (356 bytes) 671 41 3 java.lang.String::isLatin1 (19 bytes) made not entrant 671 98 4 java.lang.String::charAt (25 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x0000000800345758 - method holder: 'java/lang/String' - constants: 0x00000008009f56e0 constant pool [1050]/operands[28] {0x00000008009f56e0} for 'java/lang/String' cache=0x00000008003d55c8 - access: 0x81000001 public - name: 'charAt' - signature: '(I)C' - max stack: 3 - max locals: 2 - size of params: 2 - method size: 13 - highest level: 3 - vtable index: -2 - i2i entry: 0x0000000800000000 - adapters: AHE@0x00007f2f64247d80: 0xba000000 i2c: 0x00007f2f4c874a60 c2i: 0x00007f2f4c874b87 c2iUV: 0x00007f2f4c874b4a c2iNCI: 0x00007f2f4c874bc4 - compiled entry 0x00007f2f4cd13920 - code size: 25 - code start: 0x00000008009f95a0 - code end (excl): 0x00000008009f95b9 - method data: 0x00007f2f3582b6a8 - checked ex length: 0 - linenumber start: 0x00000008009f95b9 - localvar length: 2 - localvar start: 0x00000008009f95c6 - compiled code: nmethod 673 47 3 java.lang.String::charAt (25 bytes) --------------------------------- OptoAssembly --------------------------------- # # char ( java/lang/String:NotNull:exact *, int ) # #r018 rsi:rsi : parm 0: java/lang/String:NotNull:exact * #r016 rdx : parm 1: int # -- Old rsp -- Framesize: 48 -- #r583 rsp+44: in_preserve #r582 rsp+40: return address #r581 rsp+36: in_preserve #r580 rsp+32: saved fp register #r579 rsp+28: pad2, stack alignment #r578 rsp+24: pad2, stack alignment #r577 rsp+20: Fixed slot 1 #r576 rsp+16: Fixed slot 0 #r587 rsp+12: spill #r586 rsp+ 8: spill #r585 rsp+ 4: spill #r584 rsp+ 0: spill # 000 N67: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()] # compressed klass decode_klass_not_null rscratch1, rscratch1 cmpq rax, rscratch1 # Inline cache check jne SharedRuntime::_ic_miss_stub nop # nops to align entry point nop # 12 bytes pad for loops and calls 030 B1: # out( B5 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 030 # stack bang (240 bytes) pushq rbp # Save rbp subq rsp, #32 # Create frame 03c movsbl R10, [RSI + #20 (8-bit)] # byte ! Field: java/lang/String.coder (constant) 041 testl R10, R10 044 jne,s B5 P=0.000000 C=11858.000000 046 B2: # out( B7 B3 ) <- in( B1 ) Freq: 1 046 movl RBP, [RSI + #12 (8-bit)] # compressed ptr ! Field: java/lang/String.value (constant) 049 movl R10, [R12 + RBP << 3 + #12] (compressed oop addressing) # range 04e NullCheck RBP 04e B3: # out( B6 B4 ) <- in( B2 ) Freq: 0.999999 04e cmpl RDX, R10 # unsigned 051 jnb,us B6 P=0.000000 C=8870.000000 053 B4: # out( N67 ) <- in( B3 ) Freq: 0.999998 053 decode_heap_oop_not_null R10,RBP 057 movzbl RAX, [R10 + #16 + RDX] # ubyte 05d addq rsp, 32 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 06c ret 06d B5: # out( N67 ) <- in( B1 ) Freq: 5e-07 06d movq RBP, RSI # spill 070 movl [rsp + #0], RDX # spill 073 movl [rsp + #4], R10 # spill 078 movl RSI, #-187 # int nop # 2 bytes pad for loops and calls 07f call,static wrapper for: uncommon_trap(reason='unstable_if' action='reinterpret' debug_id='0') # java.lang.String::isLatin1 @ bci:10 L[0]=_ STK[0]=rsp + #4 # java.lang.String::charAt @ bci:1 L[0]=RBP L[1]=rsp + #0 # OopMap {rbp=Oop off=132/0x84} 084 ud2 # ShouldNotReachHere 086 B6: # out( N67 ) <- in( B3 ) Freq: 4.76836e-07 086 movl RSI, #-27 # int 08b movl [rsp + #4], RDX # spill 08f call,static wrapper for: uncommon_trap(reason='range_check' action='reinterpret' debug_id='0') # java.lang.StringLatin1::charAt @ bci:1 L[0]=RBP L[1]=rsp + #4 STK[0]=rsp + #4 # java.lang.String::charAt @ bci:12 L[0]=_ L[1]=_ # OopMap {rbp=NarrowOop off=148/0x94} 094 ud2 # ShouldNotReachHere 096 B7: # out( N67 ) <- in( B2 ) Freq: 1.01328e-06 096 movl RSI, #-10 # int 09b movl [rsp + #4], RDX # spill 09f call,static wrapper for: uncommon_trap(reason='null_check' action='maybe_recompile' debug_id='0') # java.lang.StringLatin1::charAt @ bci:1 L[0]=RBP L[1]=rsp + #4 STK[0]=rsp + #4 # java.lang.String::charAt @ bci:12 L[0]=_ L[1]=_ # OopMap {rbp=NarrowOop off=164/0xa4} 0a4 ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 673 47 3 java.lang.String::charAt (25 bytes) made not entrant 674 104 3 java.util.StringTokenizer::scanToken (179 bytes) 679 106 3 java.util.StringTokenizer::skipDelimiters (116 bytes) 680 109 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LL)I (native) (static) 680 111 n 0 java.lang.invoke.MethodHandle::linkToSpecial(LL)V (native) (static) 681 112 4 java.lang.String::hashCode (60 bytes) 681 93 3 java.util.HashSet::add (20 bytes) 681 97 4 java.lang.String::isLatin1 (19 bytes) made not entrant 682 103 3 java.util.StringTokenizer::hasMoreTokens (29 bytes) 682 113 2 java.lang.StringUTF16::getChar (60 bytes) 683 107 3 java.util.StringTokenizer::nextToken (92 bytes) 683 99 3 java.lang.String:: (15 bytes) 683 94 3 java.lang.String::indexOf (29 bytes) 684 96 3 java.lang.String::indexOf (7 bytes) 685 101 3 java.util.Arrays::copyOfRange (64 bytes) ============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00000008003444a8 - method holder: 'java/lang/String' - constants: 0x00000008009f56e0 constant pool [1050]/operands[28] {0x00000008009f56e0} for 'java/lang/String' cache=0x00000008003d55c8 - access: 0x81000001 public - name: 'hashCode' - signature: '()I' - max stack: 3 - max locals: 2 - size of params: 1 - method size: 13 - highest level: 3 - vtable index: 3 - i2i entry: 0x0000000800000000 - adapters: AHE@0x00007f2f64247ab0: 0xb0000000 i2c: 0x00007f2f4c8769e0 c2i: 0x00007f2f4c876b04 c2iUV: 0x00007f2f4c876ac7 c2iNCI: 0x00007f2f4c876b41 - compiled entry 0x00007f2f4ccfd660 - code size: 60 - code start: 0x00000008009f7898 - code end (excl): 0x00000008009f78d4 - method data: 0x00007f2f3580ed08 - checked ex length: 0 - linenumber start: 0x00000008009f78d4 - localvar length: 2 - localvar start: 0x00000008009f78e6 - compiled code: nmethod 686 2 3 java.lang.String::hashCode (60 bytes) --------------------------------- OptoAssembly --------------------------------- # # int ( java/lang/String:NotNull:exact * ) # #r018 rsi:rsi : parm 0: java/lang/String:NotNull:exact * # -- Old rsp -- Framesize: 48 -- #r583 rsp+44: in_preserve #r582 rsp+40: return address #r581 rsp+36: in_preserve #r580 rsp+32: saved fp register #r579 rsp+28: pad2, stack alignment #r578 rsp+24: pad2, stack alignment #r577 rsp+20: Fixed slot 1 #r576 rsp+16: Fixed slot 0 #r587 rsp+12: spill #r586 rsp+ 8: spill #r585 rsp+ 4: spill #r584 rsp+ 0: spill # 000 N280: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 000 movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()] # compressed klass decode_klass_not_null rscratch1, rscratch1 cmpq rax, rscratch1 # Inline cache check jne SharedRuntime::_ic_miss_stub nop # nops to align entry point nop # 12 bytes pad for loops and calls 030 B1: # out( B20 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 030 # stack bang (272 bytes) pushq rbp # Save rbp subq rsp, #32 # Create frame 03c movq [rsp + #0], RSI # spill 040 movl RAX, [RSI + #16 (8-bit)] # int ! Field: java/lang/String.hash 043 testl RAX, RAX 045 jne B20 P=0.797933 C=5419.000000 04b B2: # out( B20 B3 ) <- in( B1 ) Freq: 0.202067 04b movzbl R10, [RSI + #21 (8-bit)] # ubyte ! Field: java/lang/String.hashIsZero 050 xorl RAX, RAX # int 052 testl R10, R10 055 jne B20 P=0.084932 C=1095.000000 05b B3: # out( B26 B4 ) <- in( B2 ) Freq: 0.184905 05b call,static java.lang.String::isLatin1 # java.lang.String::hashCode @ bci:17 L[0]=rsp + #0 L[1]=_ # OopMap {[0]=Oop off=96/0x60} 060 B4: # out( B25 B5 ) <- in( B3 ) Freq: 0.184901 # Block is sole successor of call 060 testl RAX, RAX 062 je B25 P=0.000000 C=1002.000000 068 B5: # out( B27 B6 ) <- in( B4 ) Freq: 0.184901 068 movq R10, [rsp + #0] # spill 06c movl R9, [R10 + #12 (8-bit)] # compressed ptr ! Field: java/lang/String.value (constant) 070 movl RBP, [R12 + R9 << 3 + #12] (compressed oop addressing) # range 075 NullCheck R9 075 B6: # out( B22 B7 ) <- in( B5 ) Freq: 0.184901 075 testl RBP, RBP # unsigned 077 jbe,u B22 P=0.000001 C=9194.000000 07d B7: # out( B21 B8 ) <- in( B6 ) Freq: 0.184901 07d movl R11, RBP # spill 080 decl R11 # int 083 cmpl R11, RBP # unsigned 086 jnb,u B21 P=0.000001 C=-1.000000 08c B8: # out( B13 B9 ) <- in( B7 ) Freq: 0.184901 08c movzbl R10, [R12 + R9 << 3 + #16] (compressed oop addressing) # ubyte 092 decode_heap_oop_not_null R8,R9 096 movl RCX, RBP # spill 098 addl RCX, #-3 # int 09b movl RDI, #1 # int 0a0 cmpl RCX, #1 0a3 jle B13 P=0.000001 C=-1.000000 0a9 B9: # out( B10 ) <- in( B8 ) Freq: 0.1849 0a9 movl R9, R10 # spill 0ac sall R9, #5 0b0 subl R9, R10 # int 0b3 movl RBX, #4000 # int 0b8 # TLS is in R15 0b8 B10: # out( B11 ) <- in( B9 B12 ) Loop( B10-B12 ) Freq: 1.78945 0b8 movl R11, RBP # spill 0bb subl R11, RDI # int 0be addl R11, #-3 # int 0c2 cmpl RBX, R11 0c5 movl RSI, #4000 # int 0ca cmovlgt RSI, R11 # min 0ce addl RSI, RDI # int 0d0 B11: # out( B11 B12 ) <- in( B10 B11 ) Loop( B11-B11 inner main of N104 strip mined) Freq: 17.3181 0d0 movslq R10, RDI # i2l 0d3 movzbl R11, [R8 + #16 + R10] # ubyte 0d9 movzbl RDX, [R8 + #19 + R10] # ubyte 0df movzbl R13, 24080600.590[R8 + #17 + R10] # ubyte 0e5 movzbl RAX, [R8 + #18 + R10] # ubyte 0eb addl R9, R11 # int 0ee movl R11, R9 # spill 0f1 sall R11, #5 iter/sec 0f5 subl R11, R9 # int 0f8 addl R11, R13 # int 0fb movl R9, R11 # spill 0fe sall R9, #5 102 subl R9, R11 # int 105 addl R9, RAX # int 108 movl R10, R9 # spill 10b sall R10, #5 10f subl R10, R9 # int 112 addl R10, RDX # int 115 movl R9, R10 # spill 118 sall R9, #5 11c subl R9, R10 # int 11f addl RDI, #4 # int 122 cmpl RDI, RSI 124 jl,s B11 # loop end P=0.896672 C=8244.000000 126 B12: # out( B10 B13 ) <- in( B11 ) Freq: 1.78945 126 movq R11, [R15 + #288 (32-bit)] # ptr 12d testl rax, [R11] # Safepoint: poll for GC # java.lang.StringLatin1::hashCode @ bci:37 L[0]=_ L[1]=R10 L[2]=R8 L[3]=RBP L[4]=RDI L[5]=_ # java.lang.String::hashCode @ bci:27 L[0]=rsp + #0 L[1]=_ # OopMap {r8=Oop [0]=Oop off=301/0x12d} 130 cmpl RDI, RCX 132 jl,s B10 P=0.896672 C=8244.000000 134 B13: # out( B19 B14 ) <- in( B8 B12 ) Freq: 0.184901 134 cmpl RDI, RBP 136 jge,s B19 P=0.500000 C=-1.000000 138 B14: # out( B15 ) <- in( B13 ) Freq: 0.0924503 138 # castII of RDI 138 B15: # out( B17 B16 ) <- in( B14 B16 ) Loop( B15-B16 inner post of N254) Freq: 0.184901 138 movzbl R11, [R8 + #16 + RDI] # ubyte 13e movl RAX, R10 # spill 141 sall RAX, #5 144 subl RAX, R10 # int 147 addl RAX, R11 # int 14a incl RDI # int 14c cmpl RDI, RBP 14e jge,s B17 # loop end P=0.500000 C=8244.000000 150 B16: # out( B15 ) <- in( B15 ) Freq: 0.0924503 150 movl R10, RAX # spill 153 jmp,s B15 155 B17: # out( B23 B18 ) <- in( B15 B19 ) Freq: 0.184901 155 testl RAX, RAX 157 je,s B23 P=0.000000 C=1002.000000 159 B18: # out( B20 ) <- in( B17 ) Freq: 0.184901 159 movq R10, [rsp + #0] # spill 15d movl [R10 + #16 (8-bit)] 688 105 3 java.lang.String::checkBoundsBeginEnd (63 bytes)