Created
January 19, 2015 17:09
-
-
Save badlogic/643ae312cc3dd0197aaa to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| final java.lang.Object put(java.lang.Object, int, java.lang.Object, boolean) | |
| { | |
| java.util.concurrent.ConcurrentHashMap$Segment r0, $r12, $r14; | |
| java.lang.Object r1, r2, r7, r8, $r11; | |
| int i0, i1, $i2, $i3, $i4, $i5, $i6, $i7, i8, $i9, $i10, $i11, $i12; | |
| boolean z0, $z1, $z2; | |
| java.util.concurrent.ConcurrentHashMap$HashEntry r3, r5, r6, $r10, $r13; | |
| java.util.concurrent.ConcurrentHashMap$HashEntry[] r4; | |
| java.lang.Throwable r9, $r15; | |
| label0: | |
| r0 := @this: java.util.concurrent.ConcurrentHashMap$Segment; | |
| /*334*/ | |
| r1 := @parameter0: java.lang.Object; | |
| /*334*/ | |
| i0 := @parameter1: int; | |
| /*334*/ | |
| r2 := @parameter2: java.lang.Object; | |
| /*334*/ | |
| z0 := @parameter3: boolean; | |
| /*334*/ | |
| $z1 = virtualinvoke r0.<java.util.concurrent.ConcurrentHashMap$Segment: boolean tryLock()>(); | |
| /*334*/ | |
| /*[not null]*/ | |
| if $z1 == 0 goto label1; | |
| /*334*/ | |
| $r10 = null; | |
| /*334*/ | |
| goto label2; | |
| /*334*/ | |
| label1: | |
| $r10 = specialinvoke r0.<java.util.concurrent.ConcurrentHashMap$Segment: java.util.concurrent.ConcurrentHashMap$HashEntry scanAndLockForPut(java.lang.Object,int,java.lang.Object)>(r1, i0, r2); | |
| /*334*/ | |
| /*[not null]*/ | |
| label2: | |
| r3 = $r10; | |
| /*334*/ | |
| label3: | |
| r4 = r0.<java.util.concurrent.ConcurrentHashMap$Segment: java.util.concurrent.ConcurrentHashMap$HashEntry[] table>; | |
| /*338*/ | |
| /*338*/ | |
| /*[not null]*/ | |
| label4: | |
| $i2 = lengthof r4; | |
| /*339*/ | |
| /*[unknown]*/ | |
| $i3 = $i2 - 1; | |
| /*339*/ | |
| i1 = $i3 & i0; | |
| /*339*/ | |
| /*339*/ | |
| label5: | |
| r5 = staticinvoke <java.util.concurrent.ConcurrentHashMap: java.util.concurrent.ConcurrentHashMap$HashEntry entryAt(java.util.concurrent.ConcurrentHashMap$HashEntry[],int)>(r4, i1); | |
| /*340*/ | |
| /*340*/ | |
| label6: | |
| r6 = r5; | |
| /*341*/ | |
| /*341*/ | |
| label7: | |
| if r6 == null goto label13; | |
| /*342*/ | |
| $r11 = r6.<java.util.concurrent.ConcurrentHashMap$HashEntry: java.lang.Object key>; | |
| /*344*/ | |
| /*[not null]*/ | |
| r7 = $r11; | |
| /*344*/ | |
| /*344*/ | |
| label8: | |
| if $r11 == r1 goto label9; | |
| /*344*/ | |
| $i4 = r6.<java.util.concurrent.ConcurrentHashMap$HashEntry: int hash>; | |
| /*344*/ | |
| /*[not null]*/ | |
| if $i4 != i0 goto label11; | |
| /*344*/ | |
| $z2 = virtualinvoke r1.<java.lang.Object: boolean equals(java.lang.Object)>(r7); | |
| /*344*/ | |
| /*[unknown]*/ | |
| if $z2 == 0 goto label11; | |
| /*344*/ | |
| label9: | |
| r8 = r6.<java.util.concurrent.ConcurrentHashMap$HashEntry: java.lang.Object value>; | |
| /*346*/ | |
| /*346*/ | |
| /*[not null]*/ | |
| label10: | |
| if z0 != 0 goto label20; | |
| /*347*/ | |
| r6.<java.util.concurrent.ConcurrentHashMap$HashEntry: java.lang.Object value> = r2; | |
| /*348*/ | |
| /*[not null]*/ | |
| $r12 = r0; | |
| /*349*/ | |
| $i5 = r0.<java.util.concurrent.ConcurrentHashMap$Segment: int modCount>; | |
| /*349*/ | |
| /*[not null]*/ | |
| $i6 = $i5 + 1; | |
| /*349*/ | |
| r0.<java.util.concurrent.ConcurrentHashMap$Segment: int modCount> = $i6; | |
| /*349*/ | |
| /*[not null]*/ | |
| goto label20; | |
| /*349*/ | |
| label11: | |
| r6 = r6.<java.util.concurrent.ConcurrentHashMap$HashEntry: java.util.concurrent.ConcurrentHashMap$HashEntry next>; | |
| /*353*/ | |
| /*353*/ | |
| /*[not null]*/ | |
| label12: | |
| goto label7; | |
| /*354*/ | |
| label13: | |
| if r3 == null goto label14; | |
| /*356*/ | |
| virtualinvoke r3.<java.util.concurrent.ConcurrentHashMap$HashEntry: void setNext(java.util.concurrent.ConcurrentHashMap$HashEntry)>(r5); | |
| /*357*/ | |
| /*[not null]*/ | |
| goto label15; | |
| /*357*/ | |
| label14: | |
| $r13 = new java.util.concurrent.ConcurrentHashMap$HashEntry; | |
| /*359*/ | |
| specialinvoke $r13.<java.util.concurrent.ConcurrentHashMap$HashEntry: void <init>(int,java.lang.Object,java.lang.Object,java.util.concurrent.ConcurrentHashMap$HashEntry)>(i0, r1, r2, r5); | |
| /*359*/ | |
| /*[not null]*/ | |
| r3 = $r13; | |
| /*359*/ | |
| label15: | |
| $i7 = r0.<java.util.concurrent.ConcurrentHashMap$Segment: int count>; | |
| /*360*/ | |
| /*[not null]*/ | |
| i8 = $i7 + 1; | |
| /*360*/ | |
| /*360*/ | |
| label16: | |
| $i9 = r0.<java.util.concurrent.ConcurrentHashMap$Segment: int threshold>; | |
| /*361*/ | |
| /*[not null]*/ | |
| if i8 <= $i9 goto label17; | |
| /*361*/ | |
| $i10 = lengthof r4; | |
| /*361*/ | |
| /*[not null]*/ | |
| if $i10 >= 1073741824 goto label17; | |
| /*361*/ | |
| specialinvoke r0.<java.util.concurrent.ConcurrentHashMap$Segment: void rehash(java.util.concurrent.ConcurrentHashMap$HashEntry)>(r3); | |
| /*362*/ | |
| /*[not null]*/ | |
| goto label18; | |
| /*362*/ | |
| label17: | |
| staticinvoke <java.util.concurrent.ConcurrentHashMap: void setEntryAt(java.util.concurrent.ConcurrentHashMap$HashEntry[],int,java.util.concurrent.ConcurrentHashMap$HashEntry)>(r4, i1, r3); | |
| /*364*/ | |
| label18: | |
| $r14 = r0; | |
| /*365*/ | |
| $i11 = r0.<java.util.concurrent.ConcurrentHashMap$Segment: int modCount>; | |
| /*365*/ | |
| /*[not null]*/ | |
| $i12 = $i11 + 1; | |
| /*365*/ | |
| r0.<java.util.concurrent.ConcurrentHashMap$Segment: int modCount> = $i12; | |
| /*365*/ | |
| /*[not null]*/ | |
| r0.<java.util.concurrent.ConcurrentHashMap$Segment: int count> = i8; | |
| /*366*/ | |
| /*[not null]*/ | |
| r8 = null; | |
| /*367*/ | |
| /*367*/ | |
| label19: | |
| goto label20; | |
| /*368*/ | |
| label20: | |
| virtualinvoke r0.<java.util.concurrent.ConcurrentHashMap$Segment: void unlock()>(); | |
| /*372*/ | |
| /*[not null]*/ | |
| goto label24; | |
| /*373*/ | |
| label21: | |
| $r15 := @caughtexception; | |
| /*372*/ | |
| label22: | |
| r9 = $r15; | |
| /*372*/ | |
| label23: | |
| virtualinvoke r0.<java.util.concurrent.ConcurrentHashMap$Segment: void unlock()>(); | |
| /*372*/ | |
| /*[unknown]*/ | |
| throw r9; | |
| /*372*/ | |
| /*[not null]*/ | |
| label24: | |
| return r8; | |
| /*374*/ | |
| catch java.lang.Throwable from label3 to label20 with label21; | |
| catch java.lang.Throwable from label22 to label23 with label21; | |
| localvar index=6 name=oldValue type=Ljava/lang/Object; start=label10 end=label11; | |
| localvar index=11 name=k type=Ljava/lang/Object; start=label8 end=label12; | |
| localvar index=11 name=c type=I start=label16 end=label20; | |
| localvar index=10 name=e type=Ljava/util/concurrent/ConcurrentHashMap$HashEntry; start=label7 end=label20; | |
| localvar index=7 name=tab type=[Ljava/util/concurrent/ConcurrentHashMap$HashEntry; start=label4 end=label20; | |
| localvar index=8 name=index type=I start=label5 end=label20; | |
| localvar index=9 name=first type=Ljava/util/concurrent/ConcurrentHashMap$HashEntry; start=label6 end=label20; | |
| localvar index=0 name=this type=Ljava/util/concurrent/ConcurrentHashMap$Segment; start=label0 end=<end_of_method>; | |
| localvar index=1 name=key type=Ljava/lang/Object; start=label0 end=<end_of_method>; | |
| localvar index=2 name=hash type=I start=label0 end=<end_of_method>; | |
| localvar index=3 name=value type=Ljava/lang/Object; start=label0 end=<end_of_method>; | |
| localvar index=4 name=onlyIfAbsent type=Z start=label0 end=<end_of_method>; | |
| localvar index=5 name=node type=Ljava/util/concurrent/ConcurrentHashMap$HashEntry; start=label3 end=<end_of_method>; | |
| localvar index=6 name=oldValue type=Ljava/lang/Object; start=label19 end=<end_of_method>; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment