============================= C2-compiled nmethod ============================== ----------------------------------- MetaData ----------------------------------- {method} - this oop: 0x00007f9708efcf00 - method holder: 'java/lang/String' - constants: 0x00007f9708ef8440 constant pool [996]/operands[21] {0x00007f9708ef8440} for 'java/lang/String' cache=0x00007f970900e3e0 - access: 0x81000001 public - name: 'charAt' - signature: '(I)C' - max stack: 3 - max locals: 2 - size of params: 2 - method size: 12 - highest level: 3 - vtable index: -2 - i2i entry: 0x00007f971c7b7f20 - adapters: AHE@0x00007f972c5e04e0: 0xba000000 i2c: 0x00007f971c8ae1e0 c2i: 0x00007f971c8ae31d c2iUV: 0x00007f971c8ae2f0 - compiled entry 0x00007f971c9684e0 - code size: 25 - code start: 0x00007f9708efcec0 - code end (excl): 0x00007f9708efced9 - method data: 0x00007f9709157430 - checked ex length: 0 - linenumber start: 0x00007f9708efced9 - localvar length: 2 - localvar start: 0x00007f9708efcee6 - compiled code: nmethod 13752 2 3 java.lang.String::charAt (25 bytes) --------------------------------- OptoAssembly --------------------------------- # # #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 N65: # 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 020 B1: # out( B5 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 020 # stack bang (240 bytes) pushq rbp # Save rbp subq rsp, #32 # Create frame 02c movsbl R11, [RSI + #20 (8-bit)] # byte ! Field: java/lang/String.coder (constant) 031 testl R11, R11 034 jne,s B5 P=0.000000 C=6031.000000 036 B2: # out( B7 B3 ) <- in( B1 ) Freq: 1 036 movl RBP, [RSI + #12 (8-bit)] # compressed ptr ! Field: java/lang/String.value (constant) 039 movl R11, [RBP + #12 (8-bit)] # range 03d NullCheck RBP 03d B3: # out( B6 B4 ) <- in( B2 ) Freq: 0.999999 03d cmpl RDX, R11 # unsigned 040 jnb,us B6 P=0.000000 C=5375.000000 042 B4: # out( N65 ) <- in( B3 ) Freq: 0.999998 042 movzbl RAX, [RBP + #16 + RDX] # ubyte 047 addq rsp, 32 # Destroy frame popq rbp movq rscratch1, poll_offset[r15_thread] #polling_page_address testl rax, [rscratch1] # Safepoint: poll for GC 056 ret 057 B5: # out( N65 ) <- in( B1 ) Freq: 5e-07 057 movq RBP, RSI # spill 05a movl [rsp + #0], RDX # spill 05d movl [rsp + #4], R11 # spill 062 movl RSI, #-179 # int 067 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=108/0x6c} 06c ud2 # ShouldNotReachHere 06e B6: # out( N65 ) <- in( B3 ) Freq: 4.76836e-07 06e movl RSI, #-27 # int 073 movl [rsp + #4], RDX # spill 077 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=124/0x7c} 07c ud2 # ShouldNotReachHere 07e B7: # out( N65 ) <- in( B2 ) Freq: 1.01328e-06 07e movl RSI, #-10 # int 083 movl [rsp + #4], RDX # spill 087 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=140/0x8c} 08c ud2 # ShouldNotReachHere -------------------------------------------------------------------------------- 13752 2 3 java.lang.String::charAt (25 bytes) made not entrant ----------------------------------- Assembly ----------------------------------- Compiled method (t4)(c2) 13752 24 4 java.lang.String::charAt (25 bytes) total in heap [0x00007f971c979d10,0x00007f971c97a0b8] = 936 relocation [0x00007f971c979e90,0x00007f971c979ea0] = 16 main code [0x00007f971c979ea0,0x00007f971c979f40] = 160 stub code [0x00007f971c979f40,0x00007f971c979f58] = 24 metadata [0x00007f971c979f58,0x00007f971c979f70] = 24 scopes data [0x00007f971c979f70,0x00007f971c979fd0] = 96 scopes pcs [0x00007f971c979fd0,0x00007f971c97a0a0] = 208 dependencies [0x00007f971c97a0a0,0x00007f971c97a0a8] = 8 nul chk table [0x00007f971c97a0a8,0x00007f971c97a0b8] = 16 -------------------------------------------------------------------------------- [Constant Pool (empty)] -------------------------------------------------------------------------------- [Entry Point] # {method} {0x00007f9708efcf00} 'charAt' '(I)C' in 'java/lang/String' # this: rsi:rsi = 'java/lang/String' # parm0: rdx = int # [sp+0x30] (sp of caller) ;; N65: # out( B1 ) <- BLOCK HEAD IS JUNK Freq: 1 0x00007f971c979ea0 (+0x00): mov 0x8(%rsi),%r10d 0x00007f971c979ea4 (+0x04): shl $0x3,%r10 0x00007f971c979ea8 (+0x08): cmp %r10,%rax 0x00007f971c979eab (+0x0b): jne 0x00007f971c7f04a0 ; {runtime_call ic_miss_stub} 0x00007f971c979eb1 (+0x11): nop 0x00007f971c979eb2 (+0x12): nop 0x00007f971c979eb3 (+0x13): nop 0x00007f971c979eb4 (+0x14): nop 0x00007f971c979eb5 (+0x15): nop 0x00007f971c979eb6 (+0x16): nop 0x00007f971c979eb7 (+0x17): nop 0x00007f971c979eb8 (+0x18): nop 0x00007f971c979eb9 (+0x19): nop 0x00007f971c979eba (+0x1a): nop 0x00007f971c979ebb (+0x1b): nop 0x00007f971c979ebc (+0x1c): nop 0x00007f971c979ebd (+0x1d): nop 0x00007f971c979ebe (+0x1e): nop 0x00007f971c979ebf (+0x1f): nop [Verified Entry Point] ;; B1: # out( B5 B2 ) <- BLOCK HEAD IS JUNK Freq: 1 0x00007f971c979ec0 (+0x20): mov %eax,-0x16000(%rsp) 0x00007f971c979ec7 (+0x27): push %rbp 0x00007f971c979ec8 (+0x28): sub $0x20,%rsp ;*synchronization entry ; - java.lang.String::charAt@-1 (line 701) 0x00007f971c979ecc (+0x2c): movsbl 0x14(%rsi),%r11d ;*getfield coder {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.String::isLatin1@7 (line 3363) ; - java.lang.String::charAt@1 (line 701) 0x00007f971c979ed1 (+0x31): test %r11d,%r11d 0x00007f971c979ed4 (+0x34): jne 0x00007f971c979ef7 ;*ifne {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.String::isLatin1@10 (line 3363) ; - java.lang.String::charAt@1 (line 701) ;; B2: # out( B7 B3 ) <- in( B1 ) Freq: 1 0x00007f971c979ed6 (+0x36): mov 0xc(%rsi),%ebp ;*getfield value {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.String::charAt@8 (line 702) 0x00007f971c979ed9 (+0x39): mov 0xc(%rbp),%r11d ; implicit exception: dispatches to 0x00007f971c979f1e ;; B3: # out( B6 B4 ) <- in( B2 ) Freq: 0.999999 0x00007f971c979edd (+0x3d): cmp %r11d,%edx 0x00007f971c979ee0 (+0x40): jae 0x00007f971c979f0e ;; B4: # out( N65 ) <- in( B3 ) Freq: 0.999998 0x00007f971c979ee2 (+0x42): movzbl 0x10(%rbp,%rdx,1),%eax ;*iand {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.StringLatin1::charAt@25 (line 49) ; - java.lang.String::charAt@12 (line 702) 0x00007f971c979ee7 (+0x47): add $0x20,%rsp 0x00007f971c979eeb (+0x4b): pop %rbp 0x00007f971c979eec (+0x4c): mov 0x128(%r15),%r10 0x00007f971c979ef3 (+0x53): test %eax,(%r10) ; {poll_return} 0x00007f971c979ef6 (+0x56): retq ;; B5: # out( N65 ) <- in( B1 ) Freq: 5e-07 0x00007f971c979ef7 (+0x57): mov %rsi,%rbp 0x00007f971c979efa (+0x5a): mov %edx,(%rsp) 0x00007f971c979efd (+0x5d): mov %r11d,0x4(%rsp) 0x00007f971c979f02 (+0x62): mov $0xffffff4d,%esi 0x00007f971c979f07 (+0x67): callq 0x00007f971c7f1ea0 ; ImmutableOopMap {rbp=Oop } ;*ifne {reexecute=1 rethrow=0 return_oop=0} ; - (reexecute) java.lang.String::isLatin1@10 (line 3363) ; - java.lang.String::charAt@1 (line 701) ; {runtime_call UncommonTrapBlob} 0x00007f971c979f0c (+0x6c): ud2 ;*ifne {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.String::isLatin1@10 (line 3363) ; - java.lang.String::charAt@1 (line 701) ;; B6: # out( N65 ) <- in( B3 ) Freq: 4.76836e-07 0x00007f971c979f0e (+0x6e): mov $0xffffffe5,%esi 0x00007f971c979f13 (+0x73): mov %edx,0x4(%rsp) 0x00007f971c979f17 (+0x77): callq 0x00007f971c7f1ea0 ; ImmutableOopMap {rbp=NarrowOop } ;*iflt {reexecute=1 rethrow=0 return_oop=0} ; - (reexecute) java.lang.StringLatin1::charAt@1 (line 46) ; - java.lang.String::charAt@12 (line 702) ; {runtime_call UncommonTrapBlob} 0x00007f971c979f1c (+0x7c): ud2 ;*iflt {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.StringLatin1::charAt@1 (line 46) ; - java.lang.String::charAt@12 (line 702) ;; B7: # out( N65 ) <- in( B2 ) Freq: 1.01328e-06 0x00007f971c979f1e (+0x7e): mov $0xfffffff6,%esi 0x00007f971c979f23 (+0x83): mov %edx,0x4(%rsp) 0x00007f971c979f27 (+0x87): callq 0x00007f971c7f1ea0 ; ImmutableOopMap {rbp=NarrowOop } ;*iflt {reexecute=1 rethrow=0 return_oop=0} ; - (reexecute) java.lang.StringLatin1::charAt@1 (line 46) ; - java.lang.String::charAt@12 (line 702) ; {runtime_call UncommonTrapBlob} 0x00007f971c979f2c (+0x8c): ud2 ;*iflt {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.StringLatin1::charAt@1 (line 46) ; - java.lang.String::charAt@12 (line 702) 0x00007f971c979f2e (+0x8e): hlt 0x00007f971c979f2f (+0x8f): hlt 0x00007f971c979f30 (+0x90): hlt 0x00007f971c979f31 (+0x91): hlt 0x00007f971c979f32 (+0x92): hlt 0x00007f971c979f33 (+0x93): hlt 0x00007f971c979f34 (+0x94): hlt 0x00007f971c979f35 (+0x95): hlt 0x00007f971c979f36 (+0x96): hlt 0x00007f971c979f37 (+0x97): hlt 0x00007f971c979f38 (+0x98): hlt 0x00007f971c979f39 (+0x99): hlt 0x00007f971c979f3a (+0x9a): hlt 0x00007f971c979f3b (+0x9b): hlt 0x00007f971c979f3c (+0x9c): hlt 0x00007f971c979f3d (+0x9d): hlt 0x00007f971c979f3e (+0x9e): hlt 0x00007f971c979f3f (+0x9f): hlt [Exception Handler] 0x00007f971c979f40 (+0xa0): jmpq 0x00007f971c9576a0 ; {no_reloc} [Deopt Handler Code] 0x00007f971c979f45 (+0xa5): callq 0x00007f971c979f4a 0x00007f971c979f4a (+0xaa): subq $0x5,(%rsp) 0x00007f971c979f4f (+0xaf): jmpq 0x00007f971c7f18e0 ; {runtime_call DeoptimizationBlob} 0x00007f971c979f54 (+0xb4): hlt 0x00007f971c979f55 (+0xb5): hlt 0x00007f971c979f56 (+0xb6): hlt 0x00007f971c979f57 (+0xb7): hlt -------------------------------------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Oops: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Metadata: 0x00007f971c979f58 (+0x00): 0x00007f9708efcf00 {method} {0x00007f9708efcf00} 'charAt' '(I)C' in 'java/lang/String' 0x00007f971c979f60 (+0x08): 0x00007f9708f02468 {method} {0x00007f9708f02468} 'isLatin1' '()Z' in 'java/lang/String' 0x00007f971c979f68 (+0x10): 0x00007f970907ad90 {method} {0x00007f970907ad90} 'charAt' '([BI)C' in 'java/lang/StringLatin1' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pc-bytecode offsets: PcDesc(pc=0x00007f971c979e9f offset=ffffffff bits=0): PcDesc(pc=0x00007f971c979ecc offset=2c bits=0): java.lang.String::charAt@-1 (line 701) PcDesc(pc=0x00007f971c979ed1 offset=31 bits=0): java.lang.String::isLatin1@7 (line 3363) java.lang.String::charAt@1 (line 701) PcDesc(pc=0x00007f971c979ed6 offset=36 bits=0): java.lang.String::isLatin1@10 (line 3363) java.lang.String::charAt@1 (line 701) PcDesc(pc=0x00007f971c979ed9 offset=39 bits=0): java.lang.String::charAt@8 (line 702) PcDesc(pc=0x00007f971c979ee7 offset=47 bits=0): java.lang.StringLatin1::charAt@25 (line 49) java.lang.String::charAt@12 (line 702) PcDesc(pc=0x00007f971c979f0c offset=6c bits=1): java.lang.String::isLatin1@10 (line 3363) reexecute=true Locals - l0: empty Expression stack - @0: stack[4] java.lang.String::charAt@1 (line 701) Locals - l0: reg rbp [10],oop - l1: stack[0] PcDesc(pc=0x00007f971c979f0e offset=6e bits=0): java.lang.String::isLatin1@10 (line 3363) java.lang.String::charAt@1 (line 701) PcDesc(pc=0x00007f971c979f1c offset=7c bits=1): java.lang.StringLatin1::charAt@1 (line 46) reexecute=true Locals - l0: reg rbp [10],narrowoop - l1: stack[4] Expression stack - @0: stack[4] java.lang.String::charAt@12 (line 702) Locals - l0: empty - l1: empty PcDesc(pc=0x00007f971c979f1e offset=7e bits=0): java.lang.StringLatin1::charAt@1 (line 46) java.lang.String::charAt@12 (line 702) PcDesc(pc=0x00007f971c979f2c offset=8c bits=1): java.lang.StringLatin1::charAt@1 (line 46) reexecute=true Locals - l0: reg rbp [10],narrowoop - l1: stack[4] Expression stack - @0: stack[4] java.lang.String::charAt@12 (line 702) Locals - l0: empty - l1: empty PcDesc(pc=0x00007f971c979f2e offset=8e bits=0): java.lang.StringLatin1::charAt@1 (line 46) java.lang.String::charAt@12 (line 702) PcDesc(pc=0x00007f971c979f59 offset=b9 bits=0): - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - oop maps:ImmutableOopMapSet contains 3 OopMaps ImmutableOopMap {rbp=Oop } pc offsets: 108 ImmutableOopMap {rbp=NarrowOop } pc offsets: 124 140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - scopes: ScopeDesc(pc=0x00007f971c979ecc offset=2c): java.lang.String::charAt@-1 (line 701) ScopeDesc(pc=0x00007f971c979ed1 offset=31): java.lang.String::isLatin1@7 (line 3363) ScopeDesc(pc=0x00007f971c979ed1 offset=31): java.lang.String::charAt@1 (line 701) ScopeDesc(pc=0x00007f971c979ed6 offset=36): java.lang.String::isLatin1@10 (line 3363) ScopeDesc(pc=0x00007f971c979ed6 offset=36): java.lang.String::charAt@1 (line 701) ScopeDesc(pc=0x00007f971c979ed9 offset=39): java.lang.String::charAt@8 (line 702) ScopeDesc(pc=0x00007f971c979ee7 offset=47): java.lang.StringLatin1::charAt@25 (line 49) ScopeDesc(pc=0x00007f971c979ee7 offset=47): java.lang.String::charAt@12 (line 702) ScopeDesc(pc=0x00007f971c979f0c offset=6c): java.lang.String::isLatin1@10 (line 3363) reexecute=true Locals - l0: empty Expression stack - @0: stack[4] ScopeDesc(pc=0x00007f971c979f0c offset=6c): java.lang.String::charAt@1 (line 701) Locals - l0: reg rbp [10],oop - l1: stack[0] ScopeDesc(pc=0x00007f971c979f0e offset=6e): java.lang.String::isLatin1@10 (line 3363) ScopeDesc(pc=0x00007f971c979f0e offset=6e): java.lang.String::charAt@1 (line 701) ScopeDesc(pc=0x00007f971c979f1c offset=7c): java.lang.StringLatin1::charAt@1 (line 46) reexecute=true Locals - l0: reg rbp [10],narrowoop - l1: stack[4] Expression stack - @0: stack[4] ScopeDesc(pc=0x00007f971c979f1c offset=7c): java.lang.String::charAt@12 (line 702) Locals - l0: empty - l1: empty ScopeDesc(pc=0x00007f971c979f1e offset=7e): java.lang.StringLatin1::charAt@1 (line 46) ScopeDesc(pc=0x00007f971c979f1e offset=7e): java.lang.String::charAt@12 (line 702) ScopeDesc(pc=0x00007f971c979f2c offset=8c): java.lang.StringLatin1::charAt@1 (line 46) reexecute=true Locals - l0: reg rbp [10],narrowoop - l1: stack[4] Expression stack - @0: stack[4] ScopeDesc(pc=0x00007f971c979f2c offset=8c): java.lang.String::charAt@12 (line 702) Locals - l0: empty - l1: empty ScopeDesc(pc=0x00007f971c979f2e offset=8e): java.lang.StringLatin1::charAt@1 (line 46) ScopeDesc(pc=0x00007f971c979f2e offset=8e): java.lang.String::charAt@12 (line 702) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - relocations: @0x00007f971c979e90: 600b relocInfo@0x00007f971c979e90 [type=6(runtime_call) addr=0x00007f971c979eab offset=11] | [destination=0x00007f971c7f04a0] @0x00007f971c979e92: b048 relocInfo@0x00007f971c979e92 [type=11(poll_return) addr=0x00007f971c979ef3 offset=72] @0x00007f971c979e94: 6414 relocInfo@0x00007f971c979e94 [type=6(runtime_call) addr=0x00007f971c979f07 offset=20 format=1] | [destination=0x00007f971c7f1ea0] @0x00007f971c979e96: 6410 relocInfo@0x00007f971c979e96 [type=6(runtime_call) addr=0x00007f971c979f17 offset=16 format=1] | [destination=0x00007f971c7f1ea0] @0x00007f971c979e98: 6410 relocInfo@0x00007f971c979e98 [type=6(runtime_call) addr=0x00007f971c979f27 offset=16 format=1] | [destination=0x00007f971c7f1ea0] @0x00007f971c979e9a: 0019 relocInfo@0x00007f971c979e9a [type=0(none) addr=0x00007f971c979f40 offset=25] @0x00007f971c979e9c: 6400 relocInfo@0x00007f971c979e9c [type=6(runtime_call) addr=0x00007f971c979f40 offset=0 format=1] | [destination=0x00007f971c9576a0] @0x00007f971c979e9e: 640f relocInfo@0x00007f971c979e9e [type=6(runtime_call) addr=0x00007f971c979f4f offset=15 format=1] | [destination=0x00007f971c7f18e0] @0x00007f971c979ea0: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dependencies: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ExceptionHandlerTable (size = 0 bytes) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ImplicitExceptionTable (size = 1 entries, 12 bytes): { < 0x00007f971c979ed9, 0x00007f971c979f1e > } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Recorded oops: #0: 0x0000000000000000 LUCY NULL-oop - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Recorded metadata: #0: 0x0000000000000000 LUCY NULL-oop #1: 0x00007f9708efcf00 {method} {0x00007f9708efcf00} 'charAt' '(I)C' in 'java/lang/String' #2: 0x00007f9708f02468 {method} {0x00007f9708f02468} 'isLatin1' '()Z' in 'java/lang/String' #3: 0x00007f970907ad90 {method} {0x00007f970907ad90} 'charAt' '([BI)C' in 'java/lang/StringLatin1' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -