Skip to content

Instantly share code, notes, and snippets.

@badlogic
Created January 19, 2015 17:09
Show Gist options
  • Select an option

  • Save badlogic/643ae312cc3dd0197aaa to your computer and use it in GitHub Desktop.

Select an option

Save badlogic/643ae312cc3dd0197aaa to your computer and use it in GitHub Desktop.
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