Skip to content

Instantly share code, notes, and snippets.

@daschl
Created June 24, 2013 09:24
Show Gist options
  • Save daschl/5848839 to your computer and use it in GitHub Desktop.
Save daschl/5848839 to your computer and use it in GitHub Desktop.
ASM output
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
Loaded disassembler from hsdis-amd64.dylib
Decoding compiled method 0x0000000105146150:
Code:
[Disassembling for mach='i386(base-hsdis)']
[Entry Point]
[Constants]
# {method} 'hashCode' '()I' in 'java/lang/String'
# [sp+0x30] (sp of caller)
0x00000001051462a0: inc esp
0x00000001051462a1: mov edx, [esi+0x8]
0x00000001051462a4: dec ecx
0x00000001051462a5: shl edx, 3
0x00000001051462a8: dec ecx
0x00000001051462a9: cmp eax, edx
0x00000001051462ab: jnz 0x000000000511da60 ; {runtime_call}
0x00000001051462b1: nop
0x00000001051462b4: invalid 0x0f #size=0
0x00000001051462b5: pop ds
0x00000001051462b6: test [eax], al
0x00000001051462b8: add [eax], al
0x00000001051462ba: add [eax], al
0x00000001051462bc: nop
[Verified Entry Point]
0x00000001051462c0: mov [esp-0x14000], eax
0x00000001051462c7: push ebp
0x00000001051462c8: dec eax
0x00000001051462c9: sub esp, 0x0000000000000020
;*synchronization entry
; - java.lang.String::hashCode@-1 (line 1446)
0x00000001051462cc: dec esp
0x00000001051462cd: mov ebx, esi
0x00000001051462cf: mov eax, [esi+0x10] ;*getfield hash
; - java.lang.String::hashCode@1 (line 1446)
0x00000001051462d2: test eax, eax
0x00000001051462d4: jnz 0x00000000051463d1 ;*ifne
; - java.lang.String::hashCode@6 (line 1447)
0x00000001051462da: mov ebp, [esi+0xC] ;*getfield value
; - java.lang.String::hashCode@10 (line 1447)
0x00000001051462dd: inc ecx ; implicit exception: dispatches to 0x00000001051463f5
0x00000001051462de: mov ebx, [esp+ebp*8+0xC] ;*arraylength
; - java.lang.String::hashCode@13 (line 1447)
0x00000001051462e2: inc ebp
0x00000001051462e3: xor edx, edx
0x00000001051462e5: test ebx, ebx
0x00000001051462e7: jle 0x00000000051463f1 ;*ifle
; - java.lang.String::hashCode@14 (line 1447)
0x00000001051462ed: test ebx, ebx
0x00000001051462ef: jbe 0x00000000051463dd
0x00000001051462f5: mov edx, ebx
0x00000001051462f7: dec edx
0x00000001051462f9: cmp edx, ebx
0x00000001051462fb: jnc 0x00000000051463dd
0x0000000105146301: dec ecx
0x0000000105146302: lea edi, [esp+ebp*8]
0x0000000105146305: xor esi, esi ;*imul
; - java.lang.String::hashCode@36 (line 1451)
0x0000000105146307: inc esi
0x0000000105146308: movzx ecx, [edi+edx*2+0x10]
0x000000010514630d: inc ecx
0x000000010514630e: add esi, ecx ;*iadd
; - java.lang.String::hashCode@40 (line 1451)
0x0000000105146310: inc ecx
0x0000000105146311: inc edx ;*iinc
; - java.lang.String::hashCode@42 (line 1450)
0x0000000105146313: inc esp
0x0000000105146314: mov eax, esi
0x0000000105146316: inc ecx
0x0000000105146317: shl eax, 5
0x000000010514631a: inc ecx
0x000000010514631b: mov eax, eax
0x000000010514631d: sub eax, esi ;*imul
; - java.lang.String::hashCode@36 (line 1451)
0x000000010514631f: inc ecx
0x0000000105146320: cmp edx, 1
0x0000000105146323: jge 0x0000000005146329 ;*if_icmpge
; - java.lang.String::hashCode@30 (line 1450)
0x0000000105146325: mov esi, eax
0x0000000105146327: jmp 0x0000000005146307
0x0000000105146329: mov ecx, ebx
0x000000010514632b: add ecx, 0x00000000000000fd
0x000000010514632e: inc ecx
0x000000010514632f: mov ecx, 0x0000000080000000
0x0000000105146334: cmp edx, ecx
0x0000000105146336: inc ecx
0x0000000105146337: cmovl ecx, ecx
0x000000010514633a: inc esp
0x000000010514633b: cmp edx, ecx
0x000000010514633d: jl 0x0000000005146375
0x000000010514633f: inc ecx
0x0000000105146340: mov eax, eax
0x0000000105146342: inc ecx
0x0000000105146343: mov edx, edx
0x0000000105146345: jmp 0x00000000051463c7
0x000000010514634a: inc esp
0x000000010514634b: mov edx, eax
0x000000010514634d: inc ecx
0x000000010514634e: shl edx, 5 ;*imul
; - java.lang.String::hashCode@36 (line 1451)
0x0000000105146351: mov esi, eax
0x0000000105146353: inc ecx
0x0000000105146354: mov eax, edx ;*bipush
; - java.lang.String::hashCode@33 (line 1451)
0x0000000105146356: inc esp
0x0000000105146357: movzx eax, [edi+edx*2+0x10]
0x000000010514635c: sub eax, esi
0x000000010514635e: inc ecx
0x000000010514635f: add eax, eax ;*iadd
; - java.lang.String::hashCode@40 (line 1451)
0x0000000105146361: inc edx ;*iinc
; - java.lang.String::hashCode@42 (line 1450)
0x0000000105146363: cmp edx, ebx
0x0000000105146365: jl 0x000000000514634a ;*if_icmpge
; - java.lang.String::hashCode@30 (line 1450)
0x0000000105146367: jmp 0x00000000051463cd
0x0000000105146369: invalid 0x0f #size=0
0x000000010514636a: pop ds
0x000000010514636b: add [eax], 0x00
0x000000010514636e: add [eax], al
0x0000000105146370: sub eax, esi
0x0000000105146372: inc esp
0x0000000105146373: mov edx, edx ;*imul
; - java.lang.String::hashCode@36 (line 1451)
0x0000000105146375: inc esi
0x0000000105146376: movzx ecx, [edi+edx*2+0x10]
0x000000010514637b: inc ecx
0x000000010514637c: add eax, ecx ;*iadd
; - java.lang.String::hashCode@40 (line 1451)
0x000000010514637e: inc ecx
0x000000010514637f: mov edx, edx
0x0000000105146381: add edx, 4 ;*iinc
; - java.lang.String::hashCode@42 (line 1450)
0x0000000105146384: inc esp
0x0000000105146385: mov ecx, eax
0x0000000105146387: inc ecx
0x0000000105146388: shl ecx, 5
0x000000010514638b: inc esp
0x000000010514638c: sub ecx, eax
0x000000010514638e: dec ebp
0x000000010514638f: arpl dx, dx
0x0000000105146391: inc esi
0x0000000105146392: movzx eax, [edi+edx*2+0x12]
0x0000000105146397: inc edx
0x0000000105146398: movzx ebp, [edi+edx*2+0x16]
0x000000010514639d: inc esi
0x000000010514639e: movzx edx, [edi+edx*2+0x14]
0x00000001051463a3: inc ebp
0x00000001051463a4: add ecx, eax
0x00000001051463a6: inc ebp
0x00000001051463a7: mov eax, ecx
0x00000001051463a9: inc ecx
0x00000001051463aa: shl eax, 5
0x00000001051463ad: inc ebp
0x00000001051463ae: sub eax, ecx
0x00000001051463b0: inc ebp
0x00000001051463b1: add eax, edx
0x00000001051463b3: inc ecx
0x00000001051463b4: mov esi, eax
0x00000001051463b6: shl esi, 5
0x00000001051463b9: inc ecx
0x00000001051463ba: sub esi, eax
0x00000001051463bc: add esi, ebp ;*iadd
; - java.lang.String::hashCode@40 (line 1451)
0x00000001051463be: mov eax, esi
0x00000001051463c0: shl eax, 5 ;*imul
; - java.lang.String::hashCode@36 (line 1451)
0x00000001051463c3: cmp edx, ecx
0x00000001051463c5: jl 0x0000000005146370 ;*if_icmpge
; - java.lang.String::hashCode@30 (line 1450)
0x00000001051463c7: cmp edx, ebx
0x00000001051463c9: jl 0x0000000005146356
0x00000001051463cb: mov eax, esi
0x00000001051463cd: inc ecx
0x00000001051463ce: mov [ebx+0x10], eax ;*synchronization entry
; - java.lang.String::hashCode@-1 (line 1446)
0x00000001051463d1: dec eax
0x00000001051463d2: add esp, 0x0000000000000020
0x00000001051463d5: pop ebp
0x00000001051463d6: test [-0xF63DC], eax ; {poll_return}
0x00000001051463dc: ret
0x00000001051463dd: mov esi, 0x00000000ffffff86
0x00000001051463e2: dec esp
0x00000001051463e3: mov [esp], ebx
0x00000001051463e6: nop
0x00000001051463e7: call 0x000000000511f020 ; OopMap{rbp=NarrowOop [0]=Oop off=332}
;*bipush
; - java.lang.String::hashCode@33 (line 1451)
; {runtime_call}
0x00000001051463ec: call 0x0000000004819d6a ;*bipush
; - java.lang.String::hashCode@33 (line 1451)
; {runtime_call}
0x00000001051463f1: xor eax, eax
0x00000001051463f3: jmp 0x00000000051463d1
0x00000001051463f5: mov esi, 0x00000000fffffff6
0x00000001051463fa: nop
0x00000001051463fb: call 0x000000000511f020 ; OopMap{off=352}
;*arraylength
; - java.lang.String::hashCode@13 (line 1447)
; {runtime_call}
0x0000000105146400: call 0x0000000004819d6a ;*arraylength
; - java.lang.String::hashCode@13 (line 1447)
; {runtime_call}
0x0000000105146405: hlt
0x0000000105146406: hlt
0x0000000105146407: hlt
0x0000000105146408: hlt
0x0000000105146409: hlt
0x000000010514640a: hlt
0x000000010514640b: hlt
0x000000010514640c: hlt
0x000000010514640d: hlt
0x000000010514640e: hlt
0x000000010514640f: hlt
0x0000000105146410: hlt
0x0000000105146411: hlt
0x0000000105146412: hlt
0x0000000105146413: hlt
0x0000000105146414: hlt
0x0000000105146415: hlt
0x0000000105146416: hlt
0x0000000105146417: hlt
0x0000000105146418: hlt
0x0000000105146419: hlt
0x000000010514641a: hlt
0x000000010514641b: hlt
0x000000010514641c: hlt
0x000000010514641d: hlt
0x000000010514641e: hlt
0x000000010514641f: hlt
[Exception Handler]
[Stub Code]
0x0000000105146420: jmp 0x0000000005144ea0 ; {no_reloc}
[Deopt Handler Code]
0x0000000105146425: call 0x000000000514642a
0x000000010514642a: dec eax
0x000000010514642b: sub [esp], 5
0x000000010514642f: jmp 0x000000000511ec00 ; {runtime_call}
0x0000000105146434: hlt
0x0000000105146435: hlt
0x0000000105146436: hlt
0x0000000105146437: hlt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment