#include "ccg"›/* start of cc6 */››hie7(lval)›int lval[];›$(›int k,lval2[3];›k=hie8(lval);›blanks();›if(((streq(line+lptr,">>")==0)› &(streq(line+lptr,"<<")==0))›| streq(line+lptr,"<<=")›| streq(line+lptr,">>="))›return k;›if(k)rvalue(lval);›while(1)$(›if (match(">>"))$(›push();›if(hie8(lval2))rvalue(lval2);›asr();›$)›else if(match("<<"))$(›push();›if(hie8(lval2))rvalue(lval2);›asl();›$)›else return 0;›$)›$)››hie8(lval)›int lval[];›$(›int k,lval2[3];›k=hie9(lval);›blanks();›if((ch()!='+')&(ch()!='-'))return k;›if(streq(line+lptr,"+=")›|streq(line+lptr,"-="))return k;›if(k)rvalue(lval);›while(1)$(›if (match("+"))$(›push();›if(hie9(lval2))rvalue(lval2);›if(dbltest(lval,lval2))›doublereg();›if(dbltest(lval2,lval))$(›swapstk();›doublereg();›swapstk();›$)›add();›result(lval,lval2);›$)›else if (match("-"))$(›push();›if(hie9(lval2))rvalue(lval2);›if(dbltest(lval,lval2))›doublereg();›if(dbltest(lval2,lval))$(›swapstk();›doublereg();›swapstk();›$)›sub();›if((lval[2]==cint)›&(lval2[2]==cint))$(›push();›immed();›outdec(1);›asr(); /* halve value */›$)›result(lval,lval2);›$)›else return 0;›$)›$)››hie9(lval)›int lval[];›$(›int k,lval2[3];›k=hie10(lval);›blanks();›if((ch()!='*')&(ch()!='/')›&(ch()!='%'))return k;››if(streq(line+lptr,"*=")›|streq(line+lptr,"/=")›|streq(line+lptr,"%="))return k;››if(k)rvalue(lval);›while(1)$(›if (match("*"))$(›push();›if(hie9(lval2))rvalue(lval2);›mult();›$)›else if (match("/"))$(›push();›if(hie10(lval2))rvalue(lval2);›div();›$)›else if (match("%"))$(›push();›if(hie10(lval2))rvalue(lval2);›mod();›$)›else return 0;›$)›$)››hie10(lval)›int lval[];›$(›int k;›char *ptr;›if(match("++"))›$(if((k=hie10(lval))==0)›$(needlval();›return 0;›$)›if(lval[1])push();›rvalue(lval);›inc();›if(lval[2]==cint)inc(); /* *int */›store(lval);›return 0;›$)›else if(match("--"))$(›if((k=hie10(lval))==0)$(›needlval();›return 0;›$)›if(lval[1])push();›rvalue(lval);›dec();›if(lval[2]==cint)dec();›store(lval);›return 0;›$)›else if(match("-"))$(›k=hie10(lval);›if (k) rvalue(lval);›neg();›return 0;›$)›else if(match("$-"))$( /* tilde */›k=hie10(lval);›if(k)rvalue(lval);›com();›return 0;›$)›else if(match("!"))$(›k=hie10(lval);›if(k)rvalue(lval);›push(); /* push value */›immed();›outdec(0);›eq();/* compare to zero */›return 0;›$)›else if(match("*"))$(›k=hie10(lval);›if(k)rvalue(lval);›if(ptr=lval[0])lval[1]=ptr[type];›else lval[1]=cint;›/* flag as not pointer or array */›lval[2]=0;›return 1;›$)›else if(match("&"))$(›k=hie10(lval);›if(k==0)$(›error("illegal address");›return 0;›$)›ptr=lval[0];›lval[2]=ptr[type];›if(lval[1])return 0;›/* global & non-array */›immed();›outlab(ptr);›lval[1]=ptr[type];›return 0;›$)›else$(/* check for postfix */›k=hie11(lval);›if(match("++"))›$(if(k==0)›$(needlval();›return 0;›$)›if(lval[1])push();›rvalue(lval);›inc();›if(lval[2]==cint)inc();›store(lval);›dec();›if(lval[2]==cint)dec();›return 0;›$)›else if(match("--"))›$(if(k==0)›$(needlval();›return 0;›$)›if(lval[1])push();›rvalue(lval);›dec();›if(lval[2]==cint)dec();›store(lval);›inc();›if(lval[2]==cint)inc();›return 0;›$)›else return k;›$)›$)››/* end of cc6 */››