#include "machine.h"

int factorial() { 
    pushp(FP);
    FP = SP;
    pushw(R1);
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    if ( R1 > (Word)(1) ) goto _T12;
    R0 = (Word)(1);
    goto _T10;
    goto _T11;
_T12:
    R1 = *((WPtr)(((WPtr)(FP)+1)));
    R1 -= (Word)(1);
    pushw(R1);
    factorial();
    R1 = R0;
    R1 *= *((WPtr)(((WPtr)(FP)+1)));
    R0 = R1;
    goto _T10;
_T13:
_T11:
_T10:
    popw(R1);
    popp(FP);
    SP += 1;
    return 0;
} 

int main() { 
    pushp(FP);
    FP = SP;
    pushw((Word)(1));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(2));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(3));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(4));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(5));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(6));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(7));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(8));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(9));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(10));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(11));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(12));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(13));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(14));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(15));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(16));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(17));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(18));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(19));
    factorial();
    pushw(R0);
    put_int();
    pushw((Word)(20));
    factorial();
    pushw(R0);
    put_int();
_T14:
    popp(FP);
    return 0;
} 

