My first compiler

12poo_array

Source Code

// MyCC code example
// Gabriel Capella
class Test {
  public void main() {
    int i;
    Element old;
    Element p;
    i = 10;

    while (0 < i) {
      Element p;
      p = new Element();
      p.setValue(i);
      if (i < 10) {
        p.setNext(old);
        p.setEnd(false);
      } else {
        p.setEnd(true);
      }
      old = p;
      p.show();
      print(10);
      i = i - 1;
    }

    while (true) {
      old.show();
      print(10);
      if(old.isEnd()) return;
      old = old.getNext();
    }
  }
}

class Element {
  int i;
  boolean end;
  Element e;
  public void setValue(int k) {
    i = k;
  }
  public void setEnd(boolean k) {
    end = k;
  }
  public void setNext(Element k) {
    e = k;
  }
  public Element getNext() {
    return e;
  }
  public boolean isEnd() {
    return end;
  }
  public void show() {
    Print pp;
    pp = new Print();
    pp.Integer(i);
  }
}

class Print {
  int v;
    public void Integer(int i) {
      int tmp;
      int c;
      tmp = 0;
      c = 0;

      while (0 < i) {
        tmp = tmp * 10 + i % 10; 
        i = i /10;
        c = c + 1;
      }

      while (0 < tmp) {
        print(tmp % 10 + 48);
        tmp = tmp /10;
        c = c - 1;
      }
      while (0 < c) {
        print(48);
        c = c - 1;
    }
  }
}

preview

preview

preview

preview

preview

preview

preview

preview

Results

Assembly

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

   ##MovL %0 <- 10
   movq   $10, %rbx
   ##MoMo %1 <- %0
   movq   %rbx, %rcx

__LABEL1:

__LABEL2:
   ##MovL %2 <- 0
   movq   $0, %rdx
   ##MoMo %3 <- %1
   movq   %rcx, %rbx
   ##MoOp %4 <- %2,%3
   cmpq   %rdx, %rbx
   setle   %dil
   xorb   $1, %dil
   movzbq %dil, %rbx
   ##JuCo %4
   testq   %rbx, %rbx
   jnz     __LABEL3

__LABEL4:
   ##Jump 5
   jmp    __LABEL5

__LABEL5:

__LABEL12:

__LABEL13:
   ##MovL %34 <- 1
   movq   $1, %rbx
   ##JuCo %34
   testq   %rbx, %rbx
   jnz     __LABEL14

__LABEL15:
   ##Jump 16
   jmp    __LABEL16

__LABEL16:

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

__LABEL14:

__LABEL17:
   ##MoMo %35 <- %21
   movq   %rax, %rbx
   ##MoMo %36 <- %35
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %36
   pushq  %rbx
   ##Call (#1462345314)
   call   __LABEL26
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MovL %37 <- 10
   movq   $10, %rbx
   ##Prin %37
   pushq  %r8                   ## prepare print call
   pushq  %rax                   ## prepare print call
   pushq  %rbx                   ## prepare print call
   pushq  %rcx                   ## prepare print call
   pushq  %rdx                   ## prepare print call
   pushq  %rbx                  ## 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   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %38 <- %21
   movq   %rax, %rbx
   ##MoMo %39 <- %38
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %39
   pushq  %rbx
   ##Call (#34353111)
   call   __LABEL25
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##GRet
   movq  %rdi, %rbx
   ##JuCo %40
   testq   %rbx, %rbx
   jnz     __LABEL18

__LABEL19:
   ##Jump 20
   jmp    __LABEL20

__LABEL20:
   ##MoMo %41 <- %21
   ##MoMo %42 <- %41
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %42
   pushq  %rax
   ##Call (#921819274)
   call   __LABEL24
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##GRet
   movq  %rdi, %rax
   ##MoMo %21 <- %43
   ##Jump 13
   jmp    __LABEL13

__LABEL18:
   ##SRet
   movq  %rbp, %rdi
   movq    %rbp, %rsp 
   popq    %rbp
   retq
   ##Jump 20
   jmp    __LABEL20

