CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
OptPass012.txt1290 linesDownload Raw Back to Compiler
1 2/*OptPass0123 4Pass#05When parsing the arg expressions to a function6call, there is a call to OptPass012 to determine7the type of the expression. OptPass0128 9Pass#1&210Constant expressions are simplified.11Eliminated opcodes are set to NOP.12Types are determined by reconstructing an13expression tree for operators14CIntermediateCode.CICTreeLinks.15 16Pointer arithmetic size is set, once17the type is determined.18 19Branches are expressed with short-circuit20logic. 3-Arg comparisons are established.21 22*/23 24CIntermediateCode *OptPass012(CCmpCtrl *cc)25{/*Simplify CONST arithmetic.26Sets the class throughout Expression trees.27Returns the type of an Expression for use28in int<-->F64 conversions of fun29args.30*/31  I64 code,i;32  Bool is_unsigned;33  CHashClass *tmpc,*tmpc1,*tmpc2;34  CIntermediateCode *tmpi,*tmpi1,*tmpi2,*tmpi3,*tmpi_push,35        *last_with_class=NULL;36  CCodeMisc *lb,*lb1,*lb2;37  CPrsStk *ps;38  if (!(ps=cc->ps))39    ps=cc->ps=MAlloc(sizeof(CPrsStk));40  ps->ptr=0;41  ps->ptr2=0;42  tmpi=cc->coc.coc_head.next;43  while (code=tmpi->ic_code) {44    tmpc=tmpi->ic_class;45    tmpi->ic_class2=tmpc;46    tmpi_push=tmpi;47    MemSet(&tmpi->arg1,0,3*sizeof(CICArg));48    tmpi->arg1_type_pointed_to=0;49    switch [intermediate_code_table[code].arg_cnt] {50      case IS_V_ARG:51        ps->ptr-=tmpi->ic_data>>2;52        break;53      case IS_2_ARG:54        tmpi2=PrsPop(ps);55        tmpc2=tmpi2->ic_class;56        tmpi->t.arg2_tree=tmpi2;57        tmpi->t.arg2_class=PrsPop(ps);58      case IS_1_ARG:59        tmpi1=PrsPop(ps);60        tmpc1=tmpi1->ic_class;61        tmpi->t.arg1_tree=tmpi1;62        tmpi->t.arg1_class=PrsPop(ps);63        break;64      case IS_0_ARG: //nobound switch65        break;66    }67    if (intermediate_code_table[code].not_const)68      cc->flags|=CCF_NOT_CONST;69    switch [code] {70      case IC_IMM_F64:71        tmpi->ic_flags&=~ICF_RES_TO_F64;72        if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_INT) {73          tmpi->ic_data=ToI64(tmpi->ic_data(F64));74          tmpi->ic_flags&=~ICF_RES_TO_INT;75          tmpi->ic_code=IC_IMM_I64;76          tmpi->ic_class=cmp.internal_types[RT_I64];77        }78        break;79      case IC_IMM_I64:80        tmpi->ic_flags&=~ICF_RES_TO_INT;81        if (cc->pass==2 && tmpi->ic_flags&ICF_RES_TO_F64) {82          tmpi->ic_data(F64)=ToF64(tmpi->ic_data);83          tmpi->ic_flags&=~ICF_RES_TO_F64;84          tmpi->ic_code=IC_IMM_F64;85          tmpi->ic_class=cmp.internal_types[RT_F64];86        }87        break;88      case IC_HOLYC_TYPECAST:89        if (tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) {90          if (tmpi->ic_class->raw_type==RT_F64)91            tmpi1->ic_code=IC_IMM_F64;92          else93            tmpi1->ic_code=IC_IMM_I64;94          tmpi1->ic_class=tmpi->ic_class;95          tmpi1->ic_flags|=tmpi->ic_flags;96          tmpi_push=tmpi1;97          OptSetNOP1(tmpi);98        } else {99          if (tmpi->ic_data) {//was paren100            if (!tmpi_push->ic_class->ptr_stars_cnt) {101              if (tmpi_push->ic_class->raw_type==RT_F64)102                tmpi_push->ic_class2=cmp.internal_types[RT_F64];103              else104                tmpi_push->ic_class2=cmp.internal_types[RT_I64];105            }106          } else {107            tmpi1->ic_class=tmpi->ic_class;108            tmpi1->ic_flags|=tmpi->ic_flags;109            tmpi_push=tmpi1;110            OptSetNOP1(tmpi);111          }112        }113        break;114      case IC_FS:115      case IC_GS:116//CALL,FS/GS,CALL_END,IMM,ADD,DEREF-->MOV_FS/GS117        tmpi1=tmpi->next->next; //IMM118        tmpi2=tmpi1->next; //ADD119        tmpi3=tmpi2->next; //DEREF120        if (tmpi1->ic_code==IC_IMM_I64 && tmpi2->ic_code==IC_ADD &&121              tmpi3->ic_code==IC_DEREF &&122              !(tmpi3->ic_flags&~ICG_NO_CVT_MASK)) {123          tmpi->ic_flags|=tmpi1->ic_flags|tmpi2->ic_flags|tmpi3->ic_flags;124          if (tmpi->ic_code==IC_FS)125            tmpi->ic_code=IC_MOV_FS;126          else127            tmpi->ic_code=IC_MOV_GS;128          tmpi->ic_data=tmpi1->ic_data;129          tmpi->ic_class =tmpi3->ic_class;130          tmpi->ic_class2=tmpi3->ic_class2;131          OptSetNOP1(tmpi1);132          OptSetNOP1(tmpi2);133          OptSetNOP1(tmpi3);134 135          tmpi1=tmpi->last; //CALL136          tmpi2=tmpi->next; //CALL_END137          tmpi->ic_flags|=tmpi1->ic_flags|tmpi2->ic_flags;138          OptSetNOP1(tmpi1);139          OptSetNOP1(tmpi2);140        }141        break;142      case IC_PUSH_CMP:143        if (tmpi1=OptLag(tmpi)) {144          if (tmpi1->ic_code==IC_AND_AND)145            tmpi1=OptLag(tmpi1);146          if (tmpi1)147            tmpi->ic_class=tmpi1->ic_class;148        }149        tmpi->ic_class2=tmpi->ic_class;150        tmpi->ic_data=0;151        if (tmpi->ic_class->raw_type==RT_F64)152          tmpi->ic_flags|=ICF_USE_F64;153        break;154      case IC_COM:155        if (tmpi1->ic_code==IC_IMM_I64) {156          tmpi->ic_data=~tmpi1->ic_data;157          tmpi->ic_code=IC_IMM_I64;158          tmpi->ic_flags|=tmpi1->ic_flags;159          OptSetNOP1(tmpi1);160        }161        tmpi_push->ic_class2=cmp.internal_types[RT_I64];162        break;163      start:164        case IC_NOT:165          if (tmpc->raw_type==RT_F64) {166            if (tmpi1->ic_code==IC_IMM_F64) {167              tmpi->ic_data(F64)=!tmpi1->ic_data(F64);168              tmpi->ic_code=IC_IMM_F64;169              tmpi->ic_flags|=tmpi1->ic_flags;170              OptSetNOP1(tmpi1);171            }172            break;173          }174          if (tmpi1->ic_code==IC_IMM_I64) {175            tmpi->ic_data=!tmpi1->ic_data;176            tmpi->ic_code=IC_IMM_I64;177            tmpi->ic_flags|=tmpi1->ic_flags;178            OptSetNOP1(tmpi1);179          }180          break;181        case IC_UNARY_MINUS:182          if (i=OptFixupUnaryOp(tmpi,tmpi1,&is_unsigned)) {183            if (i==FBO1_INT) {184              tmpi->ic_data=-tmpi1->ic_data(I64);185              tmpi->ic_code=IC_IMM_I64;186            } else {187              tmpi->ic_data(F64)=-tmpi1->ic_data(F64);188              tmpi->ic_code=IC_IMM_F64;189            }190          }191          if (tmpc1->type&HTT_INTERNAL_TYPE && tmpc1->raw_type&RTF_UNSIGNED)192            tmpi->ic_class=cmp.internal_types[tmpc1->raw_type-1];193          break;194        case IC_SHL_CONST:195          if (i=OptFixupUnaryOp(tmpi,tmpi1,&is_unsigned)) {196            if (i==FBO1_INT) {197              if (is_unsigned)198                tmpi->ic_data=tmpi1->ic_data(U64)<<tmpi->ic_data(U64);199              else200                tmpi->ic_data=tmpi1->ic_data(I64)<<tmpi->ic_data(I64);201              tmpi->ic_code=IC_IMM_I64;202            } else {203              tmpi->ic_data(F64)=tmpi1->ic_data(F64)<<tmpi->ic_data;204              tmpi->ic_code=IC_IMM_F64;205            }206          } else if (tmpi1->ic_code==IC_SHL_CONST) {207            tmpi->ic_flags|=tmpi1->ic_flags;208            tmpi->ic_data+=tmpi1->ic_data;209            OptSetNOP1(tmpi1);210          }211          break;212        case IC_SHR_CONST:213          if (i=OptFixupUnaryOp(tmpi,tmpi1,&is_unsigned)) {214            if (i==FBO1_INT) {215              if (is_unsigned)216                tmpi->ic_data=tmpi1->ic_data(U64)>>tmpi->ic_data(U64);217              else218                tmpi->ic_data=tmpi1->ic_data(I64)>>tmpi->ic_data(I64);219              tmpi->ic_code=IC_IMM_I64;220            } else {221              tmpi->ic_data(F64)=tmpi1->ic_data(F64)>>tmpi->ic_data;222              tmpi->ic_code=IC_IMM_F64;223            }224          } else if (tmpi1->ic_code==IC_SHR_CONST) {225            tmpi->ic_flags|=tmpi1->ic_flags;226            tmpi->ic_data+=tmpi1->ic_data;227            OptSetNOP1(tmpi1);228          }229          break;230        case IC_SHL:231          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {232            if (i==FBO1_INT) {233              if (is_unsigned)234                tmpi->ic_data=tmpi1->ic_data(U64)<<tmpi2->ic_data(U64);235              else236                tmpi->ic_data=tmpi1->ic_data(I64)<<tmpi2->ic_data(I64);237              tmpi->ic_code=IC_IMM_I64;238            } else {239              tmpi->ic_data(F64)=tmpi1->ic_data(F64) << tmpi2->ic_data(F64);240              tmpi->ic_code=IC_IMM_F64;241            }242          } else if (tmpi2->ic_code==IC_IMM_I64) {243            tmpi->ic_flags|=tmpi2->ic_flags;244            tmpi->ic_data=tmpi2->ic_data;245            tmpi->ic_code=IC_SHL_CONST;246            OptSetNOP1(tmpi2);247          }248          break;249        case IC_SHR:250          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {251            if (i==FBO1_INT) {252              if (is_unsigned)253                tmpi->ic_data=tmpi1->ic_data(U64)>>tmpi2->ic_data(U64);254              else255                tmpi->ic_data=tmpi1->ic_data(I64)>>tmpi2->ic_data(I64);256              tmpi->ic_code=IC_IMM_I64;257            } else {258              tmpi->ic_data(F64)=tmpi1->ic_data(F64) >> tmpi2->ic_data(F64);259              tmpi->ic_code=IC_IMM_F64;260            }261          } else if (tmpi2->ic_code==IC_IMM_I64) {262            tmpi->ic_flags|=tmpi2->ic_flags;263            tmpi->ic_data=tmpi2->ic_data;264            tmpi->ic_code=IC_SHR_CONST;265            OptSetNOP1(tmpi2);266          }267          break;268      end:269        if (!tmpi_push->ic_class->ptr_stars_cnt) {270          if (tmpi_push->ic_class->raw_type==RT_F64)271            tmpi_push->ic_class2=cmp.internal_types[RT_F64];272          else273            tmpi_push->ic_class2=cmp.internal_types[RT_I64];274        }275        break;276      case IC_DEREF:277        if (cc->pass==2) {278          if (!tmpc->size)279            LexWarn(cc,"Dereference U0 ");280          if (tmpi1->ic_class->raw_type!=RT_F64) {281            if (tmpi1->ic_code==IC__PP) {282              tmpi->ic_code=IC_DEREF_PP;283              tmpi->ic_flags|=tmpi1->ic_flags;284              OptSetNOP1(tmpi1);285            } else if (tmpi1->ic_code==IC__MM) {286              tmpi->ic_code=IC_DEREF_MM;287              tmpi->ic_flags|=tmpi1->ic_flags;288              OptSetNOP1(tmpi1);289            }290          }291        }292        break;293      case IC__PP:294      case IC__MM:295      case IC_PP_:296      case IC_MM_:297        if (cc->pass==2 && !tmpc->size)298          LexWarn(cc,"Dereference U0 ");299        break;300      case IC_POWER:301        tmpc=tmpi->ic_class=cmp.internal_types[RT_F64];302        if (tmpc1->raw_type!=RT_F64)303          tmpi1->ic_flags|=ICF_RES_TO_F64;304        if (tmpc2->raw_type!=RT_F64)305          tmpi2->ic_flags|=ICF_RES_TO_F64;306        tmpi_push->ic_class2=cmp.internal_types[RT_F64];307        break;308      start:309        case IC_MUL:310          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {311            if (i==FBO1_INT) {312              if (is_unsigned)313                tmpi->ic_data=tmpi1->ic_data(U64)*tmpi2->ic_data(U64);314              else315                tmpi->ic_data=tmpi1->ic_data(I64)*tmpi2->ic_data(I64);316              tmpi->ic_code=IC_IMM_I64;317            } else {318              tmpi->ic_data(F64)=tmpi1->ic_data(F64)*tmpi2->ic_data(F64);319              tmpi->ic_code=IC_IMM_F64;320            }321          } else {322            if (tmpi1->ic_code==IC_IMM_I64 && cc->pass==2) {323              switch (i=tmpi1->ic_data) {324                case 0:325                  break;326                case 1:327                  tmpi2->ic_flags|=tmpi->ic_flags|tmpi1->ic_flags;328                  tmpi2->ic_class2=tmpi->ic_class2;329                  tmpi_push=tmpi2;330                  OptSetNOP1(tmpi1);331                  OptSetNOP1(tmpi);332                  break;333                default:334                  if (Bsf(i)==Bsr(i)) {335                    tmpi->ic_flags|=tmpi1->ic_flags;336                    tmpi->t.arg1_class=tmpi->t.arg2_class;337                    tmpi->ic_data=Bsf(i);338                    tmpi->ic_code=IC_SHL_CONST;339                    OptSetNOP1(tmpi1);340                  }341              }342            } else if (tmpi2->ic_code==IC_IMM_I64) {343              switch (i=tmpi2->ic_data) {344                case 0:345                  break;346                case 1:347                  tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;348                  tmpi1->ic_class2=tmpi->ic_class2;349                  tmpi_push=tmpi1;350                  OptSetNOP1(tmpi2);351                  OptSetNOP1(tmpi);352                  break;353                default:354                  if (Bsf(i)==Bsr(i)) {355                    tmpi->ic_flags|=tmpi2->ic_flags;356                    tmpi->ic_data=Bsf(i);357                    tmpi->ic_code=IC_SHL_CONST;358                    OptSetNOP1(tmpi2);359                  } else if (tmpi1->ic_code==IC_MUL && cc->pass==2) {360                    if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) {361                      tmpi1->ic_flags|=tmpi->ic_flags;362                      tmpi1->t.arg1_tree->ic_data*=tmpi2->ic_data;363                      tmpi1->ic_class2=tmpi->ic_class2;364                      tmpi_push=tmpi1;365                      OptSetNOP1(tmpi2);366                      OptSetNOP1(tmpi);367                    } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) {368                      tmpi1->ic_flags|=tmpi->ic_flags;369                      tmpi1->t.arg2_tree->ic_data*=tmpi2->ic_data;370                      tmpi1->ic_class2=tmpi->ic_class2;371                      tmpi_push=tmpi1;372                      OptSetNOP1(tmpi2);373                      OptSetNOP1(tmpi);374                    }375                  }376              }377            } else if (tmpi2->ic_code==IC_IMM_F64 && cc->pass==2) {378              if (tmpi2->ic_data(F64)==1.0) {379                tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;380                tmpi1->ic_class2=tmpi->ic_class2;381                tmpi_push=tmpi1;382                OptSetNOP1(tmpi2);383                OptSetNOP1(tmpi);384              } else if (tmpi1->ic_code==IC_MUL) {385                if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) {386                  tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;387                  tmpi1->t.arg1_tree->ic_data(F64)*=tmpi2->ic_data(F64);388                  tmpi1->ic_class2=tmpi->ic_class2;389                  tmpi_push=tmpi1;390                  OptSetNOP1(tmpi2);391                  OptSetNOP1(tmpi);392                } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) {393                  tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;394                  tmpi1->t.arg2_tree->ic_data(F64)*=tmpi2->ic_data(F64);395                  tmpi1->ic_class2=tmpi->ic_class2;396                  tmpi_push=tmpi1;397                  OptSetNOP1(tmpi2);398                  OptSetNOP1(tmpi);399                }400              }401            }402          }403          break;404        case IC_DIV:405          if ((tmpi2->ic_data || tmpi2->ic_code!=IC_IMM_I64 &&406                tmpi2->ic_code!=IC_IMM_F64) &&407                (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned))) {408            if (i==FBO1_INT) {409              if (is_unsigned)410                tmpi->ic_data=tmpi1->ic_data(U64)/tmpi2->ic_data(U64);411              else412                tmpi->ic_data=tmpi1->ic_data(I64)/tmpi2->ic_data(I64);413              tmpi->ic_code=IC_IMM_I64;414            } else {415              tmpi->ic_data(F64)=tmpi1->ic_data(F64)/416                    tmpi2->ic_data(F64);417              tmpi->ic_code=IC_IMM_F64;418            }419          } else {420            if (tmpi2->ic_code==IC_IMM_I64 && (i=tmpi2->ic_data)) {421              if (i==1) {422                tmpi1->ic_flags|=tmpi2->ic_flags|tmpi->ic_flags;423                tmpi1->ic_class2=tmpi->ic_class2;424                tmpi_push=tmpi1;425                OptSetNOP1(tmpi2);426                OptSetNOP1(tmpi);427              } else if (Bsf(i)==Bsr(i)) {428                tmpi->ic_flags|=tmpi2->ic_flags;429                tmpi->ic_data=Bsf(i);430                tmpi->ic_code=IC_SHR_CONST;431                OptSetNOP1(tmpi2);432              }433            }434          }435          break;436        case IC_MOD:437          if ((tmpi2->ic_data || tmpi2->ic_code!=IC_IMM_I64 &&438                tmpi2->ic_code!=IC_IMM_F64) &&439                (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned))) {440            if (i==FBO1_INT) {441              if (is_unsigned)442                tmpi->ic_data=tmpi1->ic_data(U64)%tmpi2->ic_data(U64);443              else444                tmpi->ic_data=tmpi1->ic_data(I64)%tmpi2->ic_data(I64);445              tmpi->ic_code=IC_IMM_I64;446            } else {447              tmpi->ic_data(F64)=tmpi1->ic_data(F64)%448                    tmpi2->ic_data(F64);449              tmpi->ic_code=IC_IMM_F64;450            }451          } else if (cc->pass==2 && tmpi2->ic_code==IC_IMM_I64 &&452                (i=tmpi2->ic_data) && Bsf(i)==Bsr(i) &&453                tmpi_push->ic_class->raw_type!=RT_F64 &&454                tmpi_push->ic_class->raw_type&RTF_UNSIGNED) {//do only unsigned455            tmpi2->ic_data=i-1;456            tmpi->ic_code=IC_AND;457          }458          break;459        case IC_AND:460          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {461            tmpi->ic_data=tmpi1->ic_data&tmpi2->ic_data;462            if (i==FBO1_INT)463              tmpi->ic_code=IC_IMM_I64;464            else465              tmpi->ic_code=IC_IMM_F64;466          }467          break;468        case IC_OR:469          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {470            tmpi->ic_data=tmpi1->ic_data|tmpi2->ic_data;471            if (i==FBO1_INT)472              tmpi->ic_code=IC_IMM_I64;473            else474              tmpi->ic_code=IC_IMM_F64;475          }476          break;477        case IC_XOR:478          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {479            tmpi->ic_data=tmpi1->ic_data^tmpi2->ic_data;480            if (i==FBO1_INT)481              tmpi->ic_code=IC_IMM_I64;482            else483              tmpi->ic_code=IC_IMM_F64;484          }485          break;486        case IC_ADD:487          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {488            if (i==FBO1_INT) {489              tmpi->ic_data=tmpi1->ic_data+tmpi2->ic_data;490              tmpi->ic_code=IC_IMM_I64;491            } else {492              tmpi->ic_data(F64)=tmpi1->ic_data(F64)+493                    tmpi2->ic_data(F64);494              tmpi->ic_code=IC_IMM_F64;495            }496          } else {497            if (tmpi1->ic_code==IC_ABS_ADDR&&tmpi2->ic_code==IC_IMM_I64) {498              tmpi->ic_flags|=tmpi1->ic_flags|tmpi2->ic_flags;499              tmpi->ic_data=tmpi1->ic_data+tmpi2->ic_data;500              tmpi->ic_code=IC_ABS_ADDR;501              OptSetNOP1(tmpi1);502              OptSetNOP1(tmpi2);503            } else if (cc->pass==2) {504              if (tmpi1->ic_code==IC_IMM_I64) {505                if (!tmpi1->ic_data) {506                  tmpi2->ic_flags|=tmpi1->ic_flags|tmpi->ic_flags;507                  tmpi2->ic_class2=tmpi->ic_class2;508                  tmpi_push=tmpi2;509                  OptSetNOP1(tmpi1);510                  OptSetNOP1(tmpi);511                } else if (tmpi2->ic_code==IC_ADD||512                      tmpi2->ic_code==IC_SUB) {513                  if (tmpi2->t.arg1_tree->ic_code==IC_IMM_I64) {514                    tmpi2->ic_flags|=tmpi->ic_flags;515                    tmpi2->t.arg1_tree->ic_data+=tmpi1->ic_data;516                    tmpi2->ic_class2=tmpi->ic_class2;517                    tmpi_push=tmpi2;518                    OptSetNOP1(tmpi1);519                    OptSetNOP1(tmpi);520                  } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_I64) {521                    tmpi2->ic_flags|=tmpi->ic_flags;522                    if (tmpi2->ic_code==IC_ADD)523                      tmpi2->t.arg2_tree->ic_data+=tmpi1->ic_data;524                    else525                      tmpi2->t.arg2_tree->ic_data-=tmpi1->ic_data;526                    tmpi2->ic_class2=tmpi->ic_class2;527                    tmpi_push=tmpi2;528                    OptSetNOP1(tmpi1);529                    OptSetNOP1(tmpi);530                  }531                }532              } else if (tmpi2->ic_code==IC_IMM_I64) {533                if (!tmpi2->ic_data) {534                  tmpi1->ic_flags|=tmpi2->ic_flags|tmpi->ic_flags;535                  tmpi1->ic_class2=tmpi->ic_class2;536                  tmpi_push=tmpi1;537                  OptSetNOP1(tmpi2);538                  OptSetNOP1(tmpi);539                } else if (tmpi1->ic_code==IC_ADD ||540                      tmpi1->ic_code==IC_SUB) {541                  if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) {542                    tmpi1->ic_flags|=tmpi->ic_flags;543                    tmpi1->t.arg1_tree->ic_data+=tmpi2->ic_data;544                    tmpi1->ic_class2=tmpi->ic_class2;545                    tmpi_push=tmpi1;546                    OptSetNOP1(tmpi2);547                    OptSetNOP1(tmpi);548                  } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) {549                    tmpi1->ic_flags|=tmpi->ic_flags;550                    if (tmpi1->ic_code==IC_ADD)551                      tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data;552                    else553                      tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data;554                    tmpi1->ic_class2=tmpi->ic_class2;555                    tmpi_push=tmpi1;556                    OptSetNOP1(tmpi2);557                    OptSetNOP1(tmpi);558                  }559                }560              } else if (tmpi1->ic_code==IC_IMM_F64) {561                if (!tmpi1->ic_data) {562                  tmpi2->ic_flags|=tmpi1->ic_flags|tmpi->ic_flags;563                  tmpi2->ic_class2=tmpi->ic_class2;564                  tmpi_push=tmpi2;565                  OptSetNOP1(tmpi1);566                  OptSetNOP1(tmpi);567                } else if (tmpi2->ic_code==IC_ADD||568                      tmpi2->ic_code==IC_SUB) {569                  if (tmpi2->t.arg1_tree->ic_code==IC_IMM_F64) {570                    tmpi2->ic_flags|=tmpi->ic_flags;571                    tmpi2->t.arg1_tree->ic_data(F64)+=tmpi1->ic_data(F64);572                    tmpi2->ic_class2=tmpi->ic_class2;573                    tmpi_push=tmpi2;574                    OptSetNOP1(tmpi1);575                    OptSetNOP1(tmpi);576                  } else if (tmpi2->t.arg2_tree->ic_code==IC_IMM_F64) {577                    tmpi2->ic_flags|=tmpi->ic_flags;578                    if (tmpi2->ic_code==IC_ADD)579                      tmpi2->t.arg2_tree->ic_data(F64)+=tmpi1->ic_data(F64);580                    else581                      tmpi2->t.arg2_tree->ic_data(F64)-=tmpi1->ic_data(F64);582                    tmpi2->ic_class2=tmpi->ic_class2;583                    tmpi_push=tmpi2;584                    OptSetNOP1(tmpi1);585                    OptSetNOP1(tmpi);586                  }587                }588              } else if (tmpi2->ic_code==IC_IMM_F64) {589                if (!tmpi2->ic_data) {590                  tmpi1->ic_flags|=tmpi2->ic_flags|tmpi->ic_flags;591                  tmpi1->ic_class2=tmpi->ic_class2;592                  tmpi_push=tmpi1;593                  OptSetNOP1(tmpi2);594                  OptSetNOP1(tmpi);595                } else if (tmpi1->ic_code==IC_ADD ||596                      tmpi1->ic_code==IC_SUB) {597                  if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) {598                    tmpi1->ic_flags|=tmpi->ic_flags;599                    tmpi1->t.arg1_tree->ic_data(F64)+=tmpi2->ic_data(F64);600                    tmpi1->ic_class2=tmpi->ic_class2;601                    tmpi_push=tmpi1;602                    OptSetNOP1(tmpi2);603                    OptSetNOP1(tmpi);604                  } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) {605                    tmpi1->ic_flags|=tmpi->ic_flags;606                    if (tmpi1->ic_code==IC_ADD)607                      tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64);608                    else609                      tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64);610                    tmpi1->ic_class2=tmpi->ic_class2;611                    tmpi_push=tmpi1;612                    OptSetNOP1(tmpi2);613                    OptSetNOP1(tmpi);614                  }615                }616              }617            }618          }619          break;620        case IC_SUB:621          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {622            if (i==FBO1_INT) {623              tmpi->ic_data=tmpi1->ic_data-tmpi2->ic_data;624              tmpi->ic_code=IC_IMM_I64;625            } else {626              tmpi->ic_data(F64)=tmpi1->ic_data(F64)-627                    tmpi2->ic_data(F64);628              tmpi->ic_code=IC_IMM_F64;629            }630          } else {631            if (cc->pass==2) {632              if (tmpi2->ic_code==IC_IMM_I64) {633                if (!tmpi2->ic_data) {634                  tmpi1->ic_flags|=tmpi2->ic_flags|tmpi->ic_flags;635                  tmpi1->ic_class2=tmpi->ic_class2;636                  tmpi_push=tmpi1;637                  OptSetNOP1(tmpi2);638                  OptSetNOP1(tmpi);639                } else640                  if (tmpi1->ic_code==IC_ADD ||641                        tmpi1->ic_code==IC_SUB) {642                    if (tmpi1->t.arg1_tree->ic_code==IC_IMM_I64) {643                      tmpi1->ic_flags|=tmpi->ic_flags;644                      tmpi1->t.arg1_tree->ic_data-=tmpi2->ic_data;645                      tmpi1->ic_class2=tmpi->ic_class2;646                      tmpi_push=tmpi1;647                      OptSetNOP1(tmpi2);648                      OptSetNOP1(tmpi);649                    } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_I64) {650                      tmpi1->ic_flags|=tmpi->ic_flags;651                      if (tmpi1->ic_code==IC_ADD)652                        tmpi1->t.arg2_tree->ic_data-=tmpi2->ic_data;653                      else654                        tmpi1->t.arg2_tree->ic_data+=tmpi2->ic_data;655                      tmpi1->ic_class2=tmpi->ic_class2;656                      tmpi_push=tmpi1;657                      OptSetNOP1(tmpi2);658                      OptSetNOP1(tmpi);659                    }660                  }661              } else662                if (tmpi2->ic_code==IC_IMM_F64) {663                  if (!tmpi2->ic_data) {664                    tmpi1->ic_flags|=tmpi2->ic_flags|tmpi->ic_flags;665                    tmpi1->ic_class2=tmpi->ic_class2;666                    tmpi_push=tmpi1;667                    OptSetNOP1(tmpi2);668                    OptSetNOP1(tmpi);669                  } else670                    if (tmpi1->ic_code==IC_ADD || tmpi1->ic_code==IC_SUB) {671                      if (tmpi1->t.arg1_tree->ic_code==IC_IMM_F64) {672                        tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;673                        tmpi1->t.arg1_tree->ic_data(F64)-=tmpi2->ic_data(F64);674                        tmpi1->ic_class2=tmpi->ic_class2;675                        tmpi_push=tmpi1;676                        OptSetNOP1(tmpi2);677                        OptSetNOP1(tmpi);678                      } else if (tmpi1->t.arg2_tree->ic_code==IC_IMM_F64) {679                        tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;680                        if (tmpi1->ic_code==IC_ADD)681                          tmpi1->t.arg2_tree->ic_data(F64)-=tmpi2->ic_data(F64);682                        else683                          tmpi1->t.arg2_tree->ic_data(F64)+=tmpi2->ic_data(F64);684                        tmpi1->ic_class2=tmpi->ic_class2;685                        tmpi_push=tmpi1;686                        OptSetNOP1(tmpi2);687                        OptSetNOP1(tmpi);688                      }689                    }690                }691            }692          }693          break;694        case IC_AND_AND:695          if (OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {696            tmpi->ic_data=tmpi1->ic_data&&tmpi2->ic_data;697            tmpi->ic_code=IC_IMM_I64;698          }699          tmpi->ic_class=cmp.internal_types[RT_I64];700          break;701        case IC_OR_OR:702          if (OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {703            tmpi->ic_data=tmpi1->ic_data||tmpi2->ic_data;704            tmpi->ic_code=IC_IMM_I64;705          }706          tmpi->ic_class=cmp.internal_types[RT_I64];707          break;708        case IC_XOR_XOR:709          if (OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {710            tmpi->ic_data=tmpi1->ic_data^^tmpi2->ic_data;711            tmpi->ic_code=IC_IMM_I64;712          }713          tmpi->ic_class=cmp.internal_types[RT_I64];714          break;715      end:716        if (!tmpi_push->ic_class->ptr_stars_cnt) {717          if (tmpi_push->ic_class->raw_type==RT_F64)718            tmpi_push->ic_class2=cmp.internal_types[RT_F64];719          else if (is_unsigned)720            tmpi_push->ic_class2=cmp.internal_types[RT_U64];721          else722            tmpi_push->ic_class2=cmp.internal_types[RT_I64];723        }724        break;725      start:726        case IC_EQU_EQU:727          if (OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {728            tmpi->ic_data=tmpi1->ic_data==tmpi2->ic_data;729            tmpi->ic_code=IC_IMM_I64;730          } else731            if (tmpi->ic_class->raw_type==RT_F64)732              tmpi->ic_flags|=ICF_USE_F64;733          break;734        case IC_NOT_EQU:735          if (OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {736            tmpi->ic_data=tmpi1->ic_data!=tmpi2->ic_data;737            tmpi->ic_code=IC_IMM_I64;738          } else739            if (tmpi->ic_class->raw_type==RT_F64)740              tmpi->ic_flags|=ICF_USE_F64;741          break;742        case IC_LESS:743          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {744            if (i==FBO1_INT) {745              if (is_unsigned)746                tmpi->ic_data=tmpi1->ic_data(U64)<tmpi2->ic_data(U64);747              else748                tmpi->ic_data=tmpi1->ic_data(I64)<tmpi2->ic_data(I64);749            } else750              tmpi->ic_data=tmpi1->ic_data(F64)<tmpi2->ic_data(F64);751            tmpi->ic_code=IC_IMM_I64;752          } else {753            if (is_unsigned)754              tmpi->ic_flags|=ICF_USE_UNSIGNED;755            if (tmpi->ic_class->raw_type==RT_F64)756              tmpi->ic_flags|=ICF_USE_F64;757          }758          break;759        case IC_GREATER_EQU:760          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {761            if (i==FBO1_INT) {762              if (is_unsigned)763                tmpi->ic_data=tmpi1->ic_data(U64)>=tmpi2->ic_data(U64);764              else765                tmpi->ic_data=tmpi1->ic_data(I64)>=tmpi2->ic_data(I64);766            } else767              tmpi->ic_data=tmpi1->ic_data(F64)>=tmpi2->ic_data(F64);768            tmpi->ic_code=IC_IMM_I64;769          } else {770            if (is_unsigned)771              tmpi->ic_flags|=ICF_USE_UNSIGNED;772            if (tmpi->ic_class->raw_type==RT_F64)773              tmpi->ic_flags|=ICF_USE_F64;774          }775          break;776        case IC_GREATER:777          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {778            if (i==FBO1_INT) {779              if (is_unsigned)780                tmpi->ic_data=tmpi1->ic_data(U64)>tmpi2->ic_data(U64);781              else782                tmpi->ic_data=tmpi1->ic_data(I64)>tmpi2->ic_data(I64);783            } else784              tmpi->ic_data=tmpi1->ic_data(F64)>tmpi2->ic_data(F64);785            tmpi->ic_code=IC_IMM_I64;786          } else {787            if (is_unsigned)788              tmpi->ic_flags|=ICF_USE_UNSIGNED;789            if (tmpi->ic_class->raw_type==RT_F64)790              tmpi->ic_flags|=ICF_USE_F64;791          }792          break;793        case IC_LESS_EQU:794          if (i=OptFixupBinaryOp1(tmpi,tmpi1,tmpi2,&is_unsigned)) {795            if (i==FBO1_INT) {796              if (is_unsigned)797                tmpi->ic_data=tmpi1->ic_data(U64)<=tmpi2->ic_data(U64);798              else799                tmpi->ic_data=tmpi1->ic_data(I64)<=tmpi2->ic_data(I64);800            } else801              tmpi->ic_data=tmpi1->ic_data(F64)<=tmpi2->ic_data(F64);802            tmpi->ic_code=IC_IMM_I64;803          } else {804            if (is_unsigned)805              tmpi->ic_flags|=ICF_USE_UNSIGNED;806            if (tmpi->ic_class->raw_type==RT_F64)807              tmpi->ic_flags|=ICF_USE_F64;808          }809          break;810      end:811        tmpi->ic_flags&=~ICF_RES_TO_INT;812        if (!tmpi_push->ic_class->ptr_stars_cnt) {813          if (tmpi_push->ic_class->raw_type==RT_F64)814            tmpi_push->ic_class2=cmp.internal_types[RT_F64];815          else if (is_unsigned)816            tmpi_push->ic_class2=cmp.internal_types[RT_U64];817          else818            tmpi_push->ic_class2=cmp.internal_types[RT_I64];819        }820        if (tmpi_push->ic_flags & ICF_PUSH_CMP)821          tmpi->ic_class=tmpi->ic_class2;822        else823          tmpi->ic_class=cmp.internal_types[RT_I64];824        break;825      start:826        if (cc->pass==2 && (!tmpc->size||!tmpc2->size))827          LexWarn(cc,"Assign U0 ");828        start:829          case IC_MUL_EQU:830            if (tmpi2->ic_code==IC_IMM_I64 && tmpc->raw_type!=RT_F64 &&831                  tmpc2->raw_type!=RT_F64) {832              if (i=tmpi2->ic_data) {833                if (Bsf(i)==Bsr(i)) {834                  tmpi2->ic_data=Bsf(i);835                  tmpi->ic_code=IC_SHL_EQU;836                }837              }838            }839            break;840          case IC_DIV_EQU:841            if (tmpi2->ic_code==IC_IMM_I64 && tmpc->raw_type!=RT_F64 &&842                  tmpc2->raw_type!=RT_F64 &&843                  (i=tmpi2->ic_data) && Bsf(i)==Bsr(i)) {844              tmpi2->ic_data=Bsf(i);845              tmpi->ic_code=IC_SHR_EQU;846            }847            break;848          case IC_MOD_EQU:849            if (tmpi2->ic_code==IC_IMM_I64 && tmpc->raw_type!=RT_F64 &&850                  tmpc2->raw_type!=RT_F64 &&851                  (i=tmpi2->ic_data) && Bsf(i)==Bsr(i)) {852              tmpi2->ic_data=i-1;853              tmpi->ic_code=IC_AND_EQU;854            }855            break;856          case IC_ADD_EQU:857          case IC_SUB_EQU:858            break;859        end:860          if (tmpi2->ic_class->raw_type==RT_F64)861            tmpi->ic_flags=tmpi->ic_flags|ICF_USE_F64;862          if (tmpc->raw_type==RT_F64) {863            if (tmpc2->raw_type!=RT_F64)864              tmpi2->ic_flags|=ICF_RES_TO_F64;865          }866          break;867        case IC_ASSIGN:868          if (tmpc->raw_type==RT_F64) {869            if (tmpc2->raw_type!=RT_F64)870              tmpi2->ic_flags|=ICF_RES_TO_F64;871          } else {872            if (tmpc2->raw_type==RT_F64)873              tmpi2->ic_flags|=ICF_RES_TO_INT;874          }875          if (cc->pass==2 && tmpi1->ic_class->raw_type!=RT_F64) {876            if (tmpi1->ic_code==IC__PP) {877              tmpi->ic_code=IC_ASSIGN_PP;878              tmpi->ic_flags|=tmpi1->ic_flags;879              tmpi->t.class2=tmpi1->ic_class;880              OptSetNOP1(tmpi1);881            } else if (tmpi1->ic_code==IC__MM) {882              tmpi->ic_code=IC_ASSIGN_MM;883              tmpi->ic_flags|=tmpi1->ic_flags;884              tmpi->t.class2=tmpi1->ic_class;885              OptSetNOP1(tmpi1);886            }887          }888          break;889        case IC_SHL_EQU:890        case IC_SHR_EQU:891        case IC_AND_EQU:892        case IC_OR_EQU:893        case IC_XOR_EQU:894          if (tmpc2->raw_type==RT_F64)895            tmpi2->ic_flags|=ICF_RES_TO_INT;896          break;897      end:898        break;899      case IC_ENTER:900      case IC_LEAVE:901        tmpi->ic_data=-cc->htc.fun->size;902        break;903      case IC_ADD_RSP:904        if (tmpi1=OptLag(tmpi)) {905          if (tmpi1->ic_code==IC_ADD_RSP) {906            tmpi->ic_data+=tmpi1->ic_data;907            tmpi->ic_flags|=tmpi1->ic_flags;908            OptSetNOP1(tmpi1);909          }910        }911      case IC_ADD_RSP1:912        break;913      case IC_BSF:914        if (tmpi1->ic_code==IC_IMM_I64) {915          tmpi1->ic_data=Bsf(tmpi1->ic_data);916          tmpi_push=tmpi1;917          OptSetNOP1(OptLag(tmpi1));    //CALL_START918          tmpi2=OptLead1(tmpi);919          tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;920          OptSetNOP1(tmpi2);            //CALL_END921          OptSetNOP1(tmpi);             //BSF922        }923        break;924      case IC_BSR:925        if (tmpi1->ic_code==IC_IMM_I64) {926          tmpi1->ic_data=Bsr(tmpi1->ic_data);927          tmpi_push=tmpi1;928          OptSetNOP1(OptLag(tmpi1));    //CALL_START929          tmpi2=OptLead1(tmpi);930          tmpi1->ic_flags|=tmpi->ic_flags|tmpi2->ic_flags;931          OptSetNOP1(tmpi2);            //CALL_END932          OptSetNOP1(tmpi);             //BSR933        }934        break;935      case IC_LBTS:936      case IC_LBTR:937      case IC_LBTC:938        tmpi->ic_flags|=ICF_LOCK;939        break;940      case IC_TO_I64:941        if (tmpi1->ic_code==IC_IMM_F64) {942          tmpi2=tmpi1->last;943          while (tmpi2->ic_code!=IC_CALL_START)944            tmpi2=tmpi2->last;945          OptSetNOP1(tmpi2);946 947          tmpi2=tmpi->next;948          while (tmpi2->ic_code!=IC_CALL_END)949            tmpi2=tmpi2->next;950 951          tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags;952          OptSetNOP1(tmpi2);953 954          tmpi->ic_code=IC_IMM_I64;955          tmpi->ic_data=ToI64(tmpi1->ic_data(F64));956          tmpi->ic_class=cmp.internal_types[RT_I64];957          tmpi->ic_class2=cmp.internal_types[RT_I64];958          OptSetNOP1(tmpi1);959        } else if (tmpi1->ic_code==IC_IMM_I64) {960          tmpi2=tmpi1->last;961          while (tmpi2->ic_code!=IC_CALL_START)962            tmpi2=tmpi2->last;963          OptSetNOP1(tmpi2);964 965          tmpi2=tmpi->next;966          while (tmpi2->ic_code!=IC_CALL_END)967            tmpi2=tmpi2->next;968 969          tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags;970          OptSetNOP1(tmpi2);971 972          tmpi->ic_code=IC_IMM_I64;973          tmpi->ic_data=tmpi1->ic_data;974          tmpi->ic_class=cmp.internal_types[RT_I64];975          tmpi->ic_class2=cmp.internal_types[RT_I64];976          OptSetNOP1(tmpi1);977        }978        if (tmpi1->ic_flags&ICF_RES_TO_F64) {979          i=0;980          tmpi2=tmpi1->last;981          while (TRUE) {982            if (tmpi2->ic_code==IC_CALL_START) {983              if (!i) break;984              i--;985            } else if (tmpi2->ic_code==IC_CALL_END)986              i++;987            tmpi2=tmpi2->last;988          }989          OptSetNOP1(tmpi2);990 991          tmpi2=tmpi1->next;992          while (tmpi2->ic_code!=IC_CALL_END)993            tmpi2=tmpi2->next;994 995          tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags&996                ~(ICF_RES_TO_F64|ICF_PUSH_RES)|tmpi2->ic_flags;997          OptSetNOP1(tmpi2);998 999          tmpi1->ic_class=cmp.internal_types[RT_I64];1000          tmpi1->ic_class2=cmp.internal_types[RT_I64];1001          tmpi_push=tmpi1;1002          OptSetNOP1(tmpi);1003        }1004        break;1005      case IC_TO_F64:1006        if (tmpi1->ic_code==IC_IMM_I64) {1007          tmpi2=tmpi1->last;1008          while (tmpi2->ic_code!=IC_CALL_START)1009            tmpi2=tmpi2->last;1010          OptSetNOP1(tmpi2);1011 1012          tmpi2=tmpi->next;1013          while (tmpi2->ic_code!=IC_CALL_END)1014            tmpi2=tmpi2->next;1015 1016          tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags;1017          OptSetNOP1(tmpi2);1018 1019          tmpi->ic_code=IC_IMM_F64;1020          tmpi->ic_data(F64)=ToF64(tmpi1->ic_data);1021          tmpi->ic_class=cmp.internal_types[RT_F64];1022          tmpi->ic_class2=cmp.internal_types[RT_F64];1023          OptSetNOP1(tmpi1);1024        } else if (tmpi1->ic_code==IC_IMM_F64) {1025          tmpi2=tmpi1->last;1026          while (tmpi2->ic_code!=IC_CALL_START)1027            tmpi2=tmpi2->last;1028          OptSetNOP1(tmpi2);1029 1030          tmpi2=tmpi->next;1031          while (tmpi2->ic_code!=IC_CALL_END)1032            tmpi2=tmpi2->next;1033 1034          tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_INT|tmpi2->ic_flags;1035          OptSetNOP1(tmpi2);1036 1037          tmpi->ic_code=IC_IMM_F64;1038          tmpi->ic_data=tmpi1->ic_data;1039          tmpi->ic_class=cmp.internal_types[RT_F64];1040          tmpi->ic_class2=cmp.internal_types[RT_F64];1041          OptSetNOP1(tmpi1);1042        }1043        if (tmpi1->ic_flags&ICF_RES_TO_INT) {1044          i=0;1045          tmpi2=tmpi1->last;1046          while (TRUE) {1047            if (tmpi2->ic_code==IC_CALL_START) {1048              if (!i) break;1049              i--;1050            } else if (tmpi2->ic_code==IC_CALL_END)1051              i++;1052            tmpi2=tmpi2->last;1053          }1054          OptSetNOP1(tmpi2);1055 1056          tmpi2=tmpi1->next;1057          while (tmpi2->ic_code!=IC_CALL_END)1058            tmpi2=tmpi2->next;1059 1060          tmpi1->ic_flags=tmpi->ic_flags|tmpi1->ic_flags&1061                ~(ICF_RES_TO_INT|ICF_PUSH_RES)|tmpi2->ic_flags;1062          OptSetNOP1(tmpi2);1063 1064          tmpi1->ic_class=cmp.internal_types[RT_F64];1065          tmpi1->ic_class2=cmp.internal_types[RT_F64];1066          tmpi_push=tmpi1;1067          OptSetNOP1(tmpi);1068        }1069        break;1070      case IC_TO_BOOL:1071        if (tmpi1->ic_code==IC_IMM_I64 || tmpi1->ic_code==IC_IMM_F64) {1072          tmpi2=tmpi1->last;1073          while (tmpi2->ic_code!=IC_CALL_START)1074            tmpi2=tmpi2->last;1075          OptSetNOP1(tmpi2);1076 1077          tmpi2=tmpi->next;1078          while (tmpi2->ic_code!=IC_CALL_END)1079            tmpi2=tmpi2->next;1080 1081          tmpi->ic_flags|=tmpi1->ic_flags&~ICF_RES_TO_F64|tmpi2->ic_flags;1082          OptSetNOP1(tmpi2);1083 1084          tmpi->ic_code=IC_IMM_I64;1085          tmpi->ic_data=ToBool(tmpi1->ic_data);1086          tmpi->ic_class=cmp.internal_types[RT_I64];1087          tmpi->ic_class2=cmp.internal_types[RT_I64];1088          OptSetNOP1(tmpi1);1089        }1090        break;1091      case IC_BR_ZERO:1092        tmpi_push=OptBrZero(cc,tmpi);1093        break;1094      case IC_BR_NOT_ZERO:1095        tmpi_push=OptBrNotZero(cc,tmpi);1096        break;1097      case IC_NOP1:1098        if (tmpi->ic_flags&ICF_PUSH_RES) {1099          tmpi1=tmpi;1100          do tmpi1=tmpi1->last;1101          while (tmpi1->ic_code==IC_NOP1);1102          tmpi1->ic_flags|=ICF_PUSH_RES;1103          tmpi->ic_flags&=~ICF_PUSH_RES;1104        }1105        break;1106      case IC_NOP2:1107        ps->ptr+=tmpi->ic_data<<1;1108        break;1109      case IC_LABEL:1110        lb=OptLabelFwd(tmpi->ic_data);1111        lb1=tmpi->ic_data;1112        while (lb2=lb1->fwd) {1113          lb1->fwd=lb;1114          lb1=lb2;1115        }1116        if (tmpi1=OptLag(tmpi)) {1117          if (tmpi1->ic_code==IC_JMP) {1118            lb1=tmpi1->ic_data;1119            while (lb1->fwd)1120              lb1=lb1->fwd;1121            if (lb1==lb) {1122              tmpi->ic_flags|=tmpi1->ic_flags;1123              OptSetNOP1(tmpi1);1124            }1125          } else if (tmpi1->ic_code==IC_LABEL) {1126            lb1=tmpi1->ic_data;1127            if (!lb1->fwd)1128              lb1->fwd=lb;1129            if (tmpi1=OptLag(tmpi1)) {1130              if (tmpi1->ic_code==IC_JMP) {1131                lb1=tmpi1->ic_data;1132                while (lb1->fwd)1133                  lb1=lb1->fwd;1134                if (lb1==lb) {1135                  tmpi->ic_flags|=tmpi1->ic_flags;1136                  OptSetNOP1(tmpi1);1137                }1138              }1139            }1140          }1141        }1142        break;1143      case IC_JMP:1144        if (tmpi1=OptLag(tmpi)) {1145          if (tmpi1->ic_code==IC_LABEL) {1146            lb=OptLabelFwd(tmpi->ic_data);1147            lb1=OptLabelFwd(tmpi1->ic_data);1148            if (lb!=lb1)1149              lb1->fwd=lb;1150          }1151        }1152        break;1153      case IC_STR_CONST:1154      case IC_RBP:1155      case IC_MOV_FS:1156      case IC_MOV_GS:1157      case IC_RIP:1158      case IC_SIZEOF:1159      case IC_SQR:1160      case IC_ABS:1161      case IC_SQRT:1162      case IC_SIN:1163      case IC_COS:1164      case IC_TAN:1165      case IC_ATAN:1166      case IC_BR_CARRY:1167      case IC_BR_NOT_CARRY:1168      case IC_BR_EQU_EQU ...IC_BR_LESS_EQU:1169      case IC_BR_EQU_EQU2...IC_BR_LESS_EQU2:1170      case IC_BR_OR_OR_NOT_ZERO:1171      case IC_BR_OR_OR_ZERO:1172      case IC_BR_AND_AND_NOT_ZERO:1173      case IC_BR_AND_AND_ZERO:1174      case IC_BR_AND_NOT_ZERO:1175      case IC_BR_AND_ZERO:1176      case IC_BR_MM_NOT_ZERO:1177      case IC_BR_MM_ZERO:1178      case IC_BR_BT:1179      case IC_BR_BTS:1180      case IC_BR_BTR:1181      case IC_BR_BTC:1182      case IC_BR_NOT_BT:1183      case IC_BR_NOT_BTS:1184      case IC_BR_NOT_BTR:1185      case IC_BR_NOT_BTC:1186      case IC_END:1187      case IC_ADDR:1188      case IC_RET:1189      case IC_END_EXP:1190      case IC_CALL_START:1191      case IC_CALL_END:1192      case IC_CALL_END2:1193      case IC_PUSH_REGS:1194      case IC_POP_REGS:1195      case IC_SUB_CALL:1196      case IC_CALL:1197      case IC_CALL_INDIRECT:1198      case IC_CALL_INDIRECT2:1199      case IC_CALL_EXTERN:1200      case IC_CALL_IMPORT:

Showing the first 1,200 of 1290 lines. Download the file for the rest.