CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
OptPass5.txt92 linesDownload Raw Back to Compiler
1 2U0 OptPass5(CCmpCtrl *cc)3{4  CIntermediateCode *tmpi,*tmpi1;5  I64 code,i;6  CPrsStk *ps=cc->ps;7  ps->ptr=0;8  ps->ptr2=0;9 10  tmpi=cc->coc.coc_head.next;11  while (code=tmpi->ic_code) {12    if (code>IC_NOP2) {13      if (tmpi->ic_flags&ICF_PASS_TRACE) {14        if (Bt(&cc->saved_pass_trace,5)) {15          "%2d:",ps->ptr;16          ICPut(cc,tmpi);17        }18      }19      if (intermediate_code_table[code].arg_cnt==IS_V_ARG)20        ps->ptr-=tmpi->ic_data>>3;21      if (code==IC_PUSH_REGS) {22        for (i=0;i<REG_REGS_NUM;i++)23          if (Bt(&tmpi->ic_data,i))24            ps->ptr++;25      } else if (code==IC_POP_REGS) {26        for (i=0;i<REG_REGS_NUM;i++)27          if (Bt(&tmpi->ic_data,i))28            ps->ptr--;29      }30      if (tmpi->arg2.type&MDF_STK) {31        tmpi1=PrsPop(ps);32        if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) {33          if (tmpi1->ic_flags & ICF_RES_TO_INT) {34            if (tmpi1->arg1.type&MDF_IMM)35              tmpi1->arg1.disp=tmpi1->arg1.disp(F64);36            else37              tmpi->ic_flags|=ICF_ARG2_TO_INT;38          } else if (tmpi1->ic_flags&ICF_RES_TO_F64) {39            if (tmpi1->arg1.type&MDF_IMM)40              tmpi1->arg1.disp(F64)=tmpi1->arg1.disp;41            else42              tmpi->ic_flags|=ICF_ARG2_TO_F64;43          }44          tmpi->arg2.type=tmpi1->arg1.type&MDG_MASK+45                MinI64(tmpi->arg2.type.raw_type,46                MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type));47          tmpi->arg2.reg=tmpi1->arg1.reg;48          tmpi->arg2.disp=tmpi1->arg1.disp;49          tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK;50          OptSetNOP2(tmpi1);51        }52      }53 54      if (tmpi->arg1.type&MDF_STK) {55        tmpi1=PrsPop(ps);56        if (tmpi1->ic_code==IC_MOV || tmpi1->ic_code==IC_REG) {57          if (tmpi1->ic_flags & ICF_RES_TO_INT) {58            if (tmpi1->arg1.type&MDF_IMM)59              tmpi1->arg1.disp=tmpi1->arg1.disp(F64);60            else61              tmpi->ic_flags|=ICF_ARG1_TO_INT;62          } else if (tmpi1->ic_flags&ICF_RES_TO_F64) {63            if (tmpi1->arg1.type&MDF_IMM) {64              if (tmpi1->arg1.type&RTF_UNSIGNED)65                tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(U64);66              else67                tmpi1->arg1.disp(F64)=tmpi1->arg1.disp(I64);68            } else69              tmpi->ic_flags|=ICF_ARG1_TO_F64;70          }71          tmpi->arg1.type=tmpi1->arg1.type&MDG_MASK+72                MinI64(tmpi->arg1.type.raw_type,73                MinI64(tmpi1->res.type.raw_type,tmpi1->arg1.type.raw_type));74          CmpMinTypePointed(tmpi,tmpi1->arg1_type_pointed_to);75          tmpi->arg1.reg=tmpi1->arg1.reg;76          tmpi->arg1.disp=tmpi1->arg1.disp;77          tmpi->ic_flags|=tmpi1->ic_flags&ICG_NO_CVT_MASK;78          OptSetNOP2(tmpi1);79        }80      }81      if (tmpi->res.type&MDF_STK &&82            !(tmpi->ic_flags&ICF_RES_NOT_USED))83        PrsPush(ps,tmpi);84    }85    tmpi=tmpi->next;86  }87  if (ps->ptr>2) {88    "Pass:%d Stk:%08X\n",cc->pass,ps->ptr;89    LexExcept(cc,"Compiler Optimization Error at ");90  }91}92