My first compiler

2poo_basic

Source Code

// MyCC code example
// Gabriel Capella
class Test {
	public void main() {
		Save s;
		s = new Save();
		s.set(49);
		print(s.get());
	}
}

class Save {
	int v;
	public void set(int i) {
		v = i;
	}
	public int get() {
		return v;
	}
}

preview

preview

preview

preview

preview

preview

preview

preview

Results

Assembly

# SPILL %12
# SPILL %1
.globl main

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

   movq    $0, %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

   ##MoMa 0
   pushq  %rbx                  ## prepare malloc
   movq    $8, %rdi
   callq   malloc@PLT
   testq   %rax, %rax
   jz      fail_exit
   movq   %rax, %rax
   popq   %rbx
   ##MoMo %1 <- %0
   movq   %rax, %rbx
   ##MovL %27 <- -16
   movq   $-16, %rax
   ##MoOp %27 <- %27,%-1
   addq   %rbp, %rax
   ##RToM #27 <- %1
   movq   %rbx, (%rax)
   ##MovL %27 <- -16
   movq   $-16, %rax
   ##MoOp %27 <- %27,%-1
   addq   %rbp, %rax
   ##MToR %27 <- #27
   movq   (%rax), %rax
   ##MoMo %2 <- %27
   ##MoMo %3 <- %2
   ##MovL %4 <- 49
   movq   $49, %rbx
   ##MoMo %5 <- %4
   ##PuAl
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   ##Push %5
   pushq  %rbx
   ##Push %3
   pushq  %rax
   ##Call (#740882966)
   call   __LABEL1
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rbx
   popq   %rax
   ##MovL %27 <- -16
   movq   $-16, %rax
   ##MoOp %27 <- %27,%-1
   addq   %rbp, %rax
   ##MToR %27 <- #27
   movq   (%rax), %rax
   ##MoMo %6 <- %27
   ##MoMo %7 <- %6
   ##PuAl
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   ##Push %7
   pushq  %rax
   ##Call (#0)
   call   __LABEL2
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rbx
   popq   %rax
   ##GRet
   movq  %rdi, %rax
   ##Prin %8
   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

__LABEL2:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-24, %rsp

   ##MoMo %19 <- %-1
   movq   %rbp, %rbx
   ##MovL %20 <- 16
   movq   $16, %rax
   ##MoOp %21 <- %19,%20
   addq   %rbx, %rax
   ##MToR %22 <- #21
   movq   (%rax), %rbx
   ##MovL %23 <- 0
   movq   $0, %rax
   ##MoOp %24 <- %22,%23
   addq   %rbx, %rax
   ##MToR %25 <- #24
   movq   (%rax), %rax
   ##SRet
   movq  %rax, %rdi
   movq    %rbp, %rsp 
   popq    %rbp
   retq

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

__LABEL1:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-24, %rsp

   ##MoMo %9 <- %-1
   movq   %rbp, %rbx
   ##MovL %10 <- 24
   movq   $24, %rax
   ##MoOp %11 <- %9,%10
   addq   %rbx, %rax
   ##MToR %12 <- #11
   movq   (%rax), %rbx
   ##MovL %26 <- -8
   movq   $-8, %rax
   ##MoOp %26 <- %26,%-1
   addq   %rbp, %rax
   ##RToM #26 <- %12
   movq   %rbx, (%rax)
   ##MoMo %13 <- %-1
   movq   %rbp, %rbx
   ##MovL %14 <- 16
   movq   $16, %rax
   ##MoOp %15 <- %13,%14
   addq   %rbx, %rax
   ##MToR %16 <- #15
   movq   (%rax), %rbx
   ##MovL %17 <- 0
   movq   $0, %rax
   ##MoOp %18 <- %16,%17
   addq   %rax, %rbx
   ##MovL %26 <- -8
   movq   $-8, %rax
   ##MoOp %26 <- %26,%-1
   addq   %rbp, %rax
   ##MToR %26 <- #26
   movq   (%rax), %rax
   ##RToM #18 <- %26
   movq   %rax, (%rbx)

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

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