__LABEL3:

__LABEL6:
   ##MoMa 5
   pushq  %r8                  ## prepare malloc
   pushq  %rax                  ## prepare malloc
   pushq  %rcx                  ## prepare malloc
   pushq  %rdx                  ## prepare malloc
   movq    $24, %rdi
   callq   malloc@PLT
   testq   %rax, %rax
   jz      fail_exit
   movq   %rax, %rbx
   popq   %rdx
   popq   %rcx
   popq   %rax
   popq   %r8
   ##MoMo %6 <- %5
   ##MoMo %7 <- %6
   movq   %rbx, %rdx
   ##MoMo %8 <- %7
   movq   %rdx, %r8
   ##MoMo %9 <- %1
   movq   %rcx, %rdx
   ##MoMo %10 <- %9
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %10
   pushq  %rdx
   ##Push %8
   pushq  %r8
   ##Call (#482388084)
   call   __LABEL21
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %11 <- %1
   movq   %rcx, %r8
   ##MovL %12 <- 10
   movq   $10, %rdx
   ##MoOp %13 <- %11,%12
   cmpq   %r8, %rdx
   setle   %dil
   xorb   $1, %dil
   movzbq %dil, %rdx
   ##JuCo %13
   testq   %rdx, %rdx
   jnz     __LABEL7

__LABEL8:

__LABEL9:
   ##MoMo %14 <- %6
   movq   %rbx, %rax
   ##MoMo %15 <- %14
   movq   %rax, %rdx
   ##MovL %16 <- 1
   movq   $1, %rax
   ##MoMo %17 <- %16
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %17
   pushq  %rax
   ##Push %15
   pushq  %rdx
   ##Call (#2015485906)
   call   __LABEL22
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##Jump 10
   jmp    __LABEL10

__LABEL10:
   ##MoMo %27 <- %6
   movq   %rbx, %rax
   ##MoMo %21 <- %27
   ##MoMo %28 <- %6
   ##MoMo %29 <- %28
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %29
   pushq  %rbx
   ##Call (#1462345314)
   call   __LABEL26
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MovL %30 <- 10
   movq   $10, %rbx
   ##Prin %30
   pushq  %r8                   ## prepare print call
   pushq  %rax                   ## prepare print call
   pushq  %rbx                   ## prepare print call
   pushq  %rcx                   ## prepare print call
   pushq  %rdx                   ## prepare print call
   pushq  %rbx                  ## 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   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %31 <- %1
   ##MovL %32 <- 1
   movq   $1, %rbx
   ##MoOp %33 <- %31,%32
   imulq   $-1, %rbx
   addq   %rcx, %rbx
   ##MoMo %1 <- %33
   movq   %rbx, %rcx
   ##Jump 2
   jmp    __LABEL2

__LABEL7:

__LABEL11:
   ##MoMo %18 <- %6
   movq   %rbx, %rdx
   ##MoMo %19 <- %18
   ##MoMo %20 <- %21
   ##MoMo %22 <- %20
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %22
   pushq  %rax
   ##Push %19
   pushq  %rdx
   ##Call (#106283796)
   call   __LABEL23
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %23 <- %6
   movq   %rbx, %rax
   ##MoMo %24 <- %23
   movq   %rax, %rdx
   ##MovL %25 <- 0
   movq   $0, %rax
   ##MoMo %26 <- %25
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %26
   pushq  %rax
   ##Push %24
   pushq  %rdx
   ##Call (#2015485906)
   call   __LABEL22
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##Jump 10
   jmp    __LABEL10

__LABEL25:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMo %81 <- %-1
   movq   %rbp, %rbx
   ##MovL %82 <- 16
   movq   $16, %rax
   ##MoOp %83 <- %81,%82
   addq   %rbx, %rax
   ##MToR %84 <- #83
   movq   (%rax), %rbx
   ##MovL %85 <- 8
   movq   $8, %rax
   ##MoOp %86 <- %84,%85
   addq   %rbx, %rax
   ##MToR %87 <- #86
   movq   (%rax), %rax
   ##SRet
   movq  %rax, %rdi
   movq    %rbp, %rsp 
   popq    %rbp
   retq

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

