public abstract class io.netty.util.internal.ReferenceCountUpdater extends java.lang.Object
{
protected void <init>()
{
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static long getUnsafeOffset(java.lang.Class, java.lang.String)
{
java.lang.Throwable v;
java.lang.Class v;
long v;
java.lang.String v;
java.lang.reflect.Field v;
boolean v;
v := @parameter: java.lang.Class;
v := @parameter: java.lang.String;
label:
v = staticinvoke <io.netty.util.internal.PlatformDependent: boolean hasUnsafe()>();
if v == 0 goto label;
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Field getDeclaredField(java.lang.String)>(v);
v = staticinvoke <io.netty.util.internal.PlatformDependent: long objectFieldOffset(java.lang.reflect.Field)>(v);
label:
return v;
label:
v := @caughtexception;
label:
return -1L;
catch java.lang.Throwable from label to label with label;
}
protected abstract java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater();
protected abstract long unsafeOffset();
public final int initialValue()
{
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
return 2;
}
public void setInitialValue(io.netty.util.ReferenceCounted)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
byte v;
int v, v;
long v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: long unsafeOffset()>();
v = v cmp -1L;
if v != 0 goto label;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: int initialValue()>();
virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: void set(java.lang.Object,int)>(v, v);
goto label;
label:
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: int initialValue()>();
staticinvoke <io.netty.util.internal.PlatformDependent: void safeConstructPutInt(java.lang.Object,long,int)>(v, v, v);
label:
return;
}
private static int realRefCnt(int)
{
int v, v, v;
v := @parameter: int;
if v == 2 goto label;
if v == 4 goto label;
v = v & 1;
if v == 0 goto label;
v = 0;
goto label;
label:
v = v >>> 1;
label:
return v;
}
private static int toLiveRealRefCnt(int, int)
{
io.netty.util.IllegalReferenceCountException v;
int v, v, v, v, v;
v := @parameter: int;
v := @parameter: int;
if v == 2 goto label;
if v == 4 goto label;
v = v & 1;
if v != 0 goto label;
label:
v = v >>> 1;
return v;
label:
v = new io.netty.util.IllegalReferenceCountException;
v = neg v;
specialinvoke v.<io.netty.util.IllegalReferenceCountException: void <init>(int,int)>(0, v);
throw v;
}
private int nonVolatileRawCnt(io.netty.util.ReferenceCounted)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
byte v;
int v;
long v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: long unsafeOffset()>();
v = v cmp -1L;
if v == 0 goto label;
v = staticinvoke <io.netty.util.internal.PlatformDependent: int getInt(java.lang.Object,long)>(v, v);
goto label;
label:
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
label:
return v;
}
public final int refCnt(io.netty.util.ReferenceCounted)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
int v, v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
v = staticinvoke <io.netty.util.internal.ReferenceCountUpdater: int realRefCnt(int)>(v);
return v;
}
public final boolean isLiveNonVolatile(io.netty.util.ReferenceCounted)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
long v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
byte v;
int v, v;
boolean v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: long unsafeOffset()>();
v = v cmp -1L;
if v == 0 goto label;
v = staticinvoke <io.netty.util.internal.PlatformDependent: int getInt(java.lang.Object,long)>(v, v);
goto label;
label:
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
label:
if v == 2 goto label;
if v == 4 goto label;
if v == 6 goto label;
if v == 8 goto label;
v = v & 1;
if v != 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public final void setRefCnt(io.netty.util.ReferenceCounted, int)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
int v, v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
if v <= 0 goto label;
v = v << 1;
goto label;
label:
v = 1;
label:
virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: void set(java.lang.Object,int)>(v, v);
return;
}
public final void resetRefCnt(io.netty.util.ReferenceCounted)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
int v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: int initialValue()>();
virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: void lazySet(java.lang.Object,int)>(v, v);
return;
}
public final io.netty.util.ReferenceCounted retain(io.netty.util.ReferenceCounted)
{
io.netty.util.ReferenceCounted v, v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: io.netty.util.ReferenceCounted retain0(io.netty.util.ReferenceCounted,int,int)>(v, 1, 2);
return v;
}
public final io.netty.util.ReferenceCounted retain(io.netty.util.ReferenceCounted, int)
{
int v, v, v;
io.netty.util.ReferenceCounted v, v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v = staticinvoke <io.netty.util.internal.ObjectUtil: int checkPositive(int,java.lang.String)>(v, "increment");
v = v << 1;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: io.netty.util.ReferenceCounted retain0(io.netty.util.ReferenceCounted,int,int)>(v, v, v);
return v;
}
private io.netty.util.ReferenceCounted retain0(io.netty.util.ReferenceCounted, int, int)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v, v;
io.netty.util.IllegalReferenceCountException v, v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
int v, v, v, v, v, v, v, v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v := @parameter: int;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int getAndAdd(java.lang.Object,int)>(v, v);
if v == 2 goto label;
if v == 4 goto label;
v = v & 1;
if v == 0 goto label;
v = new io.netty.util.IllegalReferenceCountException;
specialinvoke v.<io.netty.util.IllegalReferenceCountException: void <init>(int,int)>(0, v);
throw v;
label:
if v > 0 goto label;
v = v + v;
if v >= 0 goto label;
label:
if v < 0 goto label;
v = v + v;
if v >= v goto label;
label:
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = neg v;
virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int getAndAdd(java.lang.Object,int)>(v, v);
v = new io.netty.util.IllegalReferenceCountException;
v = staticinvoke <io.netty.util.internal.ReferenceCountUpdater: int realRefCnt(int)>(v);
specialinvoke v.<io.netty.util.IllegalReferenceCountException: void <init>(int,int)>(v, v);
throw v;
label:
return v;
}
public final boolean release(io.netty.util.ReferenceCounted)
{
int v, v;
io.netty.util.ReferenceCounted v;
boolean v, v, v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: int nonVolatileRawCnt(io.netty.util.ReferenceCounted)>(v);
if v != 2 goto label;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean tryFinalRelease0(io.netty.util.ReferenceCounted,int)>(v, 2);
if v != 0 goto label;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean retryRelease0(io.netty.util.ReferenceCounted,int)>(v, 1);
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
goto label;
label:
v = staticinvoke <io.netty.util.internal.ReferenceCountUpdater: int toLiveRealRefCnt(int,int)>(v, 1);
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean nonFinalRelease0(io.netty.util.ReferenceCounted,int,int,int)>(v, 1, v, v);
label:
return v;
}
public final boolean release(io.netty.util.ReferenceCounted, int)
{
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
int v, v, v, v;
boolean v, v, v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: int nonVolatileRawCnt(io.netty.util.ReferenceCounted)>(v);
v = staticinvoke <io.netty.util.internal.ObjectUtil: int checkPositive(int,java.lang.String)>(v, "decrement");
v = staticinvoke <io.netty.util.internal.ReferenceCountUpdater: int toLiveRealRefCnt(int,int)>(v, v);
if v != v goto label;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean tryFinalRelease0(io.netty.util.ReferenceCounted,int)>(v, v);
if v != 0 goto label;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean retryRelease0(io.netty.util.ReferenceCounted,int)>(v, v);
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
goto label;
label:
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean nonFinalRelease0(io.netty.util.ReferenceCounted,int,int,int)>(v, v, v, v);
label:
return v;
}
private boolean tryFinalRelease0(io.netty.util.ReferenceCounted, int)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
int v;
io.netty.util.ReferenceCounted v;
boolean v;
io.netty.util.internal.ReferenceCountUpdater v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: boolean compareAndSet(java.lang.Object,int,int)>(v, v, 1);
return v;
}
private boolean nonFinalRelease0(io.netty.util.ReferenceCounted, int, int, int)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
int v, v, v, v, v;
boolean v, v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
if v >= v goto label;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = v << 1;
v = v - v;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: boolean compareAndSet(java.lang.Object,int,int)>(v, v, v);
if v == 0 goto label;
return 0;
label:
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean retryRelease0(io.netty.util.ReferenceCounted,int)>(v, v);
return v;
}
private boolean retryRelease0(io.netty.util.ReferenceCounted, int)
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v, v;
io.netty.util.IllegalReferenceCountException v;
io.netty.util.ReferenceCounted v;
io.netty.util.internal.ReferenceCountUpdater v;
int v, v, v, v, v, v;
boolean v, v;
v := @this: io.netty.util.internal.ReferenceCountUpdater;
v := @parameter: io.netty.util.ReferenceCounted;
v := @parameter: int;
label:
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
v = staticinvoke <io.netty.util.internal.ReferenceCountUpdater: int toLiveRealRefCnt(int,int)>(v, v);
if v != v goto label;
v = specialinvoke v.<io.netty.util.internal.ReferenceCountUpdater: boolean tryFinalRelease0(io.netty.util.ReferenceCounted,int)>(v, v);
if v == 0 goto label;
return 1;
label:
if v >= v goto label;
v = virtualinvoke v.<io.netty.util.internal.ReferenceCountUpdater: java.util.concurrent.atomic.AtomicIntegerFieldUpdater updater()>();
v = v << 1;
v = v - v;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: boolean compareAndSet(java.lang.Object,int,int)>(v, v, v);
if v == 0 goto label;
return 0;
label:
v = new io.netty.util.IllegalReferenceCountException;
v = neg v;
specialinvoke v.<io.netty.util.IllegalReferenceCountException: void <init>(int,int)>(v, v);
throw v;
label:
staticinvoke <java.lang.Thread: void yield()>();
goto label;
}
}