My first compiler

2spill3

Source Code

// MyCC code example
// Gabriel Capella
class Test {
    int f;
    int h;
    public void main() {
        int x1;
        int x2;
        int x3;
        int x4;
        x1 = 49;
        x2 = x1 + 1;
        x3 = x2 + 1;
        x4 = x3 + 1;
        print(x4);
        print(x3);
        print(x2);
        print(x1);
    }
}

preview


preview
preview
preview
preview
preview
preview
preview

Results

Assembly

# SPILL %1
# SPILL %5
# SPILL %9
.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    $-32, %rsp

   ##MovL %0 <- 49
   movq   $49, %rax
   ##MoMo %1 <- %0
   movq   %rax, %rbx
   ##MovL %18 <- -8
   movq   $-8, %rax
   ##MoOp %18 <- %18,%-1
   addq   %rbp, %rax
   ##RToM #18 <- %1
   movq   %rbx, (%rax)
   ##MovL %18 <- -8
   movq   $-8, %rax
   ##MoOp %18 <- %18,%-1
   addq   %rbp, %rax
   ##MToR %18 <- #18
   movq   (%rax), %rax
   ##MoMo %2 <- %18
   movq   %rax, %rbx
   ##MovL %3 <- 1
   movq   $1, %rax
   ##MoOp %4 <- %2,%3
   addq   %rbx, %rax
   ##MoMo %5 <- %4
   movq   %rax, %rbx
   ##MovL %19 <- -16
   movq   $-16, %rax
   ##MoOp %19 <- %19,%-1
   addq   %rbp, %rax
   ##RToM #19 <- %5
   movq   %rbx, (%rax)
   ##MovL %19 <- -16
   movq   $-16, %rax
   ##MoOp %19 <- %19,%-1
   addq   %rbp, %rax
   ##MToR %19 <- #19
   movq   (%rax), %rax
   ##MoMo %6 <- %19
   movq   %rax, %rbx
   ##MovL %7 <- 1
   movq   $1, %rax
   ##MoOp %8 <- %6,%7
   addq   %rbx, %rax
   ##MoMo %9 <- %8
   movq   %rax, %rbx
   ##MovL %20 <- -24
   movq   $-24, %rax
   ##MoOp %20 <- %20,%-1
   addq   %rbp, %rax
   ##RToM #20 <- %9
   movq   %rbx, (%rax)
   ##MovL %20 <- -24
   movq   $-24, %rax
   ##MoOp %20 <- %20,%-1
   addq   %rbp, %rax
   ##MToR %20 <- #20
   movq   (%rax), %rax
   ##MoMo %10 <- %20
   movq   %rax, %rbx
   ##MovL %11 <- 1
   movq   $1, %rax
   ##MoOp %12 <- %10,%11
   addq   %rbx, %rax
   ##MoMo %13 <- %12
   ##MoMo %14 <- %13
   ##Prin %14
   pushq  %rax                  ## prepare print call
   pushq  %rbx                  ## prepare print call
   movq   %rax, %rdi            ## print
   callq   putchar@PLT
   popq   %rbx
   popq   %rax
   ##MovL %20 <- -24
   movq   $-24, %rax
   ##MoOp %20 <- %20,%-1
   addq   %rbp, %rax
   ##MToR %20 <- #20
   movq   (%rax), %rax
   ##MoMo %15 <- %20
   ##Prin %15
   pushq  %rax                  ## prepare print call
   pushq  %rbx                  ## prepare print call
   movq   %rax, %rdi            ## print
   callq   putchar@PLT
   popq   %rbx
   popq   %rax
   ##MovL %19 <- -16
   movq   $-16, %rax
   ##MoOp %19 <- %19,%-1
   addq   %rbp, %rax
   ##MToR %19 <- #19
   movq   (%rax), %rax
   ##MoMo %16 <- %19
   ##Prin %16
   pushq  %rax                  ## prepare print call
   pushq  %rbx                  ## prepare print call
   movq   %rax, %rdi            ## print
   callq   putchar@PLT
   popq   %rbx
   popq   %rax
   ##MovL %18 <- -8
   movq   $-8, %rax
   ##MoOp %18 <- %18,%-1
   addq   %rbp, %rax
   ##MToR %18 <- #18
   movq   (%rax), %rax
   ##MoMo %17 <- %18
   ##Prin %17
   pushq  %rax                  ## prepare print call
   pushq  %rbx                  ## prepare print call
   movq   %rax, %rdi            ## print
   callq   putchar@PLT
   popq   %rbx
   popq   %rax

   movq    %rbp, %rsp            # Restore ESP
   popq    %rbp                  # Restore EBP
   retq

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