__LABEL24:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMo %74 <- %-1
   movq   %rbp, %rbx
   ##MovL %75 <- 16
   movq   $16, %rax
   ##MoOp %76 <- %74,%75
   addq   %rbx, %rax
   ##MToR %77 <- #76
   movq   (%rax), %rbx
   ##MovL %78 <- 0
   movq   $0, %rax
   ##MoOp %79 <- %77,%78
   addq   %rbx, %rax
   ##MToR %80 <- #79
   movq   (%rax), %rax
   ##SRet
   movq  %rax, %rdi
   movq    %rbp, %rsp 
   popq    %rbp
   retq

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

__LABEL23:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMo %64 <- %-1
   movq   %rbp, %rbx
   ##MovL %65 <- 24
   movq   $24, %rax
   ##MoOp %66 <- %64,%65
   addq   %rbx, %rax
   ##MToR %67 <- #66
   movq   (%rax), %rcx
   ##MoMo %68 <- %-1
   movq   %rbp, %rbx
   ##MovL %69 <- 16
   movq   $16, %rax
   ##MoOp %70 <- %68,%69
   addq   %rbx, %rax
   ##MToR %71 <- #70
   movq   (%rax), %rbx
   ##MovL %72 <- 0
   movq   $0, %rax
   ##MoOp %73 <- %71,%72
   addq   %rbx, %rax
   ##RToM #73 <- %67
   movq   %rcx, (%rax)

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

__LABEL22:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMo %54 <- %-1
   movq   %rbp, %rbx
   ##MovL %55 <- 24
   movq   $24, %rax
   ##MoOp %56 <- %54,%55
   addq   %rbx, %rax
   ##MToR %57 <- #56
   movq   (%rax), %rcx
   ##MoMo %58 <- %-1
   movq   %rbp, %rbx
   ##MovL %59 <- 16
   movq   $16, %rax
   ##MoOp %60 <- %58,%59
   addq   %rbx, %rax
   ##MToR %61 <- #60
   movq   (%rax), %rbx
   ##MovL %62 <- 8
   movq   $8, %rax
   ##MoOp %63 <- %61,%62
   addq   %rbx, %rax
   ##RToM #63 <- %57
   movq   %rcx, (%rax)

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

__LABEL21:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMo %44 <- %-1
   movq   %rbp, %rbx
   ##MovL %45 <- 24
   movq   $24, %rax
   ##MoOp %46 <- %44,%45
   addq   %rbx, %rax
   ##MToR %47 <- #46
   movq   (%rax), %rcx
   ##MoMo %48 <- %-1
   movq   %rbp, %rbx
   ##MovL %49 <- 16
   movq   $16, %rax
   ##MoOp %50 <- %48,%49
   addq   %rbx, %rax
   ##MToR %51 <- #50
   movq   (%rax), %rbx
   ##MovL %52 <- 16
   movq   $16, %rax
   ##MoOp %53 <- %51,%52
   addq   %rbx, %rax
   ##RToM #53 <- %47
   movq   %rcx, (%rax)

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

__LABEL27:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MovL %100 <- 0
   movq   $0, %rax
   ##MoMo %101 <- %100
   movq   %rax, %rbx
   ##MovL %102 <- 0
   movq   $0, %rax
   ##MoMo %103 <- %102

__LABEL28:

__LABEL29:
   ##MovL %104 <- 0
   movq   $0, %r8
   ##MoMo %105 <- %-1
   movq   %rbp, %rdx
   ##MovL %106 <- 24
   movq   $24, %rcx
   ##MoOp %107 <- %105,%106
   addq   %rdx, %rcx
   ##MToR %108 <- #107
   movq   (%rcx), %rcx
   ##MoOp %109 <- %104,%108
   cmpq   %r8, %rcx
   setle   %dil
   xorb   $1, %dil
   movzbq %dil, %rcx
   ##JuCo %109
   testq   %rcx, %rcx
   jnz     __LABEL30

