public final class Rops
extends java.lang.Object
Rop.| Modifier and Type | Field and Description |
|---|---|
static Rop |
ADD_CONST_DOUBLE
r,x,c: double :: r = x + c; |
static Rop |
ADD_CONST_FLOAT
r,x,c: float :: r = x + c; |
static Rop |
ADD_CONST_INT
r,x,c: int :: r = x + c; |
static Rop |
ADD_CONST_LONG
r,x,c: long :: r = x + c; |
static Rop |
ADD_DOUBLE
r,x,y: double :: r = x + y; |
static Rop |
ADD_FLOAT
r,x,y: float :: r = x + y; |
static Rop |
ADD_INT
r,x,y: int :: r = x + y; |
static Rop |
ADD_LONG
r,x,y: long :: r = x + y; |
static Rop |
AGET_BOOLEAN
r: boolean; x: boolean[]; y: int :: r = x[y] |
static Rop |
AGET_BYTE
r: byte; x: byte[]; y: int :: r = x[y] |
static Rop |
AGET_CHAR
r: char; x: char[]; y: int :: r = x[y] |
static Rop |
AGET_DOUBLE
r: double; x: double[]; y: int :: r = x[y] |
static Rop |
AGET_FLOAT
r: float; x: float[]; y: int :: r = x[y] |
static Rop |
AGET_INT
r,y: int; x: int[] :: r = x[y] |
static Rop |
AGET_LONG
r: long; x: long[]; y: int :: r = x[y] |
static Rop |
AGET_OBJECT
r: Object; x: Object[]; y: int :: r = x[y] |
static Rop |
AGET_SHORT
r: short; x: short[]; y: int :: r = x[y] |
static Rop |
AND_CONST_INT
r,x,c: int :: r = x & c; |
static Rop |
AND_CONST_LONG
r,x,c: long :: r = x & c; |
static Rop |
AND_INT
r,x,y: int :: r = x & y; |
static Rop |
AND_LONG
r,x,y: long :: r = x & y; |
static Rop |
APUT_BOOLEAN
x: boolean; y: boolean[]; z: int :: y[z] = x |
static Rop |
APUT_BYTE
x: byte; y: byte[]; z: int :: y[z] = x |
static Rop |
APUT_CHAR
x: char; y: char[]; z: int :: y[z] = x |
static Rop |
APUT_DOUBLE
x: double; y: double[]; z: int :: y[z] = x |
static Rop |
APUT_FLOAT
x: float; y: float[]; z: int :: y[z] = x |
static Rop |
APUT_INT
x,z: int; y: int[] :: y[z] = x |
static Rop |
APUT_LONG
x: long; y: long[]; z: int :: y[z] = x |
static Rop |
APUT_OBJECT
x: Object; y: Object[]; z: int :: y[z] = x |
static Rop |
APUT_SHORT
x: short; y: short[]; z: int :: y[z] = x |
static Rop |
ARRAY_LENGTH
T: any type; r: int; x: T[]; :: r = x.length |
static Rop |
CHECK_CAST
T: any non-array object type; x: Object :: (T) x (can
throw ClassCastException) |
static Rop |
CMPG_DOUBLE
r: int; x,y: double :: r = cmpg(x, y); |
static Rop |
CMPG_FLOAT
r: int; x,y: float :: r = cmpg(x, y); |
static Rop |
CMPL_DOUBLE
r: int; x,y: double :: r = cmpl(x, y); |
static Rop |
CMPL_FLOAT
r: int; x,y: float :: r = cmpl(x, y); |
static Rop |
CMPL_LONG
r: int; x,y: long :: r = cmp(x, y); |
static Rop |
CONST_DOUBLE
r, literal: double :: r = literal; |
static Rop |
CONST_FLOAT
r, literal: float :: r = literal; |
static Rop |
CONST_INT
r, literal: int :: r = literal; |
static Rop |
CONST_LONG
r, literal: long :: r = literal; |
static Rop |
CONST_OBJECT
r, literal: Object :: r = literal; |
static Rop |
CONST_OBJECT_NOTHROW
r, literal: Object :: r = literal; |
static Rop |
CONV_D2F
r: float; x: double :: r = (float) x |
static Rop |
CONV_D2I
r: int; x: double :: r = (int) x |
static Rop |
CONV_D2L
r: long; x: double :: r = (long) x |
static Rop |
CONV_F2D
r: double; x: float :: r = (double) x |
static Rop |
CONV_F2I
r: int; x: float :: r = (int) x |
static Rop |
CONV_F2L
r: long; x: float :: r = (long) x |
static Rop |
CONV_I2D
r: double; x: int :: r = (double) x |
static Rop |
CONV_I2F
r: float; x: int :: r = (float) x |
static Rop |
CONV_I2L
r: long; x: int :: r = (long) x |
static Rop |
CONV_L2D
r: double; x: long :: r = (double) x |
static Rop |
CONV_L2F
r: float; x: long :: r = (float) x |
static Rop |
CONV_L2I
r: int; x: long :: r = (int) x |
static Rop |
DIV_CONST_DOUBLE
r,x,c: double :: r = x / c; |
static Rop |
DIV_CONST_FLOAT
r,x,c: float :: r = x / c; |
static Rop |
DIV_CONST_INT
r,x,c: int :: r = x / c; |
static Rop |
DIV_CONST_LONG
r,x,c: long :: r = x / c; |
static Rop |
DIV_DOUBLE
r,x,y: double :: r = x / y; |
static Rop |
DIV_FLOAT
r,x,y: float :: r = x / y; |
static Rop |
DIV_INT
r,x,y: int :: r = x / y; |
static Rop |
DIV_LONG
r,x,y: long :: r = x / y; |
static Rop |
FILL_ARRAY_DATA
T: Any primitive type; v0..vx: T :: {v0, ..., vx} |
static Rop |
GET_FIELD_BOOLEAN
r: boolean; x: Object; f: instance field spec of
type boolean :: r = x.f |
static Rop |
GET_FIELD_BYTE
r: byte; x: Object; f: instance field spec of
type byte :: r = x.f |
static Rop |
GET_FIELD_CHAR
r: char; x: Object; f: instance field spec of
type char :: r = x.f |
static Rop |
GET_FIELD_DOUBLE
r: double; x: Object; f: instance field spec of
type double :: r = x.f |
static Rop |
GET_FIELD_FLOAT
r: float; x: Object; f: instance field spec of
type float :: r = x.f |
static Rop |
GET_FIELD_INT
r: int; x: Object; f: instance field spec of
type int :: r = x.f |
static Rop |
GET_FIELD_LONG
r: long; x: Object; f: instance field spec of
type long :: r = x.f |
static Rop |
GET_FIELD_OBJECT
r: Object; x: Object; f: instance field spec of
type Object :: r = x.f |
static Rop |
GET_FIELD_SHORT
r: short; x: Object; f: instance field spec of
type short :: r = x.f |
static Rop |
GET_STATIC_BOOLEAN
r: boolean; f: static field spec of type boolean :: r = f |
static Rop |
GET_STATIC_BYTE
r: byte; f: static field spec of type byte :: r = f |
static Rop |
GET_STATIC_CHAR
r: char; f: static field spec of type char :: r = f |
static Rop |
GET_STATIC_DOUBLE
r: double; f: static field spec of type double :: r = f |
static Rop |
GET_STATIC_FLOAT
r: float; f: static field spec of type float :: r = f |
static Rop |
GET_STATIC_INT
r: int; f: static field spec of type int :: r = f |
static Rop |
GET_STATIC_LONG
r: long; f: static field spec of type long :: r = f |
static Rop |
GET_STATIC_OBJECT
r: Object; f: static field spec of type Object :: r = f |
static Rop |
GET_STATIC_SHORT
r: short; f: static field spec of type short :: r = f |
static Rop |
GOTO
goto label |
static Rop |
IF_EQ_INT
x,y: int :: if (x == y) goto label |
static Rop |
IF_EQ_OBJECT
x,y: Object :: if (x == y) goto label |
static Rop |
IF_EQZ_INT
x: int :: if (x == 0) goto label |
static Rop |
IF_EQZ_OBJECT
x: Object :: if (x == null) goto label |
static Rop |
IF_GE_INT
x,y: int :: if (x >= y) goto label |
static Rop |
IF_GEZ_INT
x: int :: if (x >= 0) goto label |
static Rop |
IF_GT_INT
x,y: int :: if (x > y) goto label |
static Rop |
IF_GTZ_INT
x: int :: if (x > 0) goto label |
static Rop |
IF_LE_INT
x,y: int :: if (x <= y) goto label |
static Rop |
IF_LEZ_INT
x: int :: if (x <= 0) goto label |
static Rop |
IF_LT_INT
x,y: int :: if (x < y) goto label |
static Rop |
IF_LTZ_INT
x: int :: if (x < 0) goto label |
static Rop |
IF_NE_INT
x,y: int :: if (x != y) goto label |
static Rop |
IF_NE_OBJECT
x,y: Object :: if (x != y) goto label |
static Rop |
IF_NEZ_INT
x: int :: if (x != 0) goto label |
static Rop |
IF_NEZ_OBJECT
x: Object :: if (x != null) goto label |
static Rop |
INSTANCE_OF
T: any non-array object type; x: Object :: x instanceof
T. |
static Rop |
MARK_LOCAL_DOUBLE
x: Double :: local variable begins in x |
static Rop |
MARK_LOCAL_FLOAT
x: Float :: local variable begins in x |
static Rop |
MARK_LOCAL_INT
x: Int :: local variable begins in x |
static Rop |
MARK_LOCAL_LONG
x: Long :: local variable begins in x |
static Rop |
MARK_LOCAL_OBJECT
x: Object :: local variable begins in x |
static Rop |
MONITOR_ENTER
x: Object :: monitorenter(x) |
static Rop |
MONITOR_EXIT
x: Object :: monitorexit(x) |
static Rop |
MOVE_DOUBLE
r,x: double :: r = x; |
static Rop |
MOVE_FLOAT
r,x: float :: r = x; |
static Rop |
MOVE_INT
r,x: int :: r = x; |
static Rop |
MOVE_LONG
r,x: long :: r = x; |
static Rop |
MOVE_OBJECT
r,x: Object :: r = x; |
static Rop |
MOVE_PARAM_DOUBLE
r,param(x): double :: r = param(x); |
static Rop |
MOVE_PARAM_FLOAT
r,param(x): float :: r = param(x); |
static Rop |
MOVE_PARAM_INT
r,param(x): int :: r = param(x); |
static Rop |
MOVE_PARAM_LONG
r,param(x): long :: r = param(x); |
static Rop |
MOVE_PARAM_OBJECT
r,param(x): Object :: r = param(x); |
static Rop |
MOVE_RETURN_ADDRESS
r,x: ReturnAddress :: r = x;
Note that this rop-form instruction has no dex-form equivilent and
must be removed before the dex conversion. |
static Rop |
MUL_CONST_DOUBLE
r,x,c: double :: r = x * c; |
static Rop |
MUL_CONST_FLOAT
r,x,c: float :: r = x * c; |
static Rop |
MUL_CONST_INT
r,x,c: int :: r = x * c; |
static Rop |
MUL_CONST_LONG
r,x,c: long :: r = x * c; |
static Rop |
MUL_DOUBLE
r,x,y: double :: r = x * y; |
static Rop |
MUL_FLOAT
r,x,y: float :: r = x * y; |
static Rop |
MUL_INT
r,x,y: int :: r = x * y; |
static Rop |
MUL_LONG
r,x,y: long :: r = x * y; |
static Rop |
NEG_DOUBLE
r,x: double :: r = -x; |
static Rop |
NEG_FLOAT
r,x: float :: r = -x; |
static Rop |
NEG_INT
r,x: int :: r = -x; |
static Rop |
NEG_LONG
r,x: long :: r = -x; |
static Rop |
NEW_ARRAY_BOOLEAN
r: boolean[]; x: int :: r = new boolean[x] |
static Rop |
NEW_ARRAY_BYTE
r: byte[]; x: int :: r = new byte[x] |
static Rop |
NEW_ARRAY_CHAR
r: char[]; x: int :: r = new char[x] |
static Rop |
NEW_ARRAY_DOUBLE
r: double[]; x: int :: r = new double[x] |
static Rop |
NEW_ARRAY_FLOAT
r: float[]; x: int :: r = new float[x] |
static Rop |
NEW_ARRAY_INT
r: int[]; x: int :: r = new int[x] |
static Rop |
NEW_ARRAY_LONG
r: long[]; x: int :: r = new long[x] |
static Rop |
NEW_ARRAY_SHORT
r: short[]; x: int :: r = new short[x] |
static Rop |
NEW_INSTANCE
T: any non-array object type :: r =
alloc(T) (allocate heap space for an object) |
static Rop |
NOP
nop() |
static Rop |
NOT_INT
r,x: int :: r = ~x; |
static Rop |
NOT_LONG
r,x: long :: r = ~x; |
static Rop |
OR_CONST_INT
r,x,c: int :: r = x | c; |
static Rop |
OR_CONST_LONG
r,x,c: long :: r = x | c; |
static Rop |
OR_INT
r,x,y: int :: r = x | y; |
static Rop |
OR_LONG
r,x,y: long :: r = x | y; |
static Rop |
PUT_FIELD_BOOLEAN
x: int; y: Object; f: instance field spec of type
boolean :: y.f = x |
static Rop |
PUT_FIELD_BYTE
x: int; y: Object; f: instance field spec of type
byte :: y.f = x |
static Rop |
PUT_FIELD_CHAR
x: int; y: Object; f: instance field spec of type
char :: y.f = x |
static Rop |
PUT_FIELD_DOUBLE
x: double; y: Object; f: instance field spec of type
double :: y.f = x |
static Rop |
PUT_FIELD_FLOAT
x: float; y: Object; f: instance field spec of type
float :: y.f = x |
static Rop |
PUT_FIELD_INT
x: int; y: Object; f: instance field spec of type
int :: y.f = x |
static Rop |
PUT_FIELD_LONG
x: long; y: Object; f: instance field spec of type
long :: y.f = x |
static Rop |
PUT_FIELD_OBJECT
x: Object; y: Object; f: instance field spec of type
Object :: y.f = x |
static Rop |
PUT_FIELD_SHORT
x: int; y: Object; f: instance field spec of type
short :: y.f = x |
static Rop |
PUT_STATIC_BOOLEAN
f: static field spec of type boolean; x: boolean :: f =
x |
static Rop |
PUT_STATIC_BYTE
f: static field spec of type byte; x: byte :: f = x |
static Rop |
PUT_STATIC_CHAR
f: static field spec of type char; x: char :: f = x |
static Rop |
PUT_STATIC_DOUBLE
f: static field spec of type double; x: double :: f = x |
static Rop |
PUT_STATIC_FLOAT
f: static field spec of type float; x: float :: f = x |
static Rop |
PUT_STATIC_INT
f: static field spec of type int; x: int :: f = x |
static Rop |
PUT_STATIC_LONG
f: static field spec of type long; x: long :: f = x |
static Rop |
PUT_STATIC_OBJECT
f: static field spec of type Object; x: Object :: f = x |
static Rop |
PUT_STATIC_SHORT
f: static field spec of type short; x: short :: f = x |
static Rop |
REM_CONST_DOUBLE
r,x,c: double :: r = x % c; |
static Rop |
REM_CONST_FLOAT
r,x,c: float :: r = x % c; |
static Rop |
REM_CONST_INT
r,x,c: int :: r = x % c; |
static Rop |
REM_CONST_LONG
r,x,c: long :: r = x % c; |
static Rop |
REM_DOUBLE
r,x,y: double :: r = x % y; |
static Rop |
REM_FLOAT
r,x,y: float :: r = x % y; |
static Rop |
REM_INT
r,x,y: int :: r = x % y; |
static Rop |
REM_LONG
r,x,y: long :: r = x % y; |
static Rop |
RETURN_DOUBLE
x: double; return x |
static Rop |
RETURN_FLOAT
x: float; return x |
static Rop |
RETURN_INT
x: int; return x |
static Rop |
RETURN_LONG
x: long; return x |
static Rop |
RETURN_OBJECT
x: Object; return x |
static Rop |
RETURN_VOID
return void |
static Rop |
SHL_CONST_INT
r,x,c: int :: r = x << c; |
static Rop |
SHL_CONST_LONG
r,x: long; c: int :: r = x << c; |
static Rop |
SHL_INT
r,x,y: int :: r = x << y; |
static Rop |
SHL_LONG
r,x: long; y: int :: r = x << y; |
static Rop |
SHR_CONST_INT
r,x,c: int :: r = x >> c; |
static Rop |
SHR_CONST_LONG
r,x: long; c: int :: r = x >> c; |
static Rop |
SHR_INT
r,x,y: int :: r = x >> y; |
static Rop |
SHR_LONG
r,x: long; y: int :: r = x >> y; |
static Rop |
SUB_CONST_DOUBLE
r,x,c: double :: r = x - c; |
static Rop |
SUB_CONST_FLOAT
r,x,c: float :: r = x - c; |
static Rop |
SUB_CONST_INT
r,x,c: int :: r = x - c; |
static Rop |
SUB_CONST_LONG
r,x,c: long :: r = x - c; |
static Rop |
SUB_DOUBLE
r,x,y: double :: r = x - y; |
static Rop |
SUB_FLOAT
r,x,y: float :: r = x - y; |
static Rop |
SUB_INT
r,x,y: int :: r = x - y; |
static Rop |
SUB_LONG
r,x,y: long :: r = x - y; |
static Rop |
SWITCH
x: int :: goto switchtable[x] |
static Rop |
THROW
x: Throwable :: throw(x) |
static Rop |
TO_BYTE
r,x: int :: r = (x << 24) >> 24 (Java-style
convert int to byte) |
static Rop |
TO_CHAR
r,x: int :: r = x & 0xffff (Java-style
convert int to char) |
static Rop |
TO_SHORT
r,x: int :: r = (x << 16) >> 16 (Java-style
convert int to short) |
static Rop |
USHR_CONST_INT
r,x,c: int :: r = x >>> c; |
static Rop |
USHR_CONST_LONG
r,x: long; c: int :: r = x >>> c; |
static Rop |
USHR_INT
r,x,y: int :: r = x >>> y; |
static Rop |
USHR_LONG
r,x: long; y: int :: r = x >>> y; |
static Rop |
XOR_CONST_INT
r,x,c: int :: r = x ^ c; |
static Rop |
XOR_CONST_LONG
r,x,c: long :: r = x ^ c; |
static Rop |
XOR_INT
r,x,y: int :: r = x ^ y; |
static Rop |
XOR_LONG
r,x,y: long :: r = x ^ y; |
| Modifier and Type | Method and Description |
|---|---|
static Rop |
opAdd(TypeList types)
Returns the appropriate
add rop for the given
types. |
static Rop |
opAget(TypeBearer type)
Returns the appropriate
aget rop for the given type. |
static Rop |
opAnd(TypeList types)
Returns the appropriate
and rop for the given
types. |
static Rop |
opAput(TypeBearer type)
Returns the appropriate
aput rop for the given type. |
static Rop |
opCmpg(TypeBearer type)
Returns the appropriate
cmpg rop for the given type. |
static Rop |
opCmpl(TypeBearer type)
Returns the appropriate
cmpl rop for the given type. |
static Rop |
opConst(TypeBearer type)
Returns the appropriate
const rop for the given
type. |
static Rop |
opConv(TypeBearer dest,
TypeBearer source)
Returns the appropriate
conv rop for the given types. |
static Rop |
opDiv(TypeList types)
Returns the appropriate
div rop for the given
types. |
static Rop |
opFilledNewArray(TypeBearer arrayType,
int count)
Returns the appropriate
filled-new-array rop for the given
type. |
static Rop |
opGetField(TypeBearer type)
Returns the appropriate
get-field rop for the given
type. |
static Rop |
opGetStatic(TypeBearer type)
Returns the appropriate
get-static rop for the given
type. |
static Rop |
opIfEq(TypeList types)
Returns the appropriate
if-eq rop for the given
sources. |
static Rop |
opIfGe(TypeList types)
Returns the appropriate
if-ge rop for the given
sources. |
static Rop |
opIfGt(TypeList types)
Returns the appropriate
if-gt rop for the given
sources. |
static Rop |
opIfLe(TypeList types)
Returns the appropriate
if-le rop for the given
sources. |
static Rop |
opIfLt(TypeList types)
Returns the appropriate
if-lt rop for the given
sources. |
static Rop |
opIfNe(TypeList types)
Returns the appropriate
if-ne rop for the given
sources. |
static Rop |
opInvokeDirect(Prototype meth)
Returns the appropriate
invoke-direct rop for the
given type. |
static Rop |
opInvokeInterface(Prototype meth)
Returns the appropriate
invoke-interface rop for the
given type. |
static Rop |
opInvokePolymorphic(Prototype meth)
Returns the appropriate
invoke-polymorphic rop for the
given type. |
static Rop |
opInvokeStatic(Prototype meth)
Returns the appropriate
invoke-static rop for the
given type. |
static Rop |
opInvokeSuper(Prototype meth)
Returns the appropriate
invoke-super rop for the
given type. |
static Rop |
opInvokeVirtual(Prototype meth)
Returns the appropriate
invoke-virtual rop for the
given type. |
static Rop |
opMarkLocal(TypeBearer type)
Returns the appropriate
mark-local rop for the given type. |
static Rop |
opMove(TypeBearer type)
Returns the appropriate
move rop for the given type. |
static Rop |
opMoveException(TypeBearer type)
Returns the appropriate
move-exception rop for the
given type. |
static Rop |
opMoveParam(TypeBearer type)
Returns the appropriate
move-param rop for the
given type. |
static Rop |
opMoveResult(TypeBearer type)
Returns the appropriate
move-result rop for the
given type. |
static Rop |
opMoveResultPseudo(TypeBearer type)
Returns the appropriate
move-result-pseudo rop for the
given type. |
static Rop |
opMul(TypeList types)
Returns the appropriate
mul rop for the given
types. |
static Rop |
opNeg(TypeBearer type)
Returns the appropriate
neg rop for the given type. |
static Rop |
opNewArray(TypeBearer arrayType)
Returns the appropriate
new-array rop for the given
type. |
static Rop |
opNot(TypeBearer type)
Returns the appropriate
not rop for the given type. |
static Rop |
opOr(TypeList types)
Returns the appropriate
or rop for the given
types. |
static Rop |
opPutField(TypeBearer type)
Returns the appropriate
put-field rop for the given
type. |
static Rop |
opPutStatic(TypeBearer type)
Returns the appropriate
put-static rop for the given
type. |
static Rop |
opRem(TypeList types)
Returns the appropriate
rem rop for the given
types. |
static Rop |
opReturn(TypeBearer type)
Returns the appropriate
return rop for the given type. |
static Rop |
opShl(TypeList types)
Returns the appropriate
shl rop for the given
types. |
static Rop |
opShr(TypeList types)
Returns the appropriate
shr rop for the given
types. |
static Rop |
opSub(TypeList types)
Returns the appropriate
sub rop for the given
types. |
static Rop |
opUshr(TypeList types)
Returns the appropriate
ushr rop for the given
types. |
static Rop |
opXor(TypeList types)
Returns the appropriate
xor rop for the given
types. |
static Rop |
ropFor(int opcode,
TypeBearer dest,
TypeList sources,
Constant cst)
Returns the appropriate rop for the given opcode, destination,
and sources.
|
public static final Rop NOP
nop()public static final Rop MOVE_INT
r,x: int :: r = x;public static final Rop MOVE_LONG
r,x: long :: r = x;public static final Rop MOVE_FLOAT
r,x: float :: r = x;public static final Rop MOVE_DOUBLE
r,x: double :: r = x;public static final Rop MOVE_OBJECT
r,x: Object :: r = x;public static final Rop MOVE_RETURN_ADDRESS
r,x: ReturnAddress :: r = x;
Note that this rop-form instruction has no dex-form equivilent and
must be removed before the dex conversion.public static final Rop MOVE_PARAM_INT
r,param(x): int :: r = param(x);public static final Rop MOVE_PARAM_LONG
r,param(x): long :: r = param(x);public static final Rop MOVE_PARAM_FLOAT
r,param(x): float :: r = param(x);public static final Rop MOVE_PARAM_DOUBLE
r,param(x): double :: r = param(x);public static final Rop MOVE_PARAM_OBJECT
r,param(x): Object :: r = param(x);public static final Rop CONST_INT
r, literal: int :: r = literal;public static final Rop CONST_LONG
r, literal: long :: r = literal;public static final Rop CONST_FLOAT
r, literal: float :: r = literal;public static final Rop CONST_DOUBLE
r, literal: double :: r = literal;public static final Rop CONST_OBJECT
r, literal: Object :: r = literal;public static final Rop CONST_OBJECT_NOTHROW
r, literal: Object :: r = literal;public static final Rop GOTO
goto labelpublic static final Rop IF_EQZ_INT
x: int :: if (x == 0) goto labelpublic static final Rop IF_NEZ_INT
x: int :: if (x != 0) goto labelpublic static final Rop IF_LTZ_INT
x: int :: if (x < 0) goto labelpublic static final Rop IF_GEZ_INT
x: int :: if (x >= 0) goto labelpublic static final Rop IF_LEZ_INT
x: int :: if (x <= 0) goto labelpublic static final Rop IF_GTZ_INT
x: int :: if (x > 0) goto labelpublic static final Rop IF_EQZ_OBJECT
x: Object :: if (x == null) goto labelpublic static final Rop IF_NEZ_OBJECT
x: Object :: if (x != null) goto labelpublic static final Rop IF_EQ_INT
x,y: int :: if (x == y) goto labelpublic static final Rop IF_NE_INT
x,y: int :: if (x != y) goto labelpublic static final Rop IF_LT_INT
x,y: int :: if (x < y) goto labelpublic static final Rop IF_GE_INT
x,y: int :: if (x >= y) goto labelpublic static final Rop IF_LE_INT
x,y: int :: if (x <= y) goto labelpublic static final Rop IF_GT_INT
x,y: int :: if (x > y) goto labelpublic static final Rop IF_EQ_OBJECT
x,y: Object :: if (x == y) goto labelpublic static final Rop IF_NE_OBJECT
x,y: Object :: if (x != y) goto labelpublic static final Rop SWITCH
x: int :: goto switchtable[x]public static final Rop ADD_INT
r,x,y: int :: r = x + y;public static final Rop ADD_LONG
r,x,y: long :: r = x + y;public static final Rop ADD_FLOAT
r,x,y: float :: r = x + y;public static final Rop ADD_DOUBLE
r,x,y: double :: r = x + y;public static final Rop SUB_INT
r,x,y: int :: r = x - y;public static final Rop SUB_LONG
r,x,y: long :: r = x - y;public static final Rop SUB_FLOAT
r,x,y: float :: r = x - y;public static final Rop SUB_DOUBLE
r,x,y: double :: r = x - y;public static final Rop MUL_INT
r,x,y: int :: r = x * y;public static final Rop MUL_LONG
r,x,y: long :: r = x * y;public static final Rop MUL_FLOAT
r,x,y: float :: r = x * y;public static final Rop MUL_DOUBLE
r,x,y: double :: r = x * y;public static final Rop DIV_INT
r,x,y: int :: r = x / y;public static final Rop DIV_LONG
r,x,y: long :: r = x / y;public static final Rop DIV_FLOAT
r,x,y: float :: r = x / y;public static final Rop DIV_DOUBLE
r,x,y: double :: r = x / y;public static final Rop REM_INT
r,x,y: int :: r = x % y;public static final Rop REM_LONG
r,x,y: long :: r = x % y;public static final Rop REM_FLOAT
r,x,y: float :: r = x % y;public static final Rop REM_DOUBLE
r,x,y: double :: r = x % y;public static final Rop NEG_INT
r,x: int :: r = -x;public static final Rop NEG_LONG
r,x: long :: r = -x;public static final Rop NEG_FLOAT
r,x: float :: r = -x;public static final Rop NEG_DOUBLE
r,x: double :: r = -x;public static final Rop AND_INT
r,x,y: int :: r = x & y;public static final Rop AND_LONG
r,x,y: long :: r = x & y;public static final Rop OR_INT
r,x,y: int :: r = x | y;public static final Rop OR_LONG
r,x,y: long :: r = x | y;public static final Rop XOR_INT
r,x,y: int :: r = x ^ y;public static final Rop XOR_LONG
r,x,y: long :: r = x ^ y;public static final Rop SHL_INT
r,x,y: int :: r = x << y;public static final Rop SHL_LONG
r,x: long; y: int :: r = x << y;public static final Rop SHR_INT
r,x,y: int :: r = x >> y;public static final Rop SHR_LONG
r,x: long; y: int :: r = x >> y;public static final Rop USHR_INT
r,x,y: int :: r = x >>> y;public static final Rop USHR_LONG
r,x: long; y: int :: r = x >>> y;public static final Rop NOT_INT
r,x: int :: r = ~x;public static final Rop NOT_LONG
r,x: long :: r = ~x;public static final Rop ADD_CONST_INT
r,x,c: int :: r = x + c;public static final Rop ADD_CONST_LONG
r,x,c: long :: r = x + c;public static final Rop ADD_CONST_FLOAT
r,x,c: float :: r = x + c;public static final Rop ADD_CONST_DOUBLE
r,x,c: double :: r = x + c;public static final Rop SUB_CONST_INT
r,x,c: int :: r = x - c;public static final Rop SUB_CONST_LONG
r,x,c: long :: r = x - c;public static final Rop SUB_CONST_FLOAT
r,x,c: float :: r = x - c;public static final Rop SUB_CONST_DOUBLE
r,x,c: double :: r = x - c;public static final Rop MUL_CONST_INT
r,x,c: int :: r = x * c;public static final Rop MUL_CONST_LONG
r,x,c: long :: r = x * c;public static final Rop MUL_CONST_FLOAT
r,x,c: float :: r = x * c;public static final Rop MUL_CONST_DOUBLE
r,x,c: double :: r = x * c;public static final Rop DIV_CONST_INT
r,x,c: int :: r = x / c;public static final Rop DIV_CONST_LONG
r,x,c: long :: r = x / c;public static final Rop DIV_CONST_FLOAT
r,x,c: float :: r = x / c;public static final Rop DIV_CONST_DOUBLE
r,x,c: double :: r = x / c;public static final Rop REM_CONST_INT
r,x,c: int :: r = x % c;public static final Rop REM_CONST_LONG
r,x,c: long :: r = x % c;public static final Rop REM_CONST_FLOAT
r,x,c: float :: r = x % c;public static final Rop REM_CONST_DOUBLE
r,x,c: double :: r = x % c;public static final Rop AND_CONST_INT
r,x,c: int :: r = x & c;public static final Rop AND_CONST_LONG
r,x,c: long :: r = x & c;public static final Rop OR_CONST_INT
r,x,c: int :: r = x | c;public static final Rop OR_CONST_LONG
r,x,c: long :: r = x | c;public static final Rop XOR_CONST_INT
r,x,c: int :: r = x ^ c;public static final Rop XOR_CONST_LONG
r,x,c: long :: r = x ^ c;public static final Rop SHL_CONST_INT
r,x,c: int :: r = x << c;public static final Rop SHL_CONST_LONG
r,x: long; c: int :: r = x << c;public static final Rop SHR_CONST_INT
r,x,c: int :: r = x >> c;public static final Rop SHR_CONST_LONG
r,x: long; c: int :: r = x >> c;public static final Rop USHR_CONST_INT
r,x,c: int :: r = x >>> c;public static final Rop USHR_CONST_LONG
r,x: long; c: int :: r = x >>> c;public static final Rop CMPL_LONG
r: int; x,y: long :: r = cmp(x, y);public static final Rop CMPL_FLOAT
r: int; x,y: float :: r = cmpl(x, y);public static final Rop CMPL_DOUBLE
r: int; x,y: double :: r = cmpl(x, y);public static final Rop CMPG_FLOAT
r: int; x,y: float :: r = cmpg(x, y);public static final Rop CMPG_DOUBLE
r: int; x,y: double :: r = cmpg(x, y);public static final Rop CONV_L2I
r: int; x: long :: r = (int) xpublic static final Rop CONV_F2I
r: int; x: float :: r = (int) xpublic static final Rop CONV_D2I
r: int; x: double :: r = (int) xpublic static final Rop CONV_I2L
r: long; x: int :: r = (long) xpublic static final Rop CONV_F2L
r: long; x: float :: r = (long) xpublic static final Rop CONV_D2L
r: long; x: double :: r = (long) xpublic static final Rop CONV_I2F
r: float; x: int :: r = (float) xpublic static final Rop CONV_L2F
r: float; x: long :: r = (float) xpublic static final Rop CONV_D2F
r: float; x: double :: r = (float) xpublic static final Rop CONV_I2D
r: double; x: int :: r = (double) xpublic static final Rop CONV_L2D
r: double; x: long :: r = (double) xpublic static final Rop CONV_F2D
r: double; x: float :: r = (double) xpublic static final Rop TO_BYTE
r,x: int :: r = (x << 24) >> 24 (Java-style
convert int to byte)public static final Rop TO_CHAR
r,x: int :: r = x & 0xffff (Java-style
convert int to char)public static final Rop TO_SHORT
r,x: int :: r = (x << 16) >> 16 (Java-style
convert int to short)public static final Rop RETURN_VOID
return voidpublic static final Rop RETURN_INT
x: int; return xpublic static final Rop RETURN_LONG
x: long; return xpublic static final Rop RETURN_FLOAT
x: float; return xpublic static final Rop RETURN_DOUBLE
x: double; return xpublic static final Rop RETURN_OBJECT
x: Object; return xpublic static final Rop ARRAY_LENGTH
T: any type; r: int; x: T[]; :: r = x.lengthpublic static final Rop THROW
x: Throwable :: throw(x)public static final Rop MONITOR_ENTER
x: Object :: monitorenter(x)public static final Rop MONITOR_EXIT
x: Object :: monitorexit(x)public static final Rop AGET_INT
r,y: int; x: int[] :: r = x[y]public static final Rop AGET_LONG
r: long; x: long[]; y: int :: r = x[y]public static final Rop AGET_FLOAT
r: float; x: float[]; y: int :: r = x[y]public static final Rop AGET_DOUBLE
r: double; x: double[]; y: int :: r = x[y]public static final Rop AGET_OBJECT
r: Object; x: Object[]; y: int :: r = x[y]public static final Rop AGET_BOOLEAN
r: boolean; x: boolean[]; y: int :: r = x[y]public static final Rop AGET_BYTE
r: byte; x: byte[]; y: int :: r = x[y]public static final Rop AGET_CHAR
r: char; x: char[]; y: int :: r = x[y]public static final Rop AGET_SHORT
r: short; x: short[]; y: int :: r = x[y]public static final Rop APUT_INT
x,z: int; y: int[] :: y[z] = xpublic static final Rop APUT_LONG
x: long; y: long[]; z: int :: y[z] = xpublic static final Rop APUT_FLOAT
x: float; y: float[]; z: int :: y[z] = xpublic static final Rop APUT_DOUBLE
x: double; y: double[]; z: int :: y[z] = xpublic static final Rop APUT_OBJECT
x: Object; y: Object[]; z: int :: y[z] = xpublic static final Rop APUT_BOOLEAN
x: boolean; y: boolean[]; z: int :: y[z] = xpublic static final Rop APUT_BYTE
x: byte; y: byte[]; z: int :: y[z] = xpublic static final Rop APUT_CHAR
x: char; y: char[]; z: int :: y[z] = xpublic static final Rop APUT_SHORT
x: short; y: short[]; z: int :: y[z] = xpublic static final Rop NEW_INSTANCE
T: any non-array object type :: r =
alloc(T) (allocate heap space for an object)public static final Rop NEW_ARRAY_INT
r: int[]; x: int :: r = new int[x]public static final Rop NEW_ARRAY_LONG
r: long[]; x: int :: r = new long[x]public static final Rop NEW_ARRAY_FLOAT
r: float[]; x: int :: r = new float[x]public static final Rop NEW_ARRAY_DOUBLE
r: double[]; x: int :: r = new double[x]public static final Rop NEW_ARRAY_BOOLEAN
r: boolean[]; x: int :: r = new boolean[x]public static final Rop NEW_ARRAY_BYTE
r: byte[]; x: int :: r = new byte[x]public static final Rop NEW_ARRAY_CHAR
r: char[]; x: int :: r = new char[x]public static final Rop NEW_ARRAY_SHORT
r: short[]; x: int :: r = new short[x]public static final Rop CHECK_CAST
T: any non-array object type; x: Object :: (T) x (can
throw ClassCastException)public static final Rop INSTANCE_OF
T: any non-array object type; x: Object :: x instanceof
T. Note: This is listed as throwing Error
explicitly because the op can throw, but there are no
other predefined exceptions for it.public static final Rop GET_FIELD_INT
r: int; x: Object; f: instance field spec of
type int :: r = x.fpublic static final Rop GET_FIELD_LONG
r: long; x: Object; f: instance field spec of
type long :: r = x.fpublic static final Rop GET_FIELD_FLOAT
r: float; x: Object; f: instance field spec of
type float :: r = x.fpublic static final Rop GET_FIELD_DOUBLE
r: double; x: Object; f: instance field spec of
type double :: r = x.fpublic static final Rop GET_FIELD_OBJECT
r: Object; x: Object; f: instance field spec of
type Object :: r = x.fpublic static final Rop GET_FIELD_BOOLEAN
r: boolean; x: Object; f: instance field spec of
type boolean :: r = x.fpublic static final Rop GET_FIELD_BYTE
r: byte; x: Object; f: instance field spec of
type byte :: r = x.fpublic static final Rop GET_FIELD_CHAR
r: char; x: Object; f: instance field spec of
type char :: r = x.fpublic static final Rop GET_FIELD_SHORT
r: short; x: Object; f: instance field spec of
type short :: r = x.fpublic static final Rop GET_STATIC_INT
r: int; f: static field spec of type int :: r = fpublic static final Rop GET_STATIC_LONG
r: long; f: static field spec of type long :: r = fpublic static final Rop GET_STATIC_FLOAT
r: float; f: static field spec of type float :: r = fpublic static final Rop GET_STATIC_DOUBLE
r: double; f: static field spec of type double :: r = fpublic static final Rop GET_STATIC_OBJECT
r: Object; f: static field spec of type Object :: r = fpublic static final Rop GET_STATIC_BOOLEAN
r: boolean; f: static field spec of type boolean :: r = fpublic static final Rop GET_STATIC_BYTE
r: byte; f: static field spec of type byte :: r = fpublic static final Rop GET_STATIC_CHAR
r: char; f: static field spec of type char :: r = fpublic static final Rop GET_STATIC_SHORT
r: short; f: static field spec of type short :: r = fpublic static final Rop PUT_FIELD_INT
x: int; y: Object; f: instance field spec of type
int :: y.f = xpublic static final Rop PUT_FIELD_LONG
x: long; y: Object; f: instance field spec of type
long :: y.f = xpublic static final Rop PUT_FIELD_FLOAT
x: float; y: Object; f: instance field spec of type
float :: y.f = xpublic static final Rop PUT_FIELD_DOUBLE
x: double; y: Object; f: instance field spec of type
double :: y.f = xpublic static final Rop PUT_FIELD_OBJECT
x: Object; y: Object; f: instance field spec of type
Object :: y.f = xpublic static final Rop PUT_FIELD_BOOLEAN
x: int; y: Object; f: instance field spec of type
boolean :: y.f = xpublic static final Rop PUT_FIELD_BYTE
x: int; y: Object; f: instance field spec of type
byte :: y.f = xpublic static final Rop PUT_FIELD_CHAR
x: int; y: Object; f: instance field spec of type
char :: y.f = xpublic static final Rop PUT_FIELD_SHORT
x: int; y: Object; f: instance field spec of type
short :: y.f = xpublic static final Rop PUT_STATIC_INT
f: static field spec of type int; x: int :: f = xpublic static final Rop PUT_STATIC_LONG
f: static field spec of type long; x: long :: f = xpublic static final Rop PUT_STATIC_FLOAT
f: static field spec of type float; x: float :: f = xpublic static final Rop PUT_STATIC_DOUBLE
f: static field spec of type double; x: double :: f = xpublic static final Rop PUT_STATIC_OBJECT
f: static field spec of type Object; x: Object :: f = xpublic static final Rop PUT_STATIC_BOOLEAN
f: static field spec of type boolean; x: boolean :: f =
xpublic static final Rop PUT_STATIC_BYTE
f: static field spec of type byte; x: byte :: f = xpublic static final Rop PUT_STATIC_CHAR
f: static field spec of type char; x: char :: f = xpublic static final Rop PUT_STATIC_SHORT
f: static field spec of type short; x: short :: f = xpublic static final Rop MARK_LOCAL_INT
x: Int :: local variable begins in xpublic static final Rop MARK_LOCAL_LONG
x: Long :: local variable begins in xpublic static final Rop MARK_LOCAL_FLOAT
x: Float :: local variable begins in xpublic static final Rop MARK_LOCAL_DOUBLE
x: Double :: local variable begins in xpublic static final Rop MARK_LOCAL_OBJECT
x: Object :: local variable begins in xpublic static final Rop FILL_ARRAY_DATA
T: Any primitive type; v0..vx: T :: {v0, ..., vx}public static Rop ropFor(int opcode, TypeBearer dest, TypeList sources, Constant cst)
Note: This method does not do complete error checking on its arguments, and so it may return an instance which seemed "right enough" even though in actuality the passed arguments don't quite match what is returned. TODO: Revisit this issue.
opcode - the opcodedest - non-null; destination (result) type, or
Type.VOID if nonesources - non-null; list of source typescst - null-ok; associated constant, if anynon-null; an appropriate instancepublic static Rop opMove(TypeBearer type)
move rop for the given type. The
result is a shared instance.type - non-null; type of value being movednon-null; an appropriate instancepublic static Rop opMoveParam(TypeBearer type)
move-param rop for the
given type. The result is a shared instance.type - non-null; type of value being movednon-null; an appropriate instancepublic static Rop opMoveException(TypeBearer type)
move-exception rop for the
given type. The result may be a shared instance.type - non-null; type of the exceptionnon-null; an appropriate instancepublic static Rop opMoveResult(TypeBearer type)
move-result rop for the
given type. The result may be a shared instance.type - non-null; type of the parameternon-null; an appropriate instancepublic static Rop opMoveResultPseudo(TypeBearer type)
move-result-pseudo rop for the
given type. The result may be a shared instance.type - non-null; type of the parameternon-null; an appropriate instancepublic static Rop opConst(TypeBearer type)
const rop for the given
type. The result is a shared instance.type - non-null; type of the constantnon-null; an appropriate instancepublic static Rop opIfEq(TypeList types)
if-eq rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opIfNe(TypeList types)
if-ne rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opIfLt(TypeList types)
if-lt rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opIfGe(TypeList types)
if-ge rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opIfGt(TypeList types)
if-gt rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opIfLe(TypeList types)
if-le rop for the given
sources. The result is a shared instance.types - non-null; source typesnon-null; an appropriate instancepublic static Rop opAdd(TypeList types)
add rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opSub(TypeList types)
sub rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opMul(TypeList types)
mul rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opDiv(TypeList types)
div rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opRem(TypeList types)
rem rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opAnd(TypeList types)
and rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opOr(TypeList types)
or rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opXor(TypeList types)
xor rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opShl(TypeList types)
shl rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opShr(TypeList types)
shr rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opUshr(TypeList types)
ushr rop for the given
types. The result is a shared instance.types - non-null; types of the sourcesnon-null; an appropriate instancepublic static Rop opNeg(TypeBearer type)
neg rop for the given type. The
result is a shared instance.type - non-null; type of value being operated onnon-null; an appropriate instancepublic static Rop opNot(TypeBearer type)
not rop for the given type. The
result is a shared instance.type - non-null; type of value being operated onnon-null; an appropriate instancepublic static Rop opCmpl(TypeBearer type)
cmpl rop for the given type. The
result is a shared instance.type - non-null; type of value being comparednon-null; an appropriate instancepublic static Rop opCmpg(TypeBearer type)
cmpg rop for the given type. The
result is a shared instance.type - non-null; type of value being comparednon-null; an appropriate instancepublic static Rop opConv(TypeBearer dest, TypeBearer source)
conv rop for the given types. The
result is a shared instance.dest - non-null; target value typesource - non-null; source value typenon-null; an appropriate instancepublic static Rop opReturn(TypeBearer type)
return rop for the given type. The
result is a shared instance.type - non-null; type of value being returnednon-null; an appropriate instancepublic static Rop opAget(TypeBearer type)
aget rop for the given type. The
result is a shared instance.type - non-null; element type of array being accessednon-null; an appropriate instancepublic static Rop opAput(TypeBearer type)
aput rop for the given type. The
result is a shared instance.type - non-null; element type of array being accessednon-null; an appropriate instancepublic static Rop opNewArray(TypeBearer arrayType)
new-array rop for the given
type. The result is a shared instance.arrayType - non-null; array type of array being creatednon-null; an appropriate instancepublic static Rop opFilledNewArray(TypeBearer arrayType, int count)
filled-new-array rop for the given
type. The result may be a shared instance.arrayType - non-null; type of array being createdcount - count >= 0; number of elements that the array should havenon-null; an appropriate instancepublic static Rop opGetField(TypeBearer type)
get-field rop for the given
type. The result is a shared instance.type - non-null; type of the field in questionnon-null; an appropriate instancepublic static Rop opPutField(TypeBearer type)
put-field rop for the given
type. The result is a shared instance.type - non-null; type of the field in questionnon-null; an appropriate instancepublic static Rop opGetStatic(TypeBearer type)
get-static rop for the given
type. The result is a shared instance.type - non-null; type of the field in questionnon-null; an appropriate instancepublic static Rop opPutStatic(TypeBearer type)
put-static rop for the given
type. The result is a shared instance.type - non-null; type of the field in questionnon-null; an appropriate instancepublic static Rop opInvokeStatic(Prototype meth)
invoke-static rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the methodnon-null; an appropriate instancepublic static Rop opInvokeVirtual(Prototype meth)
invoke-virtual rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the method, including the
this parameternon-null; an appropriate instancepublic static Rop opInvokeSuper(Prototype meth)
invoke-super rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the method, including the
this parameternon-null; an appropriate instancepublic static Rop opInvokeDirect(Prototype meth)
invoke-direct rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the method, including the
this parameternon-null; an appropriate instancepublic static Rop opInvokeInterface(Prototype meth)
invoke-interface rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the method, including the
this parameternon-null; an appropriate instancepublic static Rop opInvokePolymorphic(Prototype meth)
invoke-polymorphic rop for the
given type. The result is typically a newly-allocated instance.meth - non-null; descriptor of the method, including the
this parameternon-null; an appropriate instancepublic static Rop opMarkLocal(TypeBearer type)
mark-local rop for the given type.
The result is a shared instance.type - non-null; type of value being markednon-null; an appropriate instanceCopyright © 2020. All Rights Reserved.