Created
January 9, 2012 14:36
-
-
Save nschlimm/1583197 to your computer and use it in GitHub Desktop.
Random.next() Assembly Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Decoding compiled method 0x00c38ec8: | |
Code: | |
[Disassembling for mach='i386'] | |
[Entry Point] | |
[Constants] | |
# {method} 'next' '(I)I' in 'java/util/Random' | |
# this: ecx = 'java/util/Random' | |
# parm0: edx = int | |
# [sp+0x60] (sp of caller) | |
;; block B7 [0, 0] | |
0x00c38fd0: nop | |
0x00c38fd1: nop | |
0x00c38fd2: nop | |
0x00c38fd3: nop | |
0x00c38fd4: nop | |
0x00c38fd5: nop | |
0x00c38fd6: nop | |
0x00c38fd7: cmp 0x4(%ecx),%eax | |
0x00c38fda: jne 0x00bead90 ; {runtime_call} | |
[Verified Entry Point] | |
0x00c38fe0: mov %eax,0xffff8000(%esp) | |
0x00c38fe7: push %ebp | |
0x00c38fe8: sub $0x58,%esp | |
0x00c38feb: mov %edx,%esi ;*aload_0 | |
; - java.util.Random::next@0 (line 179) | |
0x00c38fed: mov %esi,0x38(%esp) | |
;; block B0 [0, 6] | |
0x00c38ff1: mov 0x14(%ecx),%edi ;*getfield seed | |
; - java.util.Random::next@1 (line 179) | |
0x00c38ff4: mov %edi,0x3c(%esp) | |
;; 14 branch [AL] [B1] | |
0x00c38ff8: jmp 0x00c39002 ;*aload | |
; - java.util.Random::next@6 (line 181) | |
0x00c38ffd: nop | |
0x00c38ffe: nop | |
0x00c38fff: nop | |
;; block B8 [35, 35] | |
0x00c39000: mov %esi,%edi | |
;; block B1 [6, 35] | |
0x00c39002: movsd 0x8(%edi),%xmm0 ; implicit exception: dispatches to 0x00c390c0 | |
0x00c39007: movd %xmm0,%ebx | |
0x00c3900b: psrlq $0x20,%xmm0 | |
0x00c39010: movd %xmm0,%ecx ;*getfield value | |
; - java.util.concurrent.atomic.AtomicLong::get@1 (line 103) | |
; - java.util.Random::next@8 (line 181) | |
0x00c39014: mov $0xdeece66d,%eax | |
0x00c39019: mov $0x5,%edx | |
0x00c3901e: mov %eax,%esi | |
0x00c39020: mov %edx,%edi | |
0x00c39022: mov %ebx,%eax | |
0x00c39024: mov %ecx,%edx | |
0x00c39026: imul %esi,%edx | |
0x00c39029: imul %eax,%edi | |
0x00c3902c: add %edx,%edi | |
0x00c3902e: mul %esi | |
0x00c39030: add %edi,%edx | |
0x00c39032: add $0xb,%eax | |
0x00c39035: adc $0x0,%edx | |
0x00c39038: mov %eax,%esi | |
0x00c3903a: mov %edx,%edi | |
0x00c3903c: and $0xffffffff,%esi | |
0x00c3903f: and $0xffff,%edi | |
0x00c39045: mov $0x100d1d70,%eax ; {oop(a 'java/lang/Class' = 'java/util/concurrent/atomic/AtomicLong')} | |
0x00c3904a: mov 0x68(%eax),%eax ;*getstatic unsafe | |
; - java.util.concurrent.atomic.AtomicLong::compareAndSet@0 (line 149) | |
; - java.util.Random::next@32 (line 183) | |
0x00c3904d: mov %ebx,%eax | |
0x00c3904f: mov %ecx,%edx | |
0x00c39051: mov %esi,%ebx | |
0x00c39053: mov %edi,%ecx | |
0x00c39055: mov %esi,0x40(%esp) | |
0x00c39059: mov %edi,0x44(%esp) | |
0x00c3905d: mov 0x3c(%esp),%esi | |
0x00c39061: lea 0x8(%esi),%edi | |
0x00c39064: lock cmpxchg8b (%edi) | |
0x00c39068: mov $0x1,%ecx | |
0x00c3906d: je 0x00c39078 | |
0x00c39073: mov $0x0,%ecx ; OopMap{esi=Oop [60]=Oop off=168} | |
;*ifeq | |
; - java.util.Random::next@35 (line 183) | |
0x00c39078: test %eax,0x9f0100 ; {poll} | |
0x00c3907e: cmp $0x0,%ecx | |
;; 60 branch [EQ] [B8] | |
0x00c39081: je 0x00c39000 ;*ifeq | |
; - java.util.Random::next@35 (line 183) | |
;; block B2 [38, 46] | |
0x00c39087: mov 0x40(%esp),%edi | |
0x00c3908b: mov 0x44(%esp),%eax | |
0x00c3908f: mov 0x38(%esp),%esi | |
0x00c39093: mov $0x30,%ecx | |
0x00c39098: sub %esi,%ecx | |
0x00c3909a: mov %edi,%esi | |
0x00c3909c: mov %eax,%edi | |
0x00c3909e: and $0x3f,%ecx | |
0x00c390a1: cmp $0x20,%ecx | |
0x00c390a4: jl 0x00c390ae | |
0x00c390aa: mov %edi,%esi | |
0x00c390ac: xor %edi,%edi | |
0x00c390ae: shrd %cl,%edi,%esi | |
0x00c390b1: shr %cl,%edi | |
0x00c390b3: mov %esi,%eax | |
0x00c390b5: add $0x58,%esp | |
0x00c390b8: pop %ebp | |
0x00c390b9: test %eax,0x9f0100 ; {poll_return} | |
0x00c390bf: ret | |
;; ImplicitNullCheckStub slow case | |
0x00c390c0: call 0x00c28620 ; OopMap{edi=Oop [60]=Oop off=245} | |
;*invokevirtual get | |
; - java.util.Random::next@8 (line 181) | |
; {runtime_call} | |
0x00c390c5: push $0x84117f8 ; {external_word} | |
0x00c390ca: call 0x00c390cf | |
0x00c390cf: pusha | |
0x00c390d0: call 0x08260100 ; {runtime_call} | |
0x00c390d5: hlt | |
0x00c390d6: nop | |
0x00c390d7: nop | |
;; Unwind handler | |
0x00c390d8: mov %fs:0x0,%esi | |
0x00c390e0: mov 0xfffffff4(%esi),%esi | |
0x00c390e3: mov 0x198(%esi),%eax | |
0x00c390e9: movl $0x0,0x198(%esi) | |
0x00c390f3: movl $0x0,0x19c(%esi) | |
0x00c390fd: add $0x58,%esp | |
0x00c39100: pop %ebp | |
0x00c39101: jmp 0x00c27e60 ; {runtime_call} | |
0x00c39106: hlt | |
0x00c39107: hlt | |
0x00c39108: hlt | |
0x00c39109: hlt | |
0x00c3910a: hlt | |
0x00c3910b: hlt | |
0x00c3910c: hlt | |
0x00c3910d: hlt | |
0x00c3910e: hlt | |
0x00c3910f: hlt | |
[Exception Handler] | |
[Stub Code] | |
0x00c39110: mov $0xdead,%ebx ; {no_reloc} | |
0x00c39115: mov $0xdead,%ecx | |
0x00c3911a: mov $0xdead,%esi | |
0x00c3911f: mov $0xdead,%edi | |
0x00c39124: call 0x00c2a260 ; {runtime_call} | |
0x00c39129: push $0x84117f8 ; {external_word} | |
0x00c3912e: call 0x00c39133 | |
0x00c39133: pusha | |
0x00c39134: call 0x08260100 ; {runtime_call} | |
0x00c39139: hlt | |
[Deopt Handler Code] | |
0x00c3913a: push $0xc3913a ; {section_word} | |
0x00c3913f: jmp 0x00bebac0 ; {runtime_call} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment