Skip to content

Instantly share code, notes, and snippets.

@arnaudroger
Created January 30, 2019 17:24
Show Gist options
  • Save arnaudroger/b88bb70ed1ed837f669fc33df2bfa5df to your computer and use it in GitHub Desktop.
Save arnaudroger/b88bb70ed1ed837f669fc33df2bfa5df to your computer and use it in GitHub Desktop.
# {method} {0x00000001282303f8} 'poll' '()Ljava/lang/Object;' in 'org/jctools/queues/BaseMpscLinkedArrayQueue'
# [sp+0x70] (sp of caller)
[Entry Point]
0x00000001186d03e0: mov 0x8(%rsi),%r10d
0x00000001186d03e4: movabs $0x800000000,%r12
0x00000001186d03ee: add %r12,%r10
0x00000001186d03f1: xor %r12,%r12
0x00000001186d03f4: cmp %r10,%rax
0x00000001186d03f7: jne 0x0000000110c24c80 ; {runtime_call ic_miss_stub}
0x00000001186d03fd: data16 xchg %ax,%ax
[Verified Entry Point]
0x00000001186d0400: mov %eax,-0x14000(%rsp)
0x00000001186d0407: push %rbp
0x00000001186d0408: sub $0x60,%rsp ;*synchronization entry
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@-1 (line 322)
0x00000001186d040c: mov %rsi,0x40(%rsp)
0x00000001186d0411: mov 0x110(%rsi),%r11 ;*getfield consumerIndex {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@6 (line 323)
0x00000001186d0418: mov 0x108(%rsi),%r8 ;*getfield consumerMask {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@11 (line 324)
0x00000001186d041f: mov 0x118(%rsi),%ecx ;*invokevirtual getObjectVolatile {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::getObjectVolatile@5 (line 903)
; - org.jctools.util.UnsafeRefArrayAccess::lvElement@5 (line 103)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@27 (line 327)
0x00000001186d0425: mov %r11,%rbp
0x00000001186d0428: and %r8,%rbp
0x00000001186d042b: lea (%r12,%rcx,8),%r9 ;*getfield consumerBuffer {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@1 (line 322)
0x00000001186d042f: shl %rbp ;*lshl {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.LinkedArrayQueueUtil::modifiedCalcElementOffset@11 (line 24)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@19 (line 326)
0x00000001186d0432: mov 0x10(%r9,%rbp,1),%ecx ;*invokevirtual getObjectVolatile {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::getObjectVolatile@5 (line 903)
; - org.jctools.util.UnsafeRefArrayAccess::lvElement@5 (line 103)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@27 (line 327)
0x00000001186d0437: test %ecx,%ecx
0x00000001186d0439: je L0004 ;*ifnonnull {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@34 (line 328)
0x00000001186d043b: lea (%r12,%rcx,8),%rbx ;*goto {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@59 (line 339)
L0000: movabs $0x70fe78070,%r10 ; {oop(a 'java/lang/Object'{0x000000070fe78070})}
0x00000001186d0449: cmp %r10,%rbx
0x00000001186d044c: je L0007
0x00000001186d0452: cmpb $0x0,0x30(%r15)
0x00000001186d0457: jne L0003
L0001: movl $0x0,0x10(%r9,%rbp,1)
0x00000001186d0462: add $0x2,%r11
0x00000001186d0466: mov 0x40(%rsp),%r10
0x00000001186d046b: mov %r11,0x110(%r10) ;*invokevirtual getObjectVolatile {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::getObjectVolatile@5 (line 903)
; - org.jctools.util.UnsafeRefArrayAccess::lvElement@5 (line 103)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@27 (line 327)
L0002: mov %rbx,%rax
0x00000001186d0475: add $0x60,%rsp
0x00000001186d0479: pop %rbp
0x00000001186d047a: mov 0x108(%r15),%r10
0x00000001186d0481: test %eax,(%r10) ; {poll_return} *** SAFEPOINT POLL ***
0x00000001186d0484: retq
L0003: mov 0x10(%r9,%rbp,1),%r10d
0x00000001186d048a: test %r10d,%r10d
0x00000001186d048d: je L0001
0x00000001186d048f: mov 0x38(%r15),%r8
0x00000001186d0493: mov %r10,%rdi
0x00000001186d0496: shl $0x3,%rdi
0x00000001186d049a: test %r8,%r8
0x00000001186d049d: je L0009
0x00000001186d04a3: mov 0x48(%r15),%r10
0x00000001186d04a7: mov %rdi,-0x8(%r10,%r8,1)
0x00000001186d04ac: add $0xfffffffffffffff8,%r8
0x00000001186d04b0: mov %r8,0x38(%r15) ;*invokevirtual putObjectRelease {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::putOrderedObject@7 (line 1022)
; - org.jctools.util.UnsafeRefArrayAccess::soElement@6 (line 77)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@93 (line 353)
0x00000001186d04b4: jmp L0001
L0004: mov 0x88(%rsi),%r10 ;*invokevirtual getLongVolatile {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::getLongVolatile@5 (line 978)
; - org.jctools.queues.BaseMpscLinkedArrayQueueProducerFields::lvProducerIndex@7 (line 61)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@39 (line 330)
0x00000001186d04bd: cmp %r10,%r11
0x00000001186d04c0: je L0008 ;*ifeq {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@43 (line 330)
0x00000001186d04c6: mov %rbp,%r10
0x00000001186d04c9: add $0x10,%r10 ;*ladd {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.LinkedArrayQueueUtil::modifiedCalcElementOffset@12 (line 24)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@19 (line 326)
0x00000001186d04cd: mov %r10,0x20(%rsp)
0x00000001186d04d2: mov %r9,%rsi
0x00000001186d04d5: mov %r10,%rdx
0x00000001186d04d8: mov %r9,0x38(%rsp)
0x00000001186d04dd: mov %r11,0x28(%rsp)
0x00000001186d04e2: mov %r8,0x30(%rsp)
0x00000001186d04e7: callq 0x0000000110c25400 ; ImmutableOopMap{[56]=Oop [64]=Oop }
;*invokestatic lvElement {reexecute=0 rethrow=0 return_oop=1}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@49 (line 337)
; {static_call}
0x00000001186d04ec: mov %rax,%rbx
0x00000001186d04ef: test %rax,%rax
0x00000001186d04f2: jne L0006 ;*ifnull {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@56 (line 339)
0x00000001186d04f4: nopl 0x0(%rax,%rax,1)
0x00000001186d04fc: data16 data16 xchg %ax,%ax ;*goto {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@59 (line 339)
L0005: mov 0x38(%rsp),%rsi
0x00000001186d0505: mov 0x20(%rsp),%rdx
0x00000001186d050a: nop
0x00000001186d050b: callq 0x0000000110c25400 ; ImmutableOopMap{[56]=Oop [64]=Oop }
;*invokestatic lvElement {reexecute=0 rethrow=0 return_oop=1}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@49 (line 337)
; {static_call}
0x00000001186d0510: mov %rax,%rbx
0x00000001186d0513: test %rax,%rax
0x00000001186d0516: je L0005 ;*goto {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@59 (line 339)
L0006: mov 0x28(%rsp),%r11
0x00000001186d051d: mov 0x30(%rsp),%r8
0x00000001186d0522: mov 0x38(%rsp),%r9
0x00000001186d0527: jmpq L0000
L0007: mov 0x40(%rsp),%rsi
0x00000001186d0531: mov %r9,%rdx
0x00000001186d0534: mov %r8,%rcx
0x00000001186d0537: mov %rsi,%rbp
0x00000001186d053a: mov %r11,0x8(%rsp)
0x00000001186d053f: callq 0x0000000110c24f00 ; ImmutableOopMap{rbp=Oop }
;*invokespecial getNextBuffer {reexecute=0 rethrow=0 return_oop=1}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@76 (line 349)
; {optimized virtual_call}
0x00000001186d0544: mov %rbp,%rsi
0x00000001186d0547: mov %rax,%rdx
0x00000001186d054a: mov 0x8(%rsp),%rcx
0x00000001186d054f: callq 0x0000000110c24f00 ; ImmutableOopMap{}
;*invokespecial newBufferPoll {reexecute=0 rethrow=0 return_oop=1}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@85 (line 350)
; {optimized virtual_call}
0x00000001186d0554: mov %rax,%rbx
0x00000001186d0557: jmpq L0002
L0008: xor %ebx,%ebx
0x00000001186d055e: jmpq L0002
L0009: mov %r9,%r14
0x00000001186d0566: mov %r11,%r13
0x00000001186d0569: mov %r15,%rsi
0x00000001186d056c: movabs $0x102ef1df6,%r10
0x00000001186d0576: callq *%r10 ;*invokevirtual putObjectRelease {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::putOrderedObject@7 (line 1022)
; - org.jctools.util.UnsafeRefArrayAccess::soElement@6 (line 77)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@93 (line 353)
0x00000001186d0579: mov %r13,%r11
0x00000001186d057c: mov %r14,%r9
0x00000001186d057f: jmpq L0001 ;*invokespecial newBufferPoll {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@85 (line 350)
0x00000001186d0584: mov %rax,%rsi
0x00000001186d0587: jmp L000a ;*invokespecial getNextBuffer {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@76 (line 349)
0x00000001186d0589: mov %rax,%rsi
0x00000001186d058c: jmp L000a
0x00000001186d058e: mov %rax,%rsi
0x00000001186d0591: jmp L000a
0x00000001186d0593: mov %rax,%rsi ;*invokestatic lvElement {reexecute=0 rethrow=0 return_oop=0}
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@49 (line 337)
L000a: add $0x60,%rsp
0x00000001186d059a: pop %rbp
0x00000001186d059b: jmpq 0x0000000110cf2d80 ;*invokevirtual putObjectRelease {reexecute=0 rethrow=0 return_oop=0}
; - sun.misc.Unsafe::putOrderedObject@7 (line 1022)
; - org.jctools.util.UnsafeRefArrayAccess::soElement@6 (line 77)
; - org.jctools.queues.BaseMpscLinkedArrayQueue::poll@93 (line 353)
; {runtime_call _rethrow_Java}
[Stub Code]
0x00000001186d05a0: movabs $0x0,%rbx ; {no_reloc}
L000b: jmpq L000b ; {runtime_call}
0x00000001186d05af: movabs $0x0,%rbx ; {static_stub}
L000c: jmpq L000c ; {runtime_call}
0x00000001186d05be: movabs $0x0,%rbx ; {static_stub}
L000d: jmpq L000d ; {runtime_call}
0x00000001186d05cd: movabs $0x0,%rbx ; {static_stub}
L000e: jmpq L000e ; {runtime_call}
[Exception Handler]
0x00000001186d05dc: jmpq 0x0000000110c5b680 ; {runtime_call ExceptionBlob}
[Deopt Handler Code]
0x00000001186d05e1: callq 0x00000001186d05e6
0x00000001186d05e6: subq $0x5,(%rsp)
0x00000001186d05eb: jmpq 0x0000000110c26520 ; {runtime_call DeoptimizationBlob}ImmutableOopMap{[56]=Oop [64]=Oop }pc offsets: 268 304
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment