2op_and
Source Code
class TestIf {
int f;
int h;
public void main() {
int x;
x = 40;
if ((20 < x) && (x < 50))
print(48);
else
print(49);
}
}







Results
Assembly
# SPILL %1
# SPILL %4
.globl main
main:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
movq $16, %rax
movq %rax, %rdi
callq malloc@PLT
testq %rax, %rax
jz fail_exit
pushq %rax
callq __LABEL0
popq %rax
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL0:
pushq %rbp # Save old EBP
movq %rsp, %rbp # Save old ESP
addq $-24, %rsp
##MovL %0 <- 40
movq $40, %rax
##MoMo %1 <- %0
##MovL %11 <- -8
movq $-8, %rbx
##MoOp %11 <- %11,%-1
addq %rbp, %rbx
##RToM #11 <- %1
movq %rax, (%rbx)
##MovL %2 <- 20
movq $20, %rax
##MovL %11 <- -8
movq $-8, %rbx
##MoOp %11 <- %11,%-1
addq %rbp, %rbx
##MToR %11 <- #11
movq (%rbx), %rbx
##MoMo %3 <- %11
##MoOp %4 <- %2,%3
cmpq %rax, %rbx
setle %dil
xorb $1, %dil
movzbq %dil, %rbx
##MovL %12 <- -16
movq $-16, %rax
##MoOp %12 <- %12,%-1
addq %rbp, %rax
##RToM #12 <- %4
movq %rbx, (%rax)
##MovL %11 <- -8
movq $-8, %rbx
##MoOp %11 <- %11,%-1
addq %rbp, %rbx
##MToR %11 <- #11
movq (%rbx), %rbx
##MoMo %5 <- %11
##MovL %6 <- 50
movq $50, %rax
##MoOp %7 <- %5,%6
cmpq %rbx, %rax
setle %dil
xorb $1, %dil
movzbq %dil, %rbx
##MovL %12 <- -16
movq $-16, %rax
##MoOp %12 <- %12,%-1
addq %rbp, %rax
##MToR %12 <- #12
movq (%rax), %rax
##MoOp %8 <- %12,%7
andq %rbx, %rax
andq $1, %rax
##JuCo %8
testq %rax, %rax
jnz __LABEL1
__LABEL2:
##MovL %9 <- 49
movq $49, %rax
##Prin %9
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##Jump 3
jmp __LABEL3
__LABEL3:
movq %rbp, %rsp # Restore ESP
popq %rbp # Restore EBP
retq
__LABEL1:
##MovL %10 <- 48
movq $48, %rax
##Prin %10
pushq %rax ## prepare print call
pushq %rbx ## prepare print call
movq %rax, %rdi ## print
callq putchar@PLT
popq %rbx
popq %rax
##Jump 3
jmp __LABEL3
fail_exit:
movl $1, %eax
popq %rbp
retq
Expected
0
Got
0