#include "machine.h"

int fizzbuzz() { 
    pushp(FP);
    FP = SP;
    SP -= 4;
    pushw(R1);
Word _T11[]={
    (Word)4,
    (Word)4,
    (Word)70,
    (Word)105,
    (Word)122,
    (Word)122,
    0};
    *((WPtr)(((WPtr)(FP)+-1))) = (Word)((Word)(_T11));
Word _T12[]={
    (Word)4,
    (Word)4,
    (Word)66,
    (Word)117,
    (Word)122,
    (Word)122,
    0};
    *((WPtr)(((WPtr)(FP)+-2))) = (Word)((Word)(_T12));
Word _T13[]={
    (Word)1,
    (Word)1,
    (Word)10,
    0};
    *((WPtr)(((WPtr)(FP)+-3))) = (Word)((Word)(_T13));
Word _T14[]={
    (Word)0,
    (Word)0,
    0};
    *((WPtr)(((WPtr)(FP)+-4))) = (Word)((Word)(_T14));
    R1 = (Word)(*((WPtr)(((WPtr)(FP)+1))));
    R1 %= (Word)(3);
    if ( R1 != (Word)(0) ) goto _T16;
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    pushw(*((WPtr)(((WPtr)(FP)+-4))));
    append_lists();
    *((WPtr)(((WPtr)(FP)+-4))) = (Word)(R0);
_T16:
_T15:
    R1 = (Word)(*((WPtr)(((WPtr)(FP)+1))));
    R1 %= (Word)(5);
    if ( R1 != (Word)(0) ) goto _T18;
    pushw(*((WPtr)(((WPtr)(FP)+-2))));
    pushw(*((WPtr)(((WPtr)(FP)+-4))));
    append_lists();
    *((WPtr)(((WPtr)(FP)+-4))) = (Word)(R0);
_T18:
_T17:
    R1 = (Word)(*((WPtr)(((WPtr)(FP)+1))));
    R1 %= (Word)(5);
    if ( R1 == (Word)(0) ) goto _T20;
    R1 = (Word)(*((WPtr)(((WPtr)(FP)+1))));
    R1 %= (Word)(3);
    if ( R1 == (Word)(0) ) goto _T20;
    pushw(*((WPtr)(((WPtr)(FP)+1))));
    int_to_str();
    pushw(R0);
    pushw(*((WPtr)(((WPtr)(FP)+-4))));
    append_lists();
    *((WPtr)(((WPtr)(FP)+-4))) = (Word)(R0);
_T20:
_T19:
    pushw(*((WPtr)(((WPtr)(FP)+-3))));
    pushw(*((WPtr)(((WPtr)(FP)+-4))));
    append_lists();
    goto _T10;
_T10:
    popw(R1);
    SP += 4;
    popp(FP);
    SP += 1;
    return 0;
} 

int main() { 
    pushp(FP);
    FP = SP;
    SP -= 5;
Word _T22[]={
    (Word)0,
    (Word)0,
    0};
    *((WPtr)(((WPtr)(FP)+-1))) = (Word)((Word)(_T22));
    pushw((Word)(21));
    pushw((Word)(1));
    range();
    *((WPtr)(((WPtr)(FP)+-2))) = (Word)(R0);
    R1 = (Word)(((WPtr)(*((WPtr)(((WPtr)(FP)+-2))))+2));
    *((WPtr)(((WPtr)(FP)+-4))) = (Word)(((WPtr)R1)[(Word)(-1)]);
    *((WPtr)(((WPtr)(FP)+-5))) = (Word)((Word)(0));
_T25:
    if ( *((WPtr)(((WPtr)(FP)+-5))) >= *((WPtr)(((WPtr)(FP)+-4))) ) goto _T23;
    R1 = (Word)(((WPtr)(*((WPtr)(((WPtr)(FP)+-2))))+2));
    *((WPtr)(((WPtr)(FP)+-3))) = (Word)(((WPtr)R1)[*((WPtr)(((WPtr)(FP)+-5)))]);
    pushw(*((WPtr)(((WPtr)(FP)+-3))));
    fizzbuzz();
    pushw(R0);
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    append_lists();
    *((WPtr)(((WPtr)(FP)+-1))) = (Word)(R0);
_T24:
    (*((WPtr)(((WPtr)(FP)+-5)))) ++;
    goto _T25;
_T23:
    pushw(*((WPtr)(((WPtr)(FP)+-1))));
    Put_str();
_T21:
    SP += 5;
    popp(FP);
    return 0;
} 

