use of net.runelite.asm.execution.Stack in project runelite by runelite.
the class Dup_X1 method execute.
@Override
public InstructionContext execute(Frame frame) {
InstructionContext ins = new InstructionContext(this, frame);
Stack stack = frame.getStack();
StackContext one = stack.pop();
StackContext two = stack.pop();
ins.pop(one, two);
StackContext ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(ctx);
ins.push(ctx);
ctx = new StackContext(ins, two.getType(), two.getValue());
stack.push(ctx);
ins.push(ctx);
ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(ctx);
ins.push(ctx);
return ins;
}
use of net.runelite.asm.execution.Stack in project runelite by runelite.
the class F2D method execute.
@Override
public InstructionContext execute(Frame frame) {
InstructionContext ins = new InstructionContext(this, frame);
Stack stack = frame.getStack();
StackContext object = stack.pop();
ins.pop(object);
StackContext ctx = new StackContext(ins, Type.DOUBLE, object.getValue().cast(double.class));
stack.push(ctx);
ins.push(ctx);
return ins;
}
use of net.runelite.asm.execution.Stack in project runelite by runelite.
the class DSub method execute.
@Override
public InstructionContext execute(Frame frame) {
InstructionContext ins = new InstructionContext(this, frame);
Stack stack = frame.getStack();
StackContext two = stack.pop();
StackContext one = stack.pop();
ins.pop(two, one);
Value result = Value.UNKNOWN;
if (!two.getValue().isUnknownOrNull() && !one.getValue().isUnknownOrNull()) {
double d2 = (double) two.getValue().getValue(), d1 = (double) one.getValue().getValue();
result = new Value(d1 - d2);
}
StackContext ctx = new StackContext(ins, Type.DOUBLE, result);
stack.push(ctx);
ins.push(ctx);
return ins;
}
use of net.runelite.asm.execution.Stack in project runelite by runelite.
the class Dup2 method execute.
@Override
public InstructionContext execute(Frame frame) {
InstructionContext ins = new InstructionContext(this, frame);
Stack stack = frame.getStack();
StackContext one = stack.pop();
StackContext two = null;
if (one.getType().getSize() == 1)
two = stack.pop();
ins.pop(one);
if (two != null)
ins.pop(two);
if (two != null) {
StackContext ctx = new StackContext(ins, two.getType(), two.getValue());
stack.push(ctx);
ins.push(ctx);
}
StackContext ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(one);
ins.push(ctx);
if (two != null) {
ctx = new StackContext(ins, two.getType(), two.getValue());
stack.push(ctx);
ins.push(ctx);
}
ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(one);
ins.push(ctx);
return ins;
}
use of net.runelite.asm.execution.Stack in project runelite by runelite.
the class Dup2_X2 method execute.
@Override
public InstructionContext execute(Frame frame) {
InstructionContext ins = new InstructionContext(this, frame);
Stack stack = frame.getStack();
StackContext one = stack.pop();
StackContext two = null;
if (one.getType().getSize() == 1)
two = stack.pop();
StackContext three = stack.pop();
StackContext four = null;
if (one.getType().getSize() == 1)
four = stack.pop();
ins.pop(one);
if (two != null)
ins.pop(two);
ins.pop(three);
if (four != null)
ins.pop(four);
if (two != null) {
StackContext ctx = new StackContext(ins, two.getType(), two.getValue());
stack.push(ctx);
ins.push(ctx);
}
StackContext ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(one);
ins.push(ctx);
if (four != null) {
ctx = new StackContext(ins, four.getType(), four.getValue());
stack.push(ctx);
ins.push(ctx);
}
ctx = new StackContext(ins, three.getType(), three.getValue());
stack.push(one);
ins.push(ctx);
if (two != null) {
ctx = new StackContext(ins, two.getType(), two.getValue());
stack.push(ctx);
ins.push(ctx);
}
ctx = new StackContext(ins, one.getType(), one.getValue());
stack.push(one);
ins.push(ctx);
return ins;
}
Aggregations