My first compiler

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);
    }
}

preview

preview

preview

preview

preview

preview

preview

preview

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
   pushq  %rax                  ## print
   movq   $1,%rax               ## sys_write
   movq   $1,%rdi               ## fd stdout
   movq   %rsp,%rsi             ## string pointer
   movq   $1,%rdx               ## size
   syscall                      ## syscall
   popq   %rsi                  ##
   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
   pushq  %rax                  ## print
   movq   $1,%rax               ## sys_write
   movq   $1,%rdi               ## fd stdout
   movq   %rsp,%rsi             ## string pointer
   movq   $1,%rdx               ## size
   syscall                      ## syscall
   popq   %rsi                  ##
   popq   %rbx
   popq   %rax
   ##Jump 3
   jmp    __LABEL3

fail_exit:
   movl   $1, %eax
   popq   %rbp
   retq
Expected
0
Got
0