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







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