My first compiler

24class_var

Source Code

// MyCC code example
// Gabriel Capella
class Test {
    int x1;
    int x2;
    int x3;
    int x4;
    public void main() {
        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 %0
# SPILL %15
# SPILL %30
# SPILL %45
.globl main

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

   movq    $32, %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    $-40, %rsp

   ##MovL %0 <- 49
   movq   $49, %rbx
   ##MovL %80 <- -8
   movq   $-8, %rax
   ##MoOp %80 <- %80,%-1
   addq   %rbp, %rax
   ##RToM #80 <- %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 <- 24
   movq   $24, %rax
   ##MoOp %6 <- %4,%5
   addq   %rax, %rbx
   ##MovL %80 <- -8
   movq   $-8, %rax
   ##MoOp %80 <- %80,%-1
   addq   %rbp, %rax
   ##MToR %80 <- #80
   movq   (%rax), %rax
   ##RToM #6 <- %80
   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 <- 24
   movq   $24, %rax
   ##MoOp %12 <- %10,%11
   addq   %rbx, %rax
   ##MToR %13 <- #12
   movq   (%rax), %rbx
   ##MovL %14 <- 1
   movq   $1, %rax
   ##MoOp %15 <- %13,%14
   addq   %rax, %rbx
   ##MovL %81 <- -16
   movq   $-16, %rax
   ##MoOp %81 <- %81,%-1
   addq   %rbp, %rax
   ##RToM #81 <- %15
   movq   %rbx, (%rax)
   ##MoMo %16 <- %-1
   movq   %rbp, %rbx
   ##MovL %17 <- 16
   movq   $16, %rax
   ##MoOp %18 <- %16,%17
   addq   %rbx, %rax
   ##MToR %19 <- #18
   movq   (%rax), %rbx
   ##MovL %20 <- 16
   movq   $16, %rax
   ##MoOp %21 <- %19,%20
   addq   %rax, %rbx
   ##MovL %81 <- -16
   movq   $-16, %rax
   ##MoOp %81 <- %81,%-1
   addq   %rbp, %rax
   ##MToR %81 <- #81
   movq   (%rax), %rax
   ##RToM #21 <- %81
   movq   %rax, (%rbx)
   ##MoMo %22 <- %-1
   movq   %rbp, %rbx
   ##MovL %23 <- 16
   movq   $16, %rax
   ##MoOp %24 <- %22,%23
   addq   %rbx, %rax
   ##MToR %25 <- #24
   movq   (%rax), %rbx
   ##MovL %26 <- 16
   movq   $16, %rax
   ##MoOp %27 <- %25,%26
   addq   %rbx, %rax
   ##MToR %28 <- #27
   movq   (%rax), %rbx
   ##MovL %29 <- 1
   movq   $1, %rax
   ##MoOp %30 <- %28,%29
   addq   %rax, %rbx
   ##MovL %82 <- -24
   movq   $-24, %rax
   ##MoOp %82 <- %82,%-1
   addq   %rbp, %rax
   ##RToM #82 <- %30
   movq   %rbx, (%rax)
   ##MoMo %31 <- %-1
   movq   %rbp, %rbx
   ##MovL %32 <- 16
   movq   $16, %rax
   ##MoOp %33 <- %31,%32
   addq   %rbx, %rax
   ##MToR %34 <- #33
   movq   (%rax), %rbx
   ##MovL %35 <- 8
   movq   $8, %rax
   ##MoOp %36 <- %34,%35
   addq   %rax, %rbx
   ##MovL %82 <- -24
   movq   $-24, %rax
   ##MoOp %82 <- %82,%-1
   addq   %rbp, %rax
   ##MToR %82 <- #82
   movq   (%rax), %rax
   ##RToM #36 <- %82
   movq   %rax, (%rbx)
   ##MoMo %37 <- %-1
   movq   %rbp, %rbx
   ##MovL %38 <- 16
   movq   $16, %rax
   ##MoOp %39 <- %37,%38
   addq   %rbx, %rax
   ##MToR %40 <- #39
   movq   (%rax), %rbx
   ##MovL %41 <- 8
   movq   $8, %rax
   ##MoOp %42 <- %40,%41
   addq   %rbx, %rax
   ##MToR %43 <- #42
   movq   (%rax), %rbx
   ##MovL %44 <- 1
   movq   $1, %rax
   ##MoOp %45 <- %43,%44
   addq   %rax, %rbx
   ##MovL %83 <- -32
   movq   $-32, %rax
   ##MoOp %83 <- %83,%-1
   addq   %rbp, %rax
   ##RToM #83 <- %45
   movq   %rbx, (%rax)
   ##MoMo %46 <- %-1
   movq   %rbp, %rbx
   ##MovL %47 <- 16
   movq   $16, %rax
   ##MoOp %48 <- %46,%47
   addq   %rbx, %rax
   ##MToR %49 <- #48
   movq   (%rax), %rbx
   ##MovL %50 <- 0
   movq   $0, %rax
   ##MoOp %51 <- %49,%50
   addq   %rax, %rbx
   ##MovL %83 <- -32
   movq   $-32, %rax
   ##MoOp %83 <- %83,%-1
   addq   %rbp, %rax
   ##MToR %83 <- #83
   movq   (%rax), %rax
   ##RToM #51 <- %83
   movq   %rax, (%rbx)
   ##MoMo %52 <- %-1
   movq   %rbp, %rbx
   ##MovL %53 <- 16
   movq   $16, %rax
   ##MoOp %54 <- %52,%53
   addq   %rbx, %rax
   ##MToR %55 <- #54
   movq   (%rax), %rbx
   ##MovL %56 <- 0
   movq   $0, %rax
   ##MoOp %57 <- %55,%56
   addq   %rbx, %rax
   ##MToR %58 <- #57
   movq   (%rax), %rax
   ##Prin %58
   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
   ##MoMo %59 <- %-1
   movq   %rbp, %rbx
   ##MovL %60 <- 16
   movq   $16, %rax
   ##MoOp %61 <- %59,%60
   addq   %rbx, %rax
   ##MToR %62 <- #61
   movq   (%rax), %rbx
   ##MovL %63 <- 8
   movq   $8, %rax
   ##MoOp %64 <- %62,%63
   addq   %rbx, %rax
   ##MToR %65 <- #64
   movq   (%rax), %rax
   ##Prin %65
   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
   ##MoMo %66 <- %-1
   movq   %rbp, %rbx
   ##MovL %67 <- 16
   movq   $16, %rax
   ##MoOp %68 <- %66,%67
   addq   %rbx, %rax
   ##MToR %69 <- #68
   movq   (%rax), %rbx
   ##MovL %70 <- 16
   movq   $16, %rax
   ##MoOp %71 <- %69,%70
   addq   %rbx, %rax
   ##MToR %72 <- #71
   movq   (%rax), %rax
   ##Prin %72
   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
   ##MoMo %73 <- %-1
   movq   %rbp, %rbx
   ##MovL %74 <- 16
   movq   $16, %rax
   ##MoOp %75 <- %73,%74
   addq   %rbx, %rax
   ##MToR %76 <- #75
   movq   (%rax), %rbx
   ##MovL %77 <- 24
   movq   $24, %rax
   ##MoOp %78 <- %76,%77
   addq   %rbx, %rax
   ##MToR %79 <- #78
   movq   (%rax), %rax
   ##Prin %79
   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
4321
Got
4321