use of org.mapleir.ir.code.Expr in project maple-ir by LLVM-but-worse.
the class GenerationPass method _dup.
protected void _dup() {
// prestack: var0 (height = 1)
// poststack: var1, var0
// assignments: var1 = var0(initial)
currentStack.assertHeights(DUP_HEIGHTS);
int baseHeight = currentStack.height();
save_stack(false);
Expr var0 = pop();
// var1 = var0
Type var1Type = assign_stack(baseHeight, var0);
// push var0
push(load_stack(baseHeight - 1, var0.getType()));
// push var1
push(load_stack(baseHeight, var1Type));
}
use of org.mapleir.ir.code.Expr in project maple-ir by LLVM-but-worse.
the class GenerationPass method _arithmetic.
protected void _arithmetic(Operator op) {
save_stack(false);
Expr e = new ArithmeticExpr(pop(), pop(), op);
int index = currentStack.height();
Type type = assign_stack(index, e);
push(load_stack(index, type));
}
use of org.mapleir.ir.code.Expr in project maple-ir by LLVM-but-worse.
the class GenerationPass method _dup2_x1.
protected void _dup2_x1() {
Type topType = peek().getType();
int baseHeight = currentStack.height();
save_stack(false);
if (topType.getSize() == 2) {
// prestack: var2, var0 (height = 3)
// poststack: var3, var2, var0
// assignments: var0 = var2(initial)
// assignemnts: var2 = var0(initial)
// assignments: var3 = var2(initial)
currentStack.assertHeights(DUP2_X1_64_HEIGHTS);
Expr var2 = pop();
Expr var0 = pop();
// var4 = var0(initial)
Type var4Type = assign_stack(baseHeight + 1, var0);
// var3 = var2(initial)
Type var3Type = assign_stack(baseHeight - 0, var2);
// var0 = var2(initial)
Type var0Type = assign_stack(baseHeight - 3, var2);
// var2 = var4 = var0(initial)
Type var2Type = assign_stack(baseHeight - 1, load_stack(baseHeight + 1, var4Type));
// push var0
push(load_stack(baseHeight - 3, var0Type));
// push var2
push(load_stack(baseHeight - 1, var2Type));
// push var3
push(load_stack(baseHeight - 0, var3Type));
} else {
// prestack: var2, var1, var0 (height = 3)
// poststack: var4, var3, var2, var1, var0
// assignments: var0 = var1(initial)
// assignments: var1 = var2(initial)
// assignments: var2 = var0(initial)
// assignments: var3 = var1(initial)
// assignments: var4 = var2(initial)
currentStack.assertHeights(DUP2_X1_32_HEIGHTS);
Expr var2 = pop();
Expr var1 = pop();
Expr var0 = pop();
// var5 = var0(initial)
Type var5Type = assign_stack(baseHeight + 2, var0);
// var0 = var1(initial)
Type var0Type = assign_stack(baseHeight - 3, var1);
// var1 = var2(initial)
Type var1Type = assign_stack(baseHeight - 2, var2);
// var3 = var1(initial)
Type var3Type = assign_stack(baseHeight + 0, var1);
// var4 = var2(initial)
Type var4Type = assign_stack(baseHeight + 1, var2);
// var2 = var5 = var0(initial)
Type var2Type = assign_stack(baseHeight - 1, load_stack(baseHeight + 2, var5Type));
// push var0
push(load_stack(baseHeight - 3, var0Type));
// push var1
push(load_stack(baseHeight - 2, var1Type));
// push var2
push(load_stack(baseHeight - 1, var2Type));
// push var3
push(load_stack(baseHeight + 0, var3Type));
// push var4
push(load_stack(baseHeight + 1, var4Type));
}
}
use of org.mapleir.ir.code.Expr in project maple-ir by LLVM-but-worse.
the class GenerationPass method _dup2.
protected void _dup2() {
int baseHeight = currentStack.height();
save_stack(false);
if (peek().getType().getSize() == 2) {
// prestack: var0 (height = 2)
// poststack: var2, var0
// assignments: var2 = var0
Expr var0 = pop();
// var2 = var0
Type var2Type = assign_stack(baseHeight, var0);
// push var0
push(load_stack(baseHeight - 2, var0.getType()));
// push var2
push(load_stack(baseHeight, var2Type));
} else {
// prestack: var1, var0 (height = 2)
// poststack: var3, var2, var1, var0
// assignments: var2 = var0(initial)
// assignments: var3 = var1(initial)
currentStack.assertHeights(DUP2_32_HEIGHTS);
Expr var1 = pop();
Expr var0 = pop();
// var2 = var0
Type var2Type = assign_stack(baseHeight + 0, var0);
// var3 = var1
Type var3Type = assign_stack(baseHeight + 1, var1);
// push var0
push(load_stack(baseHeight - 2, var0.getType()));
// push var1
push(load_stack(baseHeight - 1, var1.getType()));
// push var2
push(load_stack(baseHeight + 0, var2Type));
// push var3
push(load_stack(baseHeight + 1, var3Type));
}
}
use of org.mapleir.ir.code.Expr in project maple-ir by LLVM-but-worse.
the class GenerationPass method _swap.
protected void _swap() {
// prestack: var1, var0 (height = 2)
// poststack: var1, var0
// assignments: var0 = var1 (initial)
// assignments: var1 = var0 (initial)
currentStack.assertHeights(SWAP_HEIGHTS);
int baseHeight = currentStack.height();
save_stack(false);
Expr var1 = pop();
Expr var0 = pop();
// var2 = var0
Type var2Type = assign_stack(baseHeight + 0, var0);
// var3 = var1
Type var3Type = assign_stack(baseHeight + 1, var1);
// var0 = var3 = var1(initial)
Type var0Type = assign_stack(baseHeight - 2, load_stack(baseHeight + 1, var3Type));
// var1 = var2 = var0(initial)
Type var1Type = assign_stack(baseHeight - 1, load_stack(baseHeight + 0, var2Type));
// push var0
push(load_stack(baseHeight - 2, var0Type));
// push var1
push(load_stack(baseHeight - 1, var1Type));
}
Aggregations