__LABEL31:
   ##Jump 32
   jmp    __LABEL32

__LABEL32:

__LABEL34:

__LABEL35:
   ##MovL %132 <- 0
   movq   $0, %rdx
   ##MoMo %133 <- %101
   movq   %rbx, %rcx
   ##MoOp %134 <- %132,%133
   cmpq   %rdx, %rcx
   setle   %dil
   xorb   $1, %dil
   movzbq %dil, %rcx
   ##JuCo %134
   testq   %rcx, %rcx
   jnz     __LABEL36

__LABEL37:
   ##Jump 38
   jmp    __LABEL38

__LABEL38:

__LABEL40:

__LABEL41:
   ##MovL %146 <- 0
   movq   $0, %rcx
   ##MoMo %147 <- %103
   movq   %rax, %rbx
   ##MoOp %148 <- %146,%147
   cmpq   %rcx, %rbx
   setle   %dil
   xorb   $1, %dil
   movzbq %dil, %rbx
   ##JuCo %148
   testq   %rbx, %rbx
   jnz     __LABEL42

__LABEL43:
   ##Jump 44
   jmp    __LABEL44

__LABEL44:

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

__LABEL42:

__LABEL45:
   ##MovL %149 <- 48
   movq   $48, %rbx
   ##Prin %149
   pushq  %r8                   ## prepare print call
   pushq  %rax                   ## prepare print call
   pushq  %rbx                   ## prepare print call
   pushq  %rcx                   ## prepare print call
   pushq  %rdx                   ## prepare print call
   pushq  %rbx                  ## 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   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %150 <- %103
   movq   %rax, %rbx
   ##MovL %151 <- 1
   movq   $1, %rax
   ##MoOp %152 <- %150,%151
   imulq   $-1, %rax
   addq   %rbx, %rax
   ##MoMo %103 <- %152
   ##Jump 41
   jmp    __LABEL41

__LABEL36:

__LABEL39:
   ##MoMo %135 <- %101
   movq   %rbx, %rdx
   ##MovL %136 <- 10
   movq   $10, %rcx
   ##MoOp %137 <- %135,%136
#%rdx A:%rdx 		 B:%rcx
   pushq   %rax
   movq    %rcx, %rdi
   movq    %rdx, %rax
   cqto
   idiv    %rdi
   popq    %rax
   ##MovL %138 <- 48
   movq   $48, %rcx
   ##MoOp %139 <- %137,%138
   addq   %rdx, %rcx
   ##Prin %139
   pushq  %r8                   ## prepare print call
   pushq  %rax                   ## prepare print call
   pushq  %rbx                   ## prepare print call
   pushq  %rcx                   ## prepare print call
   pushq  %rdx                   ## prepare print call
   pushq  %rcx                  ## 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   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8
   ##MoMo %140 <- %101
   movq   %rbx, %rcx
   ##MovL %141 <- 10
   movq   $10, %rbx
   ##MoOp %142 <- %140,%141
   pushq   %rax
   pushq   %rdx
   movq    %rcx, %rax
   cqto
   idiv    %rbx
   movq    %rax, %rbx
   popq    %rdx
   popq    %rax
   ##MoMo %101 <- %142
   ##MoMo %143 <- %103
   movq   %rax, %rcx
   ##MovL %144 <- 1
   movq   $1, %rax
   ##MoOp %145 <- %143,%144
   imulq   $-1, %rax
   addq   %rcx, %rax
   ##MoMo %103 <- %145
   ##Jump 35
   jmp    __LABEL35

__LABEL30:

