My first compiler

2class_var

Source Code

// MyCC code example
// Gabriel Capella
class Test {
    int x;
    public void main() {
        x = 49;
        print(x);
    }
}

preview

preview

preview

preview

preview

preview

preview

preview

Results

Assembly

# SPILL %0
.globl main

main:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP

   movq    $8, %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    $-16, %rsp

   ##MovL %0 <- 49
   movq   $49, %rbx
   ##MovL %14 <- -8
   movq   $-8, %rax
   ##MoOp %14 <- %14,%-1
   addq   %rbp, %rax
   ##RToM #14 <- %0
   movq   %rbx, (%rax)
   ##MoMo %1 <- %-1
   movq   %rbp, %rbx
   ##MovL %2 <- 16
   movq   $16, %rax
   ##MoOp %3 <- %1,%2
   addq   %rbx, %rax
   ##MToR %4 <- #3
   movq   (%rax), %rbx
   ##MovL %5 <- 0
   movq   $0, %rax
   ##MoOp %6 <- %4,%5
   addq   %rax, %rbx
   ##MovL %14 <- -8
   movq   $-8, %rax
   ##MoOp %14 <- %14,%-1
   addq   %rbp, %rax
   ##MToR %14 <- #14
   movq   (%rax), %rax
   ##RToM #6 <- %14
   movq   %rax, (%rbx)
   ##MoMo %7 <- %-1
   movq   %rbp, %rbx
   ##MovL %8 <- 16
   movq   $16, %rax
   ##MoOp %9 <- %7,%8
   addq   %rbx, %rax
   ##MToR %10 <- #9
   movq   (%rax), %rbx
   ##MovL %11 <- 0
   movq   $0, %rax
   ##MoOp %12 <- %10,%11
   addq   %rbx, %rax
   ##MToR %13 <- #12
   movq   (%rax), %rax
   ##Prin %13
   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

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

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