__LABEL33:
   ##MoMo %110 <- %101
   movq   %rbx, %rcx
   ##MovL %111 <- 10
   movq   $10, %rbx
   ##MoOp %112 <- %110,%111
   movq   %rcx, %rdx
   imul   %rbx, %rdx
   ##MoMo %113 <- %-1
   movq   %rbp, %rcx
   ##MovL %114 <- 24
   movq   $24, %rbx
   ##MoOp %115 <- %113,%114
   addq   %rcx, %rbx
   ##MToR %116 <- #115
   movq   (%rbx), %rcx
   ##MovL %117 <- 10
   movq   $10, %rbx
   ##MoOp %118 <- %116,%117
#%rbx A:%rcx 		 B:%rbx
   pushq   %rax
   pushq   %rdx
   movq    %rcx, %rax
   cqto
   idiv    %rbx
   movq    %rdx, %rbx
   popq    %rdx
   popq    %rax
   ##MoOp %119 <- %112,%118
   addq   %rdx, %rbx
   ##MoMo %101 <- %119
   ##MoMo %120 <- %-1
   movq   %rbp, %rdx
   ##MovL %121 <- 24
   movq   $24, %rcx
   ##MoOp %122 <- %120,%121
   addq   %rdx, %rcx
   ##MToR %123 <- #122
   movq   (%rcx), %rdx
   ##MovL %124 <- 10
   movq   $10, %rcx
   ##MoOp %125 <- %123,%124
   pushq   %rax
   pushq   %rdx
   movq    %rcx, %rdi
   movq    %rdx, %rax
   cqto
   idiv    %rdi
   movq    %rax, %r8
   popq    %rdx
   popq    %rax
   ##MoMo %126 <- %-1
   movq   %rbp, %rdx
   ##MovL %127 <- 24
   movq   $24, %rcx
   ##MoOp %128 <- %126,%127
   addq   %rdx, %rcx
   ##RToM #128 <- %125
   movq   %r8, (%rcx)
   ##MoMo %129 <- %103
   movq   %rax, %rcx
   ##MovL %130 <- 1
   movq   $1, %rax
   ##MoOp %131 <- %129,%130
   addq   %rcx, %rax
   ##MoMo %103 <- %131
   ##Jump 29
   jmp    __LABEL29

__LABEL26:
   pushq  %rbp                # Save old EBP
   movq    %rsp, %rbp         # Save old ESP
   addq    $-8, %rsp

   ##MoMa 88
   pushq  %r8                  ## prepare malloc
   pushq  %rbx                  ## prepare malloc
   pushq  %rcx                  ## prepare malloc
   pushq  %rdx                  ## prepare malloc
   movq    $8, %rdi
   callq   malloc@PLT
   testq   %rax, %rax
   jz      fail_exit
   movq   %rax, %rax
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %r8
   ##MoMo %89 <- %88
   ##MoMo %90 <- %89
   ##MoMo %91 <- %90
   movq   %rax, %rcx
   ##MoMo %92 <- %-1
   movq   %rbp, %rbx
   ##MovL %93 <- 16
   movq   $16, %rax
   ##MoOp %94 <- %92,%93
   addq   %rbx, %rax
   ##MToR %95 <- #94
   movq   (%rax), %rbx
   ##MovL %96 <- 16
   movq   $16, %rax
   ##MoOp %97 <- %95,%96
   addq   %rbx, %rax
   ##MToR %98 <- #97
   movq   (%rax), %rax
   ##MoMo %99 <- %98
   ##PuAl
   pushq  %r8                  ## prepare call
   pushq  %rax                  ## prepare call
   pushq  %rbx                  ## prepare call
   pushq  %rcx                  ## prepare call
   pushq  %rdx                  ## prepare call
   ##Push %99
   pushq  %rax
   ##Push %91
   pushq  %rcx
   ##Call (#1513875999)
   call   __LABEL27
   ##PopD
   add   $8, %rsp
   ##PopD
   add   $8, %rsp
   ##PoAl
   popq   %rdx
   popq   %rcx
   popq   %rbx
   popq   %rax
   popq   %r8

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

fail_exit:
   movl   $1, %eax
   popq   %rbp
   retq
Expected
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
Got
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10