diff --git a/include/Procedure.h b/include/Procedure.h index 72f1bdc..f78576e 100644 --- a/include/Procedure.h +++ b/include/Procedure.h @@ -120,11 +120,12 @@ public: void newRegArg(ICODE *picode, ICODE *ticode); protected: // TODO: replace those with friend visitor ? - void propLongReg(Int loc_ident_idx, ID *pLocId); + void propLongReg(Int loc_ident_idx, const ID *pLocId); void propLongStk(Int i, ID *pLocId); void propLongGlb(Int i, ID *pLocId); - int checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId_idx, Assignment &assign); + int checkBackwarLongDefs(int loc_ident_idx, const ID &pLocId, iICODE iter, Assignment &assign); + int checkForwardLongDefs(int loc_ident_idx, const ID &pLocId, iICODE beg, Assignment &asgn); void structCases(); void findExps(); void genDU1(); diff --git a/include/dcc.h b/include/dcc.h index 6f5db89..1142da3 100644 --- a/include/dcc.h +++ b/include/dcc.h @@ -204,8 +204,8 @@ Int power2 (Int); void inverseCondOp (COND_EXPR **); /* Exported funcions from locident.c */ -boolT checkLongEq (LONG_STKID_TYPE, iICODE, Int, Int, Function *, COND_EXPR **,COND_EXPR **, Int); -boolT checkLongRegEq (LONGID_TYPE, iICODE, Int, Int, Function *, COND_EXPR *&, COND_EXPR *&, Int); +boolT checkLongEq (LONG_STKID_TYPE, iICODE, Int, Function *, COND_EXPR **, COND_EXPR **, Int); +boolT checkLongRegEq (LONGID_TYPE, iICODE, Int, Function *, COND_EXPR *&, COND_EXPR *&, Int); byte otherLongRegi (byte, Int, LOCAL_ID *); void insertIdx (IDX_ARRAY *, Int); diff --git a/include/locident.h b/include/locident.h index a5f9941..b41527a 100644 --- a/include/locident.h +++ b/include/locident.h @@ -7,9 +7,12 @@ #pragma once #include +#include #include #include "icode.h" /* Type definition */ +// this array has to stay in-order of addition i.e. not std::set > +// TODO: why ? struct IDX_ARRAY : public std::vector { bool inList(iICODE idx) diff --git a/regression_tester.rb b/regression_tester.rb index eee5c67..6d530bf 100755 --- a/regression_tester.rb +++ b/regression_tester.rb @@ -7,14 +7,15 @@ def path_local(from) from.gsub('/','\\\\') end TESTS_DIR="./tests" -def perform_test(exepath,filepath,outname) +def perform_test(exepath,filepath,outname,args) output_path=path_local(TESTS_DIR+"/outputs/"+outname) exepath=path_local(exepath) output_path=path_local(output_path) filepath=path_local(filepath) - printf("calling:" + "#{exepath} -a1 -o#{output_path}.a1 #{filepath}\n") + joined_args = args.join(' ') + printf("calling:" + "#{exepath} -a1 #{joined_args} -o#{output_path}.a1 #{filepath}\n") result = `#{exepath} -a1 -o#{output_path}.a1 #{filepath}` - result = `#{exepath} -a2msc -V -o#{output_path}.a2 #{filepath}` + result = `#{exepath} -a2 #{joined_args} -o#{output_path}.a2 #{filepath}` puts result p $? end @@ -22,7 +23,7 @@ end #exit(1) Dir.open(TESTS_DIR+"/inputs").each() {|f| next if f=="." or f==".." - perform_test(".//"+ARGV[0],TESTS_DIR+"/inputs/"+f,f) + perform_test(".//"+ARGV[0],TESTS_DIR+"/inputs/"+f,f,ARGV[1..-1]) } Dir.open(TESTS_DIR+"/inputs").each() {|f| next if f=="." or f==".." diff --git a/src/ast.cpp b/src/ast.cpp index abd840e..a7351dc 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -48,17 +48,17 @@ void ICODE::setRegDU (byte regi, operDu du_in) case eDEF: du.def |= duReg[regi]; du1.numRegsDef++; - printf("%s du.def |= %x\n",__FUNCTION__,duReg[regi]); +// printf("%s du.def |= %x\n",__FUNCTION__,duReg[regi]); break; case eUSE: du.use |= duReg[regi]; - printf("%s du.use |= %x\n",__FUNCTION__,duReg[regi]); +// printf("%s du.use |= %x\n",__FUNCTION__,duReg[regi]); break; case USE_DEF: du.def |= duReg[regi]; du1.numRegsDef++; - printf("%s du.def |= %x\n",__FUNCTION__,duReg[regi]); - printf("%s du.use |= %x\n",__FUNCTION__,duReg[regi]); +// printf("%s du.def |= %x\n",__FUNCTION__,duReg[regi]); +// printf("%s du.use |= %x\n",__FUNCTION__,duReg[regi]); du.use |= duReg[regi]; break; case NONE: /* do nothing */ @@ -259,7 +259,8 @@ COND_EXPR *COND_EXPR::idLongIdx (Int idx) /* Returns an identifier conditional expression node of type LONG_VAR */ COND_EXPR *COND_EXPR::idLong(LOCAL_ID *localId, opLoc sd, iICODE pIcode, hlFirst f, iICODE ix, operDu du, Int off) { - printf("**************** is equal %s ***************** \n",pIcode==ix ? "yes":"no"); + //assert(pIcode==ix); + //printf("**************** Not EQUAL ***************** \n"); Int idx; COND_EXPR *newExp = new COND_EXPR(IDENTIFIER); diff --git a/src/locident.cpp b/src/locident.cpp index 2483a15..4ce2ca4 100644 --- a/src/locident.cpp +++ b/src/locident.cpp @@ -137,17 +137,19 @@ Int LOCAL_ID::newLongReg(hlType t, byte regH, byte regL, iICODE ix_) /* Check for entry in the table */ for (idx = 0; idx < id_arr.size(); idx++) { + ID &entry(id_arr[idx]); if (/*(locSym->id[idx].type == t) && Not checking type */ - (id_arr[idx].id.longId.h == regH) && - (id_arr[idx].id.longId.l == regL)) + (entry.id.longId.h == regH) && + (entry.id.longId.l == regL)) { /* Check for occurrence in the list */ - if (id_arr[idx].idx.inList(ix_)) + if (entry.idx.inList(ix_)) //count( return (idx); else { /* Insert icode index in list */ - id_arr[idx].idx.push_back(ix_); + entry.idx.push_back(ix_); + //entry.idx.insert(ix_); return (idx); } } @@ -155,7 +157,7 @@ Int LOCAL_ID::newLongReg(hlType t, byte regH, byte regL, iICODE ix_) /* Not in the table, create new identifier */ newIdent (t, REG_FRAME); - id_arr[id_arr.size()-1].idx.push_back(ix_); + id_arr[id_arr.size()-1].idx.push_back(ix_);//insert(ix_); idx = id_arr.size() - 1; id_arr[idx].id.longId.h = regH; id_arr[idx].id.longId.l = regL; @@ -306,7 +308,7 @@ Int LOCAL_ID::newLong(opLoc sd, ICODE *pIcode, hlFirst f, iICODE ix,operDu du, I * idx : idx into icode array * pProc : ptr to current procedure record * rhs, lhs : return expressions if successful. */ -boolT checkLongEq (LONG_STKID_TYPE longId, iICODE pIcode, Int i, Int idx, +boolT checkLongEq (LONG_STKID_TYPE longId, iICODE pIcode, Int i, Function * pProc, COND_EXPR **rhs, COND_EXPR **lhs, Int off) { LLOperand *pmHdst, *pmLdst, *pmHsrc, *pmLsrc; /* pointers to LOW_LEVEL icodes */ @@ -347,8 +349,8 @@ boolT checkLongEq (LONG_STKID_TYPE longId, iICODE pIcode, Int i, Int idx, * idx : idx into icode array * pProc : ptr to current procedure record * rhs, lhs : return expressions if successful. */ -boolT checkLongRegEq (LONGID_TYPE longId, iICODE pIcode, Int i, Int idx, - Function * pProc, COND_EXPR *&rhs, COND_EXPR *&lhs, Int off) +boolT checkLongRegEq (LONGID_TYPE longId, iICODE pIcode, Int i, + Function * pProc, COND_EXPR *&rhs, COND_EXPR *&lhs, Int off) { LLOperand *pmHdst, *pmLdst, *pmHsrc, *pmLsrc; /* pointers to LOW_LEVEL icodes */ diff --git a/src/proplong.cpp b/src/proplong.cpp index 21f8068..e30eb7b 100644 --- a/src/proplong.cpp +++ b/src/proplong.cpp @@ -56,6 +56,40 @@ static boolT isLong23 (Int i, BB * pbb, Int *off, Int *arc) } return false; } +static boolT isLong23 (iICODE iter, BB * pbb, Int *off, Int *arc) +{ + BB * t, * e, * obb2; + + if (pbb->nodeType != TWO_BRANCH) + return false; + t = pbb->edges[THEN].BBptr; + e = pbb->edges[ELSE].BBptr; + + /* Check along the THEN path */ + if ((t->size() == 1) && (t->nodeType == TWO_BRANCH) && (t->inEdges.size() == 1)) + { + obb2 = t->edges[THEN].BBptr; + if ((obb2->size() == 2) && (obb2->nodeType == TWO_BRANCH) && (obb2->front().ic.ll.opcode == iCMP)) + { + *off = std::distance(iter,obb2->begin2()); + *arc = THEN; + return true; + } + } + + /* Check along the ELSE path */ + else if ((e->size() == 1) && (e->nodeType == TWO_BRANCH) && (e->inEdges.size() == 1)) + { + obb2 = e->edges[THEN].BBptr; + if ((obb2->size() == 2) && (obb2->nodeType == TWO_BRANCH) && (obb2->front().ic.ll.opcode == iCMP)) + { + *off = std::distance(iter,obb2->begin2());//obb2->front().loc_ip - i; + *arc = ELSE; + return true; + } + } + return false; +} /* Returns whether the conditions for a 2-2 long variable are satisfied */ @@ -77,14 +111,16 @@ static boolT isLong22 (iICODE pIcode, iICODE pEnd, Int *off) } -/* Creates a long conditional <=, >=, <, or > at (pIcode+1). +/** Creates a long conditional <=, >=, <, or > at (pIcode+1). * Removes excess nodes from the graph by flagging them, and updates - * the new edges for the remaining nodes. */ -static void longJCond23 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, - Int *idx, Int arc, Int off) + * the new edges for the remaining nodes. + * @return number of ICODEs to skip + +*/ +static int longJCond23 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, Int arc, Int off) { BB * pbb, * obb1, * obb2, * tbb; - + int skipped_insn=0; if (arc == THEN) { /* Find intermediate basic blocks and target block */ @@ -109,7 +145,7 @@ static void longJCond23 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, assert(iter!=tbb->inEdges.end()); tbb->inEdges.erase(iter); /* looses 1 arc */ /* Update icode index */ - (*idx) += 5; + skipped_insn = 5; } else /* ELSE arc */ { @@ -135,31 +171,34 @@ static void longJCond23 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, pbb->edges[ELSE].BBptr = tbb; /* Update icode index */ - (*idx) += 2; + skipped_insn = 2; } - /* Create new HLI_JCOND and condition */ - lhs = COND_EXPR::boolOp (lhs, rhs, condOpJCond[(pIcode+off+1)->ic.ll.opcode-iJB]); - (pIcode+1)->setJCond(lhs); - (pIcode+1)->copyDU(*pIcode, eUSE, eUSE); -(pIcode+1)->du.use |= (pIcode+off)->du.use; + /* Create new HLI_JCOND and condition */ + lhs = COND_EXPR::boolOp (lhs, rhs, condOpJCond[(pIcode+off+1)->ic.ll.opcode-iJB]); + (pIcode+1)->setJCond(lhs); + (pIcode+1)->copyDU(*pIcode, eUSE, eUSE); + (pIcode+1)->du.use |= (pIcode+off)->du.use; -/* Update statistics */ -obb1->flg |= INVALID_BB; -obb2->flg |= INVALID_BB; -stats.numBBaft -= 2; + /* Update statistics */ + obb1->flg |= INVALID_BB; + obb2->flg |= INVALID_BB; + stats.numBBaft -= 2; -pIcode->invalidate(); -obb1->front().invalidate(); -obb2->front().invalidate(); -(obb2->begin2()+1)->invalidate(); + pIcode->invalidate(); + obb1->front().invalidate(); + obb2->front().invalidate(); + (obb2->begin2()+1)->invalidate(); + return skipped_insn; } -/* Creates a long conditional equality or inequality at (pIcode+1). +/** Creates a long conditional equality or inequality at (pIcode+1). * Removes excess nodes from the graph by flagging them, and updates - * the new edges for the remaining nodes. */ -static void longJCond22 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, Int *idx) + * the new edges for the remaining nodes. + * @return number of ICODE's to skip +*/ +static int longJCond22 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode) { Int j; BB * pbb, * obb1, * tbb; @@ -174,7 +213,7 @@ static void longJCond22 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, Int *idx /* Adjust outEdges[0] to the new target basic block */ pbb = pIcode->inBB; - if (pbb->back().loc_ip == (*idx + 1)) + if (pbb->back().loc_ip == next1->loc_ip) { /* Find intermediate and target basic blocks */ obb1 = pbb->edges[THEN].BBptr; @@ -209,7 +248,7 @@ static void longJCond22 (COND_EXPR *rhs, COND_EXPR *lhs, iICODE pIcode, Int *idx pIcode->invalidate(); next2->invalidate(); next3->invalidate(); - (*idx) += 4; + return 4; } /* Propagates TYPE_LONG_(UN)SIGN icode information to the current pIcode @@ -236,7 +275,7 @@ void Function::propLongStk (Int i, ID *pLocId) switch (pIcode->ic.ll.opcode) { case iMOV: - if (checkLongEq (pLocId->id.longStkId, pIcode, i, idx, this, + if (checkLongEq (pLocId->id.longStkId, pIcode, i, this, &rhs, &lhs, 1) == TRUE) { pIcode->setAsgn(lhs, rhs); @@ -246,7 +285,7 @@ void Function::propLongStk (Int i, ID *pLocId) break; case iAND: case iOR: case iXOR: - if (checkLongEq (pLocId->id.longStkId, pIcode, i, idx, this, + if (checkLongEq (pLocId->id.longStkId, pIcode, i, this, &rhs, &lhs, 1) == TRUE) { switch (pIcode->ic.ll.opcode) @@ -265,7 +304,7 @@ void Function::propLongStk (Int i, ID *pLocId) break; case iPUSH: - if (checkLongEq (pLocId->id.longStkId, pIcode, i, idx, this, + if (checkLongEq (pLocId->id.longStkId, pIcode, i, this, &rhs, &lhs, 1) == TRUE) { pIcode->setUnary( HLI_PUSH, lhs); @@ -279,30 +318,32 @@ void Function::propLongStk (Int i, ID *pLocId) /* Check long conditional (i.e. 2 CMPs and 3 branches */ else if ((pIcode->ic.ll.opcode == iCMP) && (isLong23 (idx, pIcode->inBB, &off, &arc))) { - if (checkLongEq (pLocId->id.longStkId, pIcode, i, idx, this, &rhs, &lhs, off) == TRUE) - longJCond23 (rhs, lhs, pIcode, &idx, arc, off); + if ( checkLongEq (pLocId->id.longStkId, pIcode, i, this, &rhs, &lhs, off) ) + { + idx += longJCond23 (rhs, lhs, pIcode, arc, off); // + } } /* Check for long conditional equality or inequality. This requires * 2 CMPs and 2 branches */ - else if ((pIcode->ic.ll.opcode == iCMP) && - isLong22 (pIcode, pEnd, &off)) + else if ((pIcode->ic.ll.opcode == iCMP) && isLong22 (pIcode, pEnd, &off)) { - if (checkLongEq (pLocId->id.longStkId, pIcode, i, idx, this, - &rhs, &lhs, off) == TRUE) - longJCond22 (rhs, lhs, pIcode, &idx); + if ( checkLongEq (pLocId->id.longStkId, pIcode, i, this,&rhs, &lhs, off) ) + { + idx += longJCond22 (rhs, lhs, pIcode); // maybe this should have -1 to offset loop autoincrement? + } } } } -void checkBack(); -int Function::checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId_idx,Assignment &asgn) +int Function::checkBackwarLongDefs(int loc_ident_idx, const ID &pLocId, iICODE beg,Assignment &asgn) { - int idx; LLOperand * pmH,* pmL; iICODE pIcode; - for (idx = pLocId_idx - 1; idx > 0 ; idx--) + riICODE rev(beg); + bool forced_finish=false; + for (; not forced_finish and rev!=Icode.rend();rev++) //idx = pLocId_idx - 1; idx > 0 ; idx-- { - pIcode = Icode.begin()+(idx-1); + pIcode = (rev+1).base();//Icode.begin()+(idx-1); if ((pIcode->type == HIGH_LEVEL) || (pIcode->invalid == TRUE)) continue; @@ -313,28 +354,28 @@ int Function::checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId case iMOV: pmH = &pIcode->ic.ll.dst; pmL = &(pIcode+1)->ic.ll.dst; - if ((pLocId->id.longId.h == pmH->regi) && (pLocId->id.longId.l == pmL->regi)) + if ((pLocId.id.longId.h == pmH->regi) && (pLocId.id.longId.l == pmL->regi)) { asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); - this->localId.id_arr[loc_ident_idx].idx.push_back(pIcode);//idx-1 + this->localId.id_arr[loc_ident_idx].idx.push_back(pIcode);//idx-1//insert pIcode->setRegDU( pmL->regi, eDEF); asgn.rhs = COND_EXPR::idLong (&this->localId, SRC, pIcode, HIGH_FIRST, pIcode/*idx*/, eUSE, 1); pIcode->setAsgn(asgn.lhs, asgn.rhs); (pIcode+1)->invalidate(); - idx = 0; /* to exit the loop */ + forced_finish=true; /* to exit the loop */ } break; case iPOP: pmH = &(pIcode+1)->ic.ll.dst; pmL = &pIcode->ic.ll.dst; - if ((pLocId->id.longId.h == pmH->regi) && (pLocId->id.longId.l == pmL->regi)) + if ((pLocId.id.longId.h == pmH->regi) && (pLocId.id.longId.l == pmL->regi)) { asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); pIcode->setRegDU( pmH->regi, eDEF); pIcode->setUnary(HLI_POP, asgn.lhs); (pIcode+1)->invalidate(); - idx = 0; /* to exit the loop */ + forced_finish=true; /* to exit the loop */ } break; @@ -343,7 +384,7 @@ int Function::checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId case iAND: case iOR: case iXOR: pmL = &pIcode->ic.ll.dst; pmH = &(pIcode+1)->ic.ll.dst; - if ((pLocId->id.longId.h == pmH->regi) && (pLocId->id.longId.l == pmL->regi)) + if ((pLocId.id.longId.h == pmH->regi) && (pLocId.id.longId.l == pmL->regi)) { asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); pIcode->setRegDU( pmH->regi, USE_DEF); @@ -359,12 +400,127 @@ int Function::checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId } /* eos */ pIcode->setAsgn(asgn.lhs, asgn.rhs); (pIcode+1)->invalidate(); - idx = 0; + forced_finish=true; /* to exit the loop */ } break; } /* eos */ } - return idx; + return rev!=Icode.rend(); +} +int Function::checkForwardLongDefs(int loc_ident_idx, const ID &pLocId, iICODE beg,Assignment &asgn) +{ + bool forced_finish=false; + auto pEnd=Icode.end(); + for (auto pIcode=beg; not forced_finish and ((pIcode+1)!=Icode.end()); ++pIcode) + { + iICODE next1(pIcode+1); + LLOperand * pmH,* pmL; /* Pointers to dst LOW_LEVEL icodes */ + int off,arc; + + if ((pIcode->type == HIGH_LEVEL) || (pIcode->invalid == TRUE)) + continue; + + if (pIcode->ic.ll.opcode == next1->ic.ll.opcode) + switch (pIcode->ic.ll.opcode) + { + case iMOV: + if ((pLocId.id.longId.h == pIcode->ic.ll.src.regi) && + (pLocId.id.longId.l == next1->ic.ll.src.regi)) + { + asgn.rhs = COND_EXPR::idLongIdx (loc_ident_idx); + pIcode->setRegDU( next1->ic.ll.src.regi, eUSE); + asgn.lhs = COND_EXPR::idLong (&this->localId, DST, pIcode,HIGH_FIRST, pIcode, eDEF, 1); + pIcode->setAsgn(asgn.lhs, asgn.rhs); + next1->invalidate(); + forced_finish =true; /* to exit the loop */ + } + break; + + case iPUSH: + if ((pLocId.id.longId.h == pIcode->ic.ll.src.regi) && + (pLocId.id.longId.l == next1->ic.ll.src.regi)) + { + asgn.rhs = COND_EXPR::idLongIdx (loc_ident_idx); + pIcode->setRegDU( next1->ic.ll.src.regi, eUSE); + pIcode->setUnary(HLI_PUSH, asgn.lhs); + next1->invalidate(); + } + forced_finish =true; /* to exit the loop */ + break; + + /*** others missing ****/ + + case iAND: case iOR: case iXOR: + pmL = &pIcode->ic.ll.dst; + pmH = &next1->ic.ll.dst; + if ((pLocId.id.longId.h == pmH->regi) && + (pLocId.id.longId.l == pmL->regi)) + { + asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); + pIcode->setRegDU( pmH->regi, USE_DEF); + asgn.rhs = COND_EXPR::idLong (&this->localId, SRC, pIcode, + LOW_FIRST, pIcode/*idx*/, eUSE, 1); + switch (pIcode->ic.ll.opcode) { + case iAND: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, AND); + break; + case iOR: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, OR); + break; + case iXOR: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, XOR); + break; + } + pIcode->setAsgn(asgn.lhs, asgn.rhs); + (pIcode+1)->invalidate(); + // ftw loop restart ???? + //idx = 0; + // maybe this should end the loop instead + forced_finish =true; /* to exit the loop */ + } + break; + } /* eos */ + + /* Check long conditional (i.e. 2 CMPs and 3 branches */ + else if ((pIcode->ic.ll.opcode == iCMP) && (isLong23 (pIcode, pIcode->inBB, &off, &arc))) + { + if (checkLongRegEq (pLocId.id.longId, pIcode, loc_ident_idx, this, + asgn.rhs, asgn.lhs, off) == TRUE) + { + pIcode += longJCond23 (asgn.rhs, asgn.lhs, pIcode, arc, off); + } + } + + /* Check for long conditional equality or inequality. This requires + * 2 CMPs and 2 branches */ + else if ((pIcode->ic.ll.opcode == iCMP) && + (isLong22 (pIcode, pEnd, &off))) + { + if (checkLongRegEq (pLocId.id.longId, pIcode, loc_ident_idx, this, + asgn.rhs, asgn.lhs, off) == TRUE) + { + pIcode += longJCond22 (asgn.rhs, asgn.lhs, pIcode); + } + } + + /* Check for OR regH, regL + * JX lab + * => HLI_JCOND (regH:regL X 0) lab + * This is better code than HLI_JCOND (HI(regH:regL) | LO(regH:regL)) */ + else if ((pIcode->ic.ll.opcode == iOR) && (next1 < pEnd) && + (isJCond (next1->ic.ll.opcode))) + { + if ((pIcode->ic.ll.dst.regi == pLocId.id.longId.h) && + (pIcode->ic.ll.src.regi == pLocId.id.longId.l)) + { + asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); + + asgn.rhs = COND_EXPR::idKte (0, 4); /* long 0 */ + asgn.lhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, condOpJCond[next1->ic.ll.opcode - iJB]); + next1->setJCond(asgn.lhs); + next1->copyDU(*pIcode, eUSE, eUSE); + pIcode->invalidate(); + } + } + + } /* end for */ } /* Finds the definition of the long register pointed to by pLocId, and @@ -372,129 +528,28 @@ int Function::checkBackwarLongDefs(int loc_ident_idx, ID *pLocId, int pLocId * Arguments: i : index into the local identifier table * pLocId: ptr to the long local identifier * pProc : ptr to current procedure's record. */ -void Function::propLongReg (Int loc_ident_idx, ID *pLocId) +void Function::propLongReg (Int loc_ident_idx, const ID *pLocId) { Int idx; iICODE pEnd; /* Process all definitions/uses of long registers at an icode position */ pEnd = this->Icode.end(); + const IDX_ARRAY &lidx(pLocId->idx); // for (int pLocId_idx : pLocId->idx) // WARNING: this loop modifies the iterated-over container. for (int j = 0; j < pLocId->idx.size(); j++) { - int pLocId_idx=std::distance(Icode.begin(),pLocId->idx[j]); + auto idx_iter=lidx.begin(); + std::advance(idx_iter,j); + //assert(*idx_iter==lidx.z[j]); + int pLocId_idx=std::distance(Icode.begin(),*idx_iter); Assignment asgn; /* Check backwards for a definition of this long register */ - idx = checkBackwarLongDefs(loc_ident_idx,pLocId,pLocId_idx,asgn); - /* If no definition backwards, check forward for a use of this long reg */ - if (idx > 0) + if (checkBackwarLongDefs(loc_ident_idx,*pLocId,*idx_iter,asgn)) continue; - for (idx = pLocId_idx + 1; idx < Icode.size() - 1; idx++) - { - iICODE pIcode(Icode.begin()),next1(Icode.begin()); - LLOperand * pmH,* pmL; /* Pointers to dst LOW_LEVEL icodes */ - int off,arc; - std::advance(pIcode,idx); - std::advance(next1,idx+1); - - if ((pIcode->type == HIGH_LEVEL) || (pIcode->invalid == TRUE)) - continue; - - if (pIcode->ic.ll.opcode == next1->ic.ll.opcode) - switch (pIcode->ic.ll.opcode) - { - case iMOV: - if ((pLocId->id.longId.h == pIcode->ic.ll.src.regi) && - (pLocId->id.longId.l == next1->ic.ll.src.regi)) - { - asgn.rhs = COND_EXPR::idLongIdx (loc_ident_idx); - pIcode->setRegDU( next1->ic.ll.src.regi, eUSE); - asgn.lhs = COND_EXPR::idLong (&this->localId, DST, pIcode,HIGH_FIRST, pIcode/*idx*/, eDEF, 1); - pIcode->setAsgn(asgn.lhs, asgn.rhs); - next1->invalidate(); - idx = this->Icode.size(); /* to exit the loop */ - } - break; - - case iPUSH: - if ((pLocId->id.longId.h == pIcode->ic.ll.src.regi) && - (pLocId->id.longId.l == next1->ic.ll.src.regi)) - { - asgn.rhs = COND_EXPR::idLongIdx (loc_ident_idx); - pIcode->setRegDU( next1->ic.ll.src.regi, eUSE); - pIcode->setUnary(HLI_PUSH, asgn.lhs); - next1->invalidate(); - } - idx = this->Icode.size(); /* to exit the loop */ - break; - - /*** others missing ****/ - - case iAND: case iOR: case iXOR: - pmL = &pIcode->ic.ll.dst; - pmH = &next1->ic.ll.dst; - if ((pLocId->id.longId.h == pmH->regi) && - (pLocId->id.longId.l == pmL->regi)) - { - asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); - pIcode->setRegDU( pmH->regi, USE_DEF); - asgn.rhs = COND_EXPR::idLong (&this->localId, SRC, pIcode, - LOW_FIRST, pIcode/*idx*/, eUSE, 1); - switch (pIcode->ic.ll.opcode) { - case iAND: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, AND); - break; - case iOR: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, OR); - break; - case iXOR: asgn.rhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, XOR); - break; - } - pIcode->setAsgn(asgn.lhs, asgn.rhs); - (pIcode+1)->invalidate(); - idx = 0; - } - break; - } /* eos */ - - /* Check long conditional (i.e. 2 CMPs and 3 branches */ - else if ((pIcode->ic.ll.opcode == iCMP) && (isLong23 (idx, pIcode->inBB, &off, &arc))) - { - if (checkLongRegEq (pLocId->id.longId, pIcode, loc_ident_idx, idx, this, - asgn.rhs, asgn.lhs, off) == TRUE) - longJCond23 (asgn.rhs, asgn.lhs, pIcode, &idx, arc, off); - } - - /* Check for long conditional equality or inequality. This requires - * 2 CMPs and 2 branches */ - else if ((pIcode->ic.ll.opcode == iCMP) && - (isLong22 (pIcode, pEnd, &off))) - { - if (checkLongRegEq (pLocId->id.longId, pIcode, loc_ident_idx, idx, this, - asgn.rhs, asgn.lhs, off) == TRUE) - longJCond22 (asgn.rhs, asgn.lhs, pIcode, &idx); - } - - /* Check for OR regH, regL - * JX lab - * => HLI_JCOND (regH:regL X 0) lab - * This is better code than HLI_JCOND (HI(regH:regL) | LO(regH:regL)) */ - else if ((pIcode->ic.ll.opcode == iOR) && (next1 < pEnd) && - (isJCond (next1->ic.ll.opcode))) - { - if ((pIcode->ic.ll.dst.regi == pLocId->id.longId.h) && - (pIcode->ic.ll.src.regi == pLocId->id.longId.l)) - { - asgn.lhs = COND_EXPR::idLongIdx (loc_ident_idx); - - asgn.rhs = COND_EXPR::idKte (0, 4); /* long 0 */ - asgn.lhs = COND_EXPR::boolOp (asgn.lhs, asgn.rhs, condOpJCond[next1->ic.ll.opcode - iJB]); - next1->setJCond(asgn.lhs); - next1->copyDU(*pIcode, eUSE, eUSE); - pIcode->invalidate(); - } - } - - } /* end for */ + /* If no definition backwards, check forward for a use of this long reg */ + checkForwardLongDefs(loc_ident_idx,*pLocId,*idx_iter,asgn); } /* end for */ } diff --git a/tests/inputs/BENCHFN.EXE b/tests/inputs/BENCHFN.EXE deleted file mode 100755 index f4849e9..0000000 Binary files a/tests/inputs/BENCHFN.EXE and /dev/null differ diff --git a/tests/inputs/BENCHLNG.EXE b/tests/inputs/BENCHLNG.EXE deleted file mode 100755 index a8328b7..0000000 Binary files a/tests/inputs/BENCHLNG.EXE and /dev/null differ diff --git a/tests/inputs/BENCHMUL.EXE b/tests/inputs/BENCHMUL.EXE deleted file mode 100755 index eb1720e..0000000 Binary files a/tests/inputs/BENCHMUL.EXE and /dev/null differ diff --git a/tests/inputs/BENCHMUS.EXE b/tests/inputs/BENCHMUS.EXE deleted file mode 100755 index 1206a25..0000000 Binary files a/tests/inputs/BENCHMUS.EXE and /dev/null differ diff --git a/tests/inputs/BENCHSHO.EXE b/tests/inputs/BENCHSHO.EXE deleted file mode 100755 index c400fcc..0000000 Binary files a/tests/inputs/BENCHSHO.EXE and /dev/null differ diff --git a/tests/inputs/BYTEOPS.EXE b/tests/inputs/BYTEOPS.EXE deleted file mode 100755 index 434edc7..0000000 Binary files a/tests/inputs/BYTEOPS.EXE and /dev/null differ diff --git a/tests/inputs/FIBOS.EXE b/tests/inputs/FIBOS.EXE deleted file mode 100755 index baa7d40..0000000 Binary files a/tests/inputs/FIBOS.EXE and /dev/null differ diff --git a/tests/inputs/MIN.EXE b/tests/inputs/MIN.EXE deleted file mode 100755 index f0eb4bb..0000000 Binary files a/tests/inputs/MIN.EXE and /dev/null differ diff --git a/tests/inputs/ZORK2.COM b/tests/inputs/ZORK2.COM deleted file mode 100644 index d31301e..0000000 Binary files a/tests/inputs/ZORK2.COM and /dev/null differ diff --git a/tests/prev/BENCHFN.EXE.a1 b/tests/prev/BENCHFN.EXE.a1 deleted file mode 100644 index 0858e4b..0000000 --- a/tests/prev/BENCHFN.EXE.a1 +++ /dev/null @@ -1,109 +0,0 @@ - main PROC NEAR -000 000365 55 PUSH bp -001 000366 8BEC MOV bp, sp -002 000368 83EC08 SUB sp, 8 -003 00036B B89401 MOV ax, 194h -004 00036E 50 PUSH ax -005 00036F E8D90B CALL near ptr printf -006 000372 59 POP cx -007 000373 8D46FC LEA ax, [bp-4] -008 000376 50 PUSH ax -009 000377 B8B001 MOV ax, 1B0h -010 00037A 50 PUSH ax -011 00037B E85614 CALL near ptr scanf -012 00037E 59 POP cx -013 00037F 59 POP cx -014 000380 FF76FE PUSH word ptr [bp-2] -015 000383 FF76FC PUSH word ptr [bp-4] -016 000386 B8B401 MOV ax, 1B4h -017 000389 50 PUSH ax -018 00038A E8BE0B CALL near ptr printf -019 00038D 83C406 ADD sp, 6 -020 000390 C746FA0000 MOV word ptr [bp-6], 0 -021 000395 C746F80100 MOV word ptr [bp-8], 1 -022 00039A EB0B JMP L1 - -023 0003A7 8B56FA L1: MOV dx, [bp-6] -024 0003AA 8B46F8 MOV ax, [bp-8] -025 0003AD 3B56FE CMP dx, [bp-2] -026 0003B0 7CEA JL L2 -027 0003B2 7F05 JG L3 -028 0003B4 3B46FC CMP ax, [bp-4] -029 0003B7 76E3 JBE L2 - -030 0003B9 B8CE01 L3: MOV ax, 1CEh -031 0003BC 50 PUSH ax -032 0003BD E88B0B CALL near ptr printf -033 0003C0 59 POP cx -034 0003C1 8BE5 MOV sp, bp -035 0003C3 5D POP bp -036 0003C4 C3 RET - -037 00039C E8A6FF L2: CALL near ptr proc_1 -038 00039F 8346F801 ADD word ptr [bp-8], 1 -039 0003A3 8356FA00 ADC word ptr [bp-6], 0 -040 JMP L1 ;Synthetic inst - - main ENDP - - proc_1 PROC NEAR -000 000345 55 PUSH bp -001 000346 8BEC MOV bp, sp -002 000348 E8D7FF CALL near ptr proc_2 -003 00034B E8D4FF CALL near ptr proc_2 -004 00034E E8D1FF CALL near ptr proc_2 -005 000351 E8CEFF CALL near ptr proc_2 -006 000354 E8CBFF CALL near ptr proc_2 -007 000357 E8C8FF CALL near ptr proc_2 -008 00035A E8C5FF CALL near ptr proc_2 -009 00035D E8C2FF CALL near ptr proc_2 -010 000360 E8BFFF CALL near ptr proc_2 -011 000363 5D POP bp -012 000364 C3 RET - - proc_1 ENDP - - proc_2 PROC NEAR -000 000322 55 PUSH bp -001 000323 8BEC MOV bp, sp -002 000325 E8D7FF CALL near ptr proc_3 -003 000328 E8D4FF CALL near ptr proc_3 -004 00032B E8D1FF CALL near ptr proc_3 -005 00032E E8CEFF CALL near ptr proc_3 -006 000331 E8CBFF CALL near ptr proc_3 -007 000334 E8C8FF CALL near ptr proc_3 -008 000337 E8C5FF CALL near ptr proc_3 -009 00033A E8C2FF CALL near ptr proc_3 -010 00033D E8BFFF CALL near ptr proc_3 -011 000340 E8BCFF CALL near ptr proc_3 -012 000343 5D POP bp -013 000344 C3 RET - - proc_2 ENDP - - proc_3 PROC NEAR -000 0002FF 55 PUSH bp -001 000300 8BEC MOV bp, sp -002 000302 E8F5FF CALL near ptr proc_4 -003 000305 E8F2FF CALL near ptr proc_4 -004 000308 E8EFFF CALL near ptr proc_4 -005 00030B E8ECFF CALL near ptr proc_4 -006 00030E E8E9FF CALL near ptr proc_4 -007 000311 E8E6FF CALL near ptr proc_4 -008 000314 E8E3FF CALL near ptr proc_4 -009 000317 E8E0FF CALL near ptr proc_4 -010 00031A E8DDFF CALL near ptr proc_4 -011 00031D E8DAFF CALL near ptr proc_4 -012 000320 5D POP bp -013 000321 C3 RET - - proc_3 ENDP - - proc_4 PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 5D POP bp -003 0002FE C3 RET - - proc_4 ENDP - diff --git a/tests/prev/BENCHFN.EXE.a2 b/tests/prev/BENCHFN.EXE.a2 deleted file mode 100644 index 3215eca..0000000 --- a/tests/prev/BENCHFN.EXE.a2 +++ /dev/null @@ -1,108 +0,0 @@ - proc_4 PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 5D POP bp -003 0002FE C3 RET - - proc_4 ENDP - - proc_3 PROC NEAR -000 0002FF 55 PUSH bp -001 000300 8BEC MOV bp, sp -002 000302 E8F5FF CALL near ptr proc_4 -003 000305 E8F2FF CALL near ptr proc_4 -004 000308 E8EFFF CALL near ptr proc_4 -005 00030B E8ECFF CALL near ptr proc_4 -006 00030E E8E9FF CALL near ptr proc_4 -007 000311 E8E6FF CALL near ptr proc_4 -008 000314 E8E3FF CALL near ptr proc_4 -009 000317 E8E0FF CALL near ptr proc_4 -010 00031A E8DDFF CALL near ptr proc_4 -011 00031D E8DAFF CALL near ptr proc_4 -012 000320 5D POP bp -013 000321 C3 RET - - proc_3 ENDP - - proc_2 PROC NEAR -000 000322 55 PUSH bp -001 000323 8BEC MOV bp, sp -002 000325 E8D7FF CALL near ptr proc_3 -003 000328 E8D4FF CALL near ptr proc_3 -004 00032B E8D1FF CALL near ptr proc_3 -005 00032E E8CEFF CALL near ptr proc_3 -006 000331 E8CBFF CALL near ptr proc_3 -007 000334 E8C8FF CALL near ptr proc_3 -008 000337 E8C5FF CALL near ptr proc_3 -009 00033A E8C2FF CALL near ptr proc_3 -010 00033D E8BFFF CALL near ptr proc_3 -011 000340 E8BCFF CALL near ptr proc_3 -012 000343 5D POP bp -013 000344 C3 RET - - proc_2 ENDP - - proc_1 PROC NEAR -000 000345 55 PUSH bp -001 000346 8BEC MOV bp, sp -002 000348 E8D7FF CALL near ptr proc_2 -003 00034B E8D4FF CALL near ptr proc_2 -004 00034E E8D1FF CALL near ptr proc_2 -005 000351 E8CEFF CALL near ptr proc_2 -006 000354 E8CBFF CALL near ptr proc_2 -007 000357 E8C8FF CALL near ptr proc_2 -008 00035A E8C5FF CALL near ptr proc_2 -009 00035D E8C2FF CALL near ptr proc_2 -010 000360 E8BFFF CALL near ptr proc_2 -011 000363 5D POP bp -012 000364 C3 RET - - proc_1 ENDP - - main PROC NEAR -000 000365 55 PUSH bp -001 000366 8BEC MOV bp, sp -002 000368 83EC08 SUB sp, 8 -003 00036B B89401 MOV ax, 194h -004 00036E 50 PUSH ax -005 00036F E8D90B CALL near ptr printf -006 000372 59 POP cx -007 000373 8D46FC LEA ax, [bp-4] -008 000376 50 PUSH ax -009 000377 B8B001 MOV ax, 1B0h -010 00037A 50 PUSH ax -011 00037B E85614 CALL near ptr scanf -012 00037E 59 POP cx -013 00037F 59 POP cx -014 000380 FF76FE PUSH word ptr [bp-2] -015 000383 FF76FC PUSH word ptr [bp-4] -016 000386 B8B401 MOV ax, 1B4h -017 000389 50 PUSH ax -018 00038A E8BE0B CALL near ptr printf -019 00038D 83C406 ADD sp, 6 -020 000390 C746FA0000 MOV word ptr [bp-6], 0 -021 000395 C746F80100 MOV word ptr [bp-8], 1 - -023 0003A7 8B56FA L1: MOV dx, [bp-6] -024 0003AA 8B46F8 MOV ax, [bp-8] -025 0003AD 3B56FE CMP dx, [bp-2] -026 0003B0 7CEA JL L2 -027 0003B2 7F05 JG L3 -028 0003B4 3B46FC CMP ax, [bp-4] -029 0003B7 76E3 JBE L2 - -030 0003B9 B8CE01 L3: MOV ax, 1CEh -031 0003BC 50 PUSH ax -032 0003BD E88B0B CALL near ptr printf -033 0003C0 59 POP cx -034 0003C1 8BE5 MOV sp, bp -035 0003C3 5D POP bp -036 0003C4 C3 RET - -037 00039C E8A6FF L2: CALL near ptr proc_1 -038 00039F 8346F801 ADD word ptr [bp-8], 1 -039 0003A3 8356FA00 ADC word ptr [bp-6], 0 -040 JMP L1 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/BENCHFN.b b/tests/prev/BENCHFN.b deleted file mode 100644 index 41ae251..0000000 --- a/tests/prev/BENCHFN.b +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Input file : ./tests/inputs/BENCHFN.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void proc_4 () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -} - - -void proc_3 () -/* Takes no parameters. - * High-level language prologue code. - */ -{ - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); - proc_4 (); -} - - -void proc_2 () -/* Takes no parameters. - * High-level language prologue code. - */ -{ - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); - proc_3 (); -} - - -void proc_1 () -/* Takes no parameters. - * High-level language prologue code. - */ -{ - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); - proc_2 (); -} - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -long loc1; -long loc2; - - printf ("enter number of iterations "); - scanf ("%ld", &loc0); - printf ("executing %ld iterations\n", loc2); - loc1 = 1; - - while ((loc1 <= loc2)) { - proc_1 (); - loc1 = (loc1 + 1); - } /* end of while */ - printf ("finished\n"); -} - diff --git a/tests/prev/BENCHLNG.EXE.a1 b/tests/prev/BENCHLNG.EXE.a1 deleted file mode 100644 index 9340fc0..0000000 --- a/tests/prev/BENCHLNG.EXE.a1 +++ /dev/null @@ -1,242 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC14 SUB sp, 14h -003 000300 8D46FC LEA ax, [bp-4] -004 000303 50 PUSH ax -005 000304 B89401 MOV ax, 194h -006 000307 50 PUSH ax -007 000308 E85D15 CALL near ptr scanf -008 00030B 59 POP cx -009 00030C 59 POP cx -010 00030D FF76FE PUSH word ptr [bp-2] -011 000310 FF76FC PUSH word ptr [bp-4] -012 000313 B89801 MOV ax, 198h -013 000316 50 PUSH ax -014 000317 E8C50C CALL near ptr printf -015 00031A 83C406 ADD sp, 6 -016 00031D 8D46EC LEA ax, [bp-14h] -017 000320 50 PUSH ax -018 000321 B8B201 MOV ax, 1B2h -019 000324 50 PUSH ax -020 000325 E84015 CALL near ptr scanf -021 000328 59 POP cx -022 000329 59 POP cx -023 00032A 8D46F0 LEA ax, [bp-10h] -024 00032D 50 PUSH ax -025 00032E B8B601 MOV ax, 1B6h -026 000331 50 PUSH ax -027 000332 E83315 CALL near ptr scanf -028 000335 59 POP cx -029 000336 59 POP cx -030 000337 C746FA0000 MOV word ptr [bp-6], 0 -031 00033C C746F80100 MOV word ptr [bp-8], 1 -032 000341 E9E900 JMP L1 - -033 00042D 8B56FA L1: MOV dx, [bp-6] -034 000430 8B46F8 MOV ax, [bp-8] -035 000433 3B56FE CMP dx, [bp-2] -036 000436 7D03 JGE L2 -037 000438 E909FF JMP L3 - -038 000344 C746F60000 L3: MOV word ptr [bp-0Ah], 0 -039 000349 C746F40100 MOV word ptr [bp-0Ch], 1 -040 00034E E9C000 JMP L4 - -041 000411 837EF600 L4: CMP word ptr [bp-0Ah], 0 -042 000415 7D03 JGE L5 -043 000417 E937FF JMP L6 - -044 000351 8B56EE L6: MOV dx, [bp-12h] -045 000354 8B46EC MOV ax, [bp-14h] -046 000357 0346F0 ADD ax, [bp-10h] -047 00035A 1356F2 ADC dx, [bp-0Eh] -048 00035D 0346F4 ADD ax, [bp-0Ch] -049 000360 1356F6 ADC dx, [bp-0Ah] -050 000363 8956EE MOV [bp-12h], dx -051 000366 8946EC MOV [bp-14h], ax -052 000369 8B56EE MOV dx, [bp-12h] -053 00036C 8B46EC MOV ax, [bp-14h] -054 00036F D1FA SAR dx, 1 -055 000371 D1D8 RCR ax, 1 -056 000373 8956F2 MOV [bp-0Eh], dx -057 000376 8946F0 MOV [bp-10h], ax -058 000379 33D2 XOR dx, dx -059 00037B B80A00 MOV ax, 0Ah -060 00037E 52 PUSH dx -061 00037F 50 PUSH ax -062 000380 FF76F2 PUSH word ptr [bp-0Eh] -063 000383 FF76F0 PUSH word ptr [bp-10h] -064 000386 9AEB1D1000 CALL far ptr LMOD@ -065 00038B 8956EE MOV [bp-12h], dx -066 00038E 8946EC MOV [bp-14h], ax -067 000391 8B56F2 MOV dx, [bp-0Eh] -068 000394 8B46F0 MOV ax, [bp-10h] -069 000397 3B56F6 CMP dx, [bp-0Ah] -070 00039A 750A JNE L7 -071 00039C 3B46F4 CMP ax, [bp-0Ch] -072 00039F 7505 JNE L7 -073 0003A1 B80100 MOV ax, 1 -074 0003A4 EB02 JMP L8 - -075 0003A8 99 L8: CWD -076 0003A9 8956EE MOV [bp-12h], dx -077 0003AC 8946EC MOV [bp-14h], ax -078 0003AF 8B56EE MOV dx, [bp-12h] -079 0003B2 8B46EC MOV ax, [bp-14h] -080 0003B5 0B46F4 OR ax, [bp-0Ch] -081 0003B8 0B56F6 OR dx, [bp-0Ah] -082 0003BB 8956F2 MOV [bp-0Eh], dx -083 0003BE 8946F0 MOV [bp-10h], ax -084 0003C1 8B46F0 MOV ax, [bp-10h] -085 0003C4 0B46F2 OR ax, [bp-0Eh] -086 0003C7 7505 JNE L9 -087 0003C9 B80100 MOV ax, 1 -088 0003CC EB02 JMP L10 - -089 0003D0 99 L10: CWD -090 0003D1 8956EE MOV [bp-12h], dx -091 0003D4 8946EC MOV [bp-14h], ax -092 0003D7 8B56EE MOV dx, [bp-12h] -093 0003DA 8B46EC MOV ax, [bp-14h] -094 0003DD 0346F4 ADD ax, [bp-0Ch] -095 0003E0 1356F6 ADC dx, [bp-0Ah] -096 0003E3 8956F2 MOV [bp-0Eh], dx -097 0003E6 8946F0 MOV [bp-10h], ax -098 0003E9 8B56F2 MOV dx, [bp-0Eh] -099 0003EC 8B46F0 MOV ax, [bp-10h] -100 0003EF 3B56F6 CMP dx, [bp-0Ah] -101 0003F2 7C0C JL L11 -102 0003F4 7F05 JG L12 -103 0003F6 3B46F4 CMP ax, [bp-0Ch] -104 0003F9 7605 JBE L11 - -105 0003FB B80100 L12: MOV ax, 1 -106 0003FE EB02 JMP L13 - -107 000402 99 L13: CWD -108 000403 8956EE MOV [bp-12h], dx -109 000406 8946EC MOV [bp-14h], ax -110 000409 8346F401 ADD word ptr [bp-0Ch], 1 -111 00040D 8356F600 ADC word ptr [bp-0Ah], 0 -112 JMP L4 ;Synthetic inst - -113 000400 33C0 L11: XOR ax, ax -114 JMP L13 ;Synthetic inst - -115 0003CE 33C0 L9: XOR ax, ax -116 JMP L10 ;Synthetic inst - -117 0003A6 33C0 L7: XOR ax, ax -118 JMP L8 ;Synthetic inst - -119 00041A 7F09 L5: JG L14 -120 00041C 837EF428 CMP word ptr [bp-0Ch], 28h -121 000420 7703 JA L14 -122 000422 E92CFF JMP L6 - -123 000425 8346F801 L14: ADD word ptr [bp-8], 1 -124 000429 8356FA00 ADC word ptr [bp-6], 0 -125 JMP L1 ;Synthetic inst - -126 00043B 7F08 L2: JG L15 -127 00043D 3B46FC CMP ax, [bp-4] -128 000440 7703 JA L15 -129 000442 E9FFFE JMP L3 - -130 000445 FF76EE L15: PUSH word ptr [bp-12h] -131 000448 FF76EC PUSH word ptr [bp-14h] -132 00044B B8BA01 MOV ax, 1BAh -133 00044E 50 PUSH ax -134 00044F E88D0B CALL near ptr printf -135 000452 83C406 ADD sp, 6 -136 000455 8BE5 MOV sp, bp -137 000457 5D POP bp -138 000458 C3 RET - - main ENDP - - LMOD@ PROC FAR -000 001EEB B90200 MOV cx, 2 -001 001EEE EB03 JMP L16 - -002 001EF3 55 L16: PUSH bp -003 001EF4 56 PUSH si -004 001EF5 57 PUSH di -005 001EF6 8BEC MOV bp, sp -006 001EF8 8BF9 MOV di, cx -007 001EFA 8B460A MOV ax, [bp+0Ah] -008 001EFD 8B560C MOV dx, [bp+0Ch] -009 001F00 8B5E0E MOV bx, [bp+0Eh] -010 001F03 8B4E10 MOV cx, [bp+10h] -011 001F06 0BC9 OR cx, cx -012 001F08 7508 JNE L17 -013 001F0A 0BD2 OR dx, dx -014 001F0C 7469 JE L18 -015 001F0E 0BDB OR bx, bx -016 001F10 7465 JE L18 - -017 001F12 F7C70100 L17: TEST di, 1 -018 001F16 751C JNE L19 -019 001F18 0BD2 OR dx, dx -020 001F1A 790A JNS L20 -021 001F1C F7DA NEG dx -022 001F1E F7D8 NEG ax -023 001F20 83DA00 SBB dx, 0 -024 001F23 83CF0C OR di, 0Ch - -025 001F26 0BC9 L20: OR cx, cx -026 001F28 790A JNS L19 -027 001F2A F7D9 NEG cx -028 001F2C F7DB NEG bx -029 001F2E 83D900 SBB cx, 0 -030 001F31 83F704 XOR di, 4 - -031 001F34 8BE9 L19: MOV bp, cx -032 001F36 B92000 MOV cx, 20h -033 001F39 57 PUSH di -034 001F3A 33FF XOR di, di -035 001F3C 33F6 XOR si, si - -036 001F3E D1E0 L21: SHL ax, 1 -037 001F40 D1D2 RCL dx, 1 -038 001F42 D1D6 RCL si, 1 -039 001F44 D1D7 RCL di, 1 -040 001F46 3BFD CMP di, bp -041 001F48 720B JB L22 -042 001F4A 7704 JA L23 -043 001F4C 3BF3 CMP si, bx -044 001F4E 7205 JB L22 - -045 001F50 2BF3 L23: SUB si, bx -046 001F52 1BFD SBB di, bp -047 001F54 40 INC ax - -048 001F55 E2E7 L22: LOOP L21 -049 001F57 5B POP bx -050 001F58 F7C30200 TEST bx, 2 -051 001F5C 7406 JE L24 -052 001F5E 8BC6 MOV ax, si -053 001F60 8BD7 MOV dx, di -054 001F62 D1EB SHR bx, 1 - -055 001F64 F7C30400 L24: TEST bx, 4 -056 001F68 7407 JE L25 -057 001F6A F7DA NEG dx -058 001F6C F7D8 NEG ax -059 001F6E 83DA00 SBB dx, 0 - -060 001F71 5F L25: POP di -061 001F72 5E POP si -062 001F73 5D POP bp -063 001F74 CA0800 RETF 8 -065 001F77 F7F3 DIV bx -067 001F79 F7C70200 TEST di, 2 -068 001F7D 7402 JE L26 -069 001F7F 8BC2 MOV ax, dx - -070 001F81 33D2 L26: XOR dx, dx -071 001F83 EBEC JMP L25 - - LMOD@ ENDP - diff --git a/tests/prev/BENCHLNG.EXE.a2 b/tests/prev/BENCHLNG.EXE.a2 deleted file mode 100644 index 5ae414e..0000000 --- a/tests/prev/BENCHLNG.EXE.a2 +++ /dev/null @@ -1,234 +0,0 @@ - LMOD@ PROC FAR -000 001EEB B90200 MOV cx, 2 -002 001EF3 55 PUSH bp -003 001EF4 56 PUSH si -004 001EF5 57 PUSH di -005 001EF6 8BEC MOV bp, sp -006 001EF8 8BF9 MOV di, cx -007 001EFA 8B460A MOV ax, [bp+0Ah] -008 001EFD 8B560C MOV dx, [bp+0Ch] -009 001F00 8B5E0E MOV bx, [bp+0Eh] -010 001F03 8B4E10 MOV cx, [bp+10h] -011 001F06 0BC9 OR cx, cx -012 001F08 7508 JNE L1 -013 001F0A 0BD2 OR dx, dx -014 001F0C 7469 JE L2 -015 001F0E 0BDB OR bx, bx -016 001F10 7465 JE L2 - -017 001F12 F7C70100 L1: TEST di, 1 -018 001F16 751C JNE L3 -019 001F18 0BD2 OR dx, dx -020 001F1A 790A JNS L4 -021 001F1C F7DA NEG dx -022 001F1E F7D8 NEG ax -023 001F20 83DA00 SBB dx, 0 -024 001F23 83CF0C OR di, 0Ch - -025 001F26 0BC9 L4: OR cx, cx -026 001F28 790A JNS L3 -027 001F2A F7D9 NEG cx -028 001F2C F7DB NEG bx -029 001F2E 83D900 SBB cx, 0 -030 001F31 83F704 XOR di, 4 - -031 001F34 8BE9 L3: MOV bp, cx -032 001F36 B92000 MOV cx, 20h -033 001F39 57 PUSH di -034 001F3A 33FF XOR di, di -035 001F3C 33F6 XOR si, si - -036 001F3E D1E0 L5: SHL ax, 1 -037 001F40 D1D2 RCL dx, 1 -038 001F42 D1D6 RCL si, 1 -039 001F44 D1D7 RCL di, 1 -040 001F46 3BFD CMP di, bp -041 001F48 720B JB L6 -042 001F4A 7704 JA L7 -043 001F4C 3BF3 CMP si, bx -044 001F4E 7205 JB L6 - -045 001F50 2BF3 L7: SUB si, bx -046 001F52 1BFD SBB di, bp -047 001F54 40 INC ax - -048 001F55 E2E7 L6: LOOP L5 -049 001F57 5B POP bx -050 001F58 F7C30200 TEST bx, 2 -051 001F5C 7406 JE L8 -052 001F5E 8BC6 MOV ax, si -053 001F60 8BD7 MOV dx, di -054 001F62 D1EB SHR bx, 1 - -055 001F64 F7C30400 L8: TEST bx, 4 -056 001F68 7407 JE L9 -057 001F6A F7DA NEG dx -058 001F6C F7D8 NEG ax -059 001F6E 83DA00 SBB dx, 0 - -060 001F71 5F L9: POP di -061 001F72 5E POP si -062 001F73 5D POP bp -063 001F74 CA0800 RETF 8 - -064 L2: MOV tmp, dx:ax ;Synthetic inst -065 001F77 F7F3 DIV bx -066 MOD bx ;Synthetic inst -067 001F79 F7C70200 TEST di, 2 -068 001F7D 7402 JE L10 -069 001F7F 8BC2 MOV ax, dx - -070 001F81 33D2 L10: XOR dx, dx -071 001F83 EBEC JMP L9 - - LMOD@ ENDP - - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC14 SUB sp, 14h -003 000300 8D46FC LEA ax, [bp-4] -004 000303 50 PUSH ax -005 000304 B89401 MOV ax, 194h -006 000307 50 PUSH ax -007 000308 E85D15 CALL near ptr scanf -008 00030B 59 POP cx -009 00030C 59 POP cx -010 00030D FF76FE PUSH word ptr [bp-2] -011 000310 FF76FC PUSH word ptr [bp-4] -012 000313 B89801 MOV ax, 198h -013 000316 50 PUSH ax -014 000317 E8C50C CALL near ptr printf -015 00031A 83C406 ADD sp, 6 -016 00031D 8D46EC LEA ax, [bp-14h] -017 000320 50 PUSH ax -018 000321 B8B201 MOV ax, 1B2h -019 000324 50 PUSH ax -020 000325 E84015 CALL near ptr scanf -021 000328 59 POP cx -022 000329 59 POP cx -023 00032A 8D46F0 LEA ax, [bp-10h] -024 00032D 50 PUSH ax -025 00032E B8B601 MOV ax, 1B6h -026 000331 50 PUSH ax -027 000332 E83315 CALL near ptr scanf -028 000335 59 POP cx -029 000336 59 POP cx -030 000337 C746FA0000 MOV word ptr [bp-6], 0 -031 00033C C746F80100 MOV word ptr [bp-8], 1 - -033 00042D 8B56FA L11: MOV dx, [bp-6] -034 000430 8B46F8 MOV ax, [bp-8] -035 000433 3B56FE CMP dx, [bp-2] -036 000436 7D03 JGE L12 - -038 000344 C746F60000 L13: MOV word ptr [bp-0Ah], 0 -039 000349 C746F40100 MOV word ptr [bp-0Ch], 1 - -041 000411 837EF600 L14: CMP word ptr [bp-0Ah], 0 -042 000415 7D03 JGE L15 - -044 000351 8B56EE L16: MOV dx, [bp-12h] -045 000354 8B46EC MOV ax, [bp-14h] -046 000357 0346F0 ADD ax, [bp-10h] -047 00035A 1356F2 ADC dx, [bp-0Eh] -048 00035D 0346F4 ADD ax, [bp-0Ch] -049 000360 1356F6 ADC dx, [bp-0Ah] -050 000363 8956EE MOV [bp-12h], dx -051 000366 8946EC MOV [bp-14h], ax -052 000369 8B56EE MOV dx, [bp-12h] -053 00036C 8B46EC MOV ax, [bp-14h] -054 00036F D1FA SAR dx, 1 -055 000371 D1D8 RCR ax, 1 -056 000373 8956F2 MOV [bp-0Eh], dx -057 000376 8946F0 MOV [bp-10h], ax -058 000379 33D2 XOR dx, dx -059 00037B B80A00 MOV ax, 0Ah -060 00037E 52 PUSH dx -061 00037F 50 PUSH ax -062 000380 FF76F2 PUSH word ptr [bp-0Eh] -063 000383 FF76F0 PUSH word ptr [bp-10h] -064 000386 9AEB1D1000 CALL far ptr LMOD@ -065 00038B 8956EE MOV [bp-12h], dx -066 00038E 8946EC MOV [bp-14h], ax -067 000391 8B56F2 MOV dx, [bp-0Eh] -068 000394 8B46F0 MOV ax, [bp-10h] -069 000397 3B56F6 CMP dx, [bp-0Ah] -070 00039A 750A JNE L17 -071 00039C 3B46F4 CMP ax, [bp-0Ch] -072 00039F 7505 JNE L17 -073 0003A1 B80100 MOV ax, 1 - -075 0003A8 99 L18: CWD -076 0003A9 8956EE MOV [bp-12h], dx -077 0003AC 8946EC MOV [bp-14h], ax -078 0003AF 8B56EE MOV dx, [bp-12h] -079 0003B2 8B46EC MOV ax, [bp-14h] -080 0003B5 0B46F4 OR ax, [bp-0Ch] -081 0003B8 0B56F6 OR dx, [bp-0Ah] -082 0003BB 8956F2 MOV [bp-0Eh], dx -083 0003BE 8946F0 MOV [bp-10h], ax -084 0003C1 8B46F0 MOV ax, [bp-10h] -085 0003C4 0B46F2 OR ax, [bp-0Eh] -086 0003C7 7505 JNE L19 -087 0003C9 B80100 MOV ax, 1 - -089 0003D0 99 L20: CWD -090 0003D1 8956EE MOV [bp-12h], dx -091 0003D4 8946EC MOV [bp-14h], ax -092 0003D7 8B56EE MOV dx, [bp-12h] -093 0003DA 8B46EC MOV ax, [bp-14h] -094 0003DD 0346F4 ADD ax, [bp-0Ch] -095 0003E0 1356F6 ADC dx, [bp-0Ah] -096 0003E3 8956F2 MOV [bp-0Eh], dx -097 0003E6 8946F0 MOV [bp-10h], ax -098 0003E9 8B56F2 MOV dx, [bp-0Eh] -099 0003EC 8B46F0 MOV ax, [bp-10h] -100 0003EF 3B56F6 CMP dx, [bp-0Ah] -101 0003F2 7C0C JL L21 -102 0003F4 7F05 JG L22 -103 0003F6 3B46F4 CMP ax, [bp-0Ch] -104 0003F9 7605 JBE L21 - -105 0003FB B80100 L22: MOV ax, 1 - -107 000402 99 L23: CWD -108 000403 8956EE MOV [bp-12h], dx -109 000406 8946EC MOV [bp-14h], ax -110 000409 8346F401 ADD word ptr [bp-0Ch], 1 -111 00040D 8356F600 ADC word ptr [bp-0Ah], 0 -112 JMP L14 ;Synthetic inst - -113 000400 33C0 L21: XOR ax, ax -114 JMP L23 ;Synthetic inst - -115 0003CE 33C0 L19: XOR ax, ax -116 JMP L20 ;Synthetic inst - -117 0003A6 33C0 L17: XOR ax, ax -118 JMP L18 ;Synthetic inst - -119 00041A 7F09 L15: JG L24 -120 00041C 837EF428 CMP word ptr [bp-0Ch], 28h -121 000420 7703 JA L24 - -123 000425 8346F801 L24: ADD word ptr [bp-8], 1 -124 000429 8356FA00 ADC word ptr [bp-6], 0 -125 JMP L11 ;Synthetic inst - -126 00043B 7F08 L12: JG L25 -127 00043D 3B46FC CMP ax, [bp-4] -128 000440 7703 JA L25 - -130 000445 FF76EE L25: PUSH word ptr [bp-12h] -131 000448 FF76EC PUSH word ptr [bp-14h] -132 00044B B8BA01 MOV ax, 1BAh -133 00044E 50 PUSH ax -134 00044F E88D0B CALL near ptr printf -135 000452 83C406 ADD sp, 6 -136 000455 8BE5 MOV sp, bp -137 000457 5D POP bp -138 000458 C3 RET - - main ENDP - diff --git a/tests/prev/BENCHLNG.b b/tests/prev/BENCHLNG.b deleted file mode 100644 index da66c79..0000000 --- a/tests/prev/BENCHLNG.b +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Input file : ./tests/inputs/BENCHLNG.EXE - * File type : EXE - */ - -#include "dcc.h" - - -long LMOD@ (long arg0, int arg2, int arg3) -/* Takes 8 bytes of parameters. - * Runtime support routine of the compiler. - * Untranslatable routine. Assembler provided. - * Return value in registers dx:ax. - * Pascal calling convention. - */ -{ - MOV cx, 2 - PUSH bp - PUSH si - PUSH di - MOV bp, sp - MOV di, cx - MOV ax, [bp+0Ah] - MOV dx, [bp+0Ch] - MOV bx, [bp+0Eh] - MOV cx, [bp+10h] - CMP cx, 0 - JNE L1 - OR dx, dx - JE L2 - OR bx, bx - JE L2 - - L1: TEST di, 1 - JNE L3 - OR dx, dx - JNS L4 - NEG dx - NEG ax - SBB dx, 0 - OR di, 0Ch - - L4: OR cx, cx - JNS L3 - NEG cx - NEG bx - SBB cx, 0 - XOR di, 4 - - L3: MOV bp, cx - MOV cx, 20h - PUSH di - XOR di, 0 - XOR si, 0 - - L5: SHL ax, 1 - RCL dx, 1 - RCL si, 1 - RCL di, 1 - CMP di, bp - JB L6 - JA L7 - CMP si, bx - JB L6 - - L7: SUB si, bx - SBB di, bp - INC ax - - L6: LOOP L5 - POP bx - TEST bx, 2 - JE L8 - MOV ax, si - MOV dx, di - SHR bx, 1 - - L8: TEST bx, 4 - JE L9 - NEG dx - NEG ax - SBB dx, 0 - - L9: POP di - POP si - POP bp - RETF 8 - - L2: MOV tmp, dx:ax ;Synthetic inst - DIV bx - MOD bx ;Synthetic inst - TEST di, 2 - JE L10 - MOV ax, dx - - L10: XOR dx, dx - JMP L9 -} - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -long loc1; -long loc2; -long loc3; -long loc4; -long loc5; -int loc6; /* ax */ - - scanf ("%ld", &loc0); - printf ("executing %ld iterations\n", loc5); - scanf ("%ld", &loc2); - scanf ("%ld", &loc3); - loc3 = 1; - - while ((loc3 <= loc5)) { - loc2 = 1; - - while ((loc2 <= 40)) { - loc4 = ((loc4 + loc1) + loc2); - loc1 = (loc4 >> 1); - loc4 = LMOD@ (loc1, 10); - - if (loc1 == loc2) { - loc6 = 1; - } - else { - loc6 = 0; - } - loc4 = loc6; - loc1 = (loc4 | loc2); - - if ((loc3 | loc9) == 0) { - loc6 = 1; - } - else { - loc6 = 0; - } - loc4 = loc6; - loc1 = (loc4 + loc2); - - if (loc1 > loc2) { - loc6 = 1; - } - else { - loc6 = 0; - } - loc4 = loc6; - loc2 = (loc2 + 1); - } /* end of while */ - loc3 = (loc3 + 1); - } /* end of while */ - printf ("a=%d\n", loc4); -} - diff --git a/tests/prev/BENCHMUL.EXE.a1 b/tests/prev/BENCHMUL.EXE.a1 deleted file mode 100644 index ca69338..0000000 --- a/tests/prev/BENCHMUL.EXE.a1 +++ /dev/null @@ -1,101 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0C SUB sp, 0Ch -003 000300 56 PUSH si -004 000301 B89401 MOV ax, 194h -005 000304 50 PUSH ax -006 000305 E8530C CALL near ptr printf -007 000308 59 POP cx -008 000309 8D46FC LEA ax, [bp-4] -009 00030C 50 PUSH ax -010 00030D B8B001 MOV ax, 1B0h -011 000310 50 PUSH ax -012 000311 E8D014 CALL near ptr scanf -013 000314 59 POP cx -014 000315 59 POP cx -015 000316 FF76FE PUSH word ptr [bp-2] -016 000319 FF76FC PUSH word ptr [bp-4] -017 00031C B8B401 MOV ax, 1B4h -018 00031F 50 PUSH ax -019 000320 E8380C CALL near ptr printf -020 000323 83C406 ADD sp, 6 -021 000326 8D46F4 LEA ax, [bp-0Ch] -022 000329 50 PUSH ax -023 00032A B8CE01 MOV ax, 1CEh -024 00032D 50 PUSH ax -025 00032E E8B314 CALL near ptr scanf -026 000331 59 POP cx -027 000332 59 POP cx -028 000333 8D46F6 LEA ax, [bp-0Ah] -029 000336 50 PUSH ax -030 000337 B8D101 MOV ax, 1D1h -031 00033A 50 PUSH ax -032 00033B E8A614 CALL near ptr scanf -033 00033E 59 POP cx -034 00033F 59 POP cx -035 000340 C746FA0000 MOV word ptr [bp-6], 0 -036 000345 C746F80100 MOV word ptr [bp-8], 1 -037 00034A EB66 JMP L1 - -038 0003B2 8B56FA L1: MOV dx, [bp-6] -039 0003B5 8B46F8 MOV ax, [bp-8] -040 0003B8 3B56FE CMP dx, [bp-2] -041 0003BB 7C8F JL L2 -042 0003BD 7F05 JG L3 -043 0003BF 3B46FC CMP ax, [bp-4] -044 0003C2 7688 JBE L2 - -045 0003C4 FF76F4 L3: PUSH word ptr [bp-0Ch] -046 0003C7 B8D401 MOV ax, 1D4h -047 0003CA 50 PUSH ax -048 0003CB E88D0B CALL near ptr printf -049 0003CE 59 POP cx -050 0003CF 59 POP cx -051 0003D0 5E POP si -052 0003D1 8BE5 MOV sp, bp -053 0003D3 5D POP bp -054 0003D4 C3 RET - -055 00034C BE0100 L2: MOV si, 1 -056 00034F EB54 JMP L4 - -057 0003A5 83FE28 L4: CMP si, 28h -058 0003A8 7EA7 JLE L5 -059 0003AA 8346F801 ADD word ptr [bp-8], 1 -060 0003AE 8356FA00 ADC word ptr [bp-6], 0 -061 JMP L1 ;Synthetic inst - -062 000351 8B46F4 L5: MOV ax, [bp-0Ch] -063 000354 F766F4 MUL word ptr [bp-0Ch] -064 000357 F766F4 MUL word ptr [bp-0Ch] -065 00035A F766F4 MUL word ptr [bp-0Ch] -066 00035D F766F4 MUL word ptr [bp-0Ch] -067 000360 F766F4 MUL word ptr [bp-0Ch] -068 000363 F766F4 MUL word ptr [bp-0Ch] -069 000366 F766F4 MUL word ptr [bp-0Ch] -070 000369 F766F4 MUL word ptr [bp-0Ch] -071 00036C F766F4 MUL word ptr [bp-0Ch] -072 00036F F766F4 MUL word ptr [bp-0Ch] -073 000372 F766F4 MUL word ptr [bp-0Ch] -074 000375 F766F4 MUL word ptr [bp-0Ch] -075 000378 F766F4 MUL word ptr [bp-0Ch] -076 00037B F766F4 MUL word ptr [bp-0Ch] -077 00037E F766F4 MUL word ptr [bp-0Ch] -078 000381 F766F4 MUL word ptr [bp-0Ch] -079 000384 F766F4 MUL word ptr [bp-0Ch] -080 000387 F766F4 MUL word ptr [bp-0Ch] -081 00038A F766F4 MUL word ptr [bp-0Ch] -082 00038D F766F4 MUL word ptr [bp-0Ch] -083 000390 F766F4 MUL word ptr [bp-0Ch] -084 000393 F766F4 MUL word ptr [bp-0Ch] -085 000396 F766F4 MUL word ptr [bp-0Ch] -086 000399 F766F4 MUL word ptr [bp-0Ch] -087 00039C BA0300 MOV dx, 3 -088 00039F F7E2 MUL dx -089 0003A1 8946F4 MOV [bp-0Ch], ax -090 0003A4 46 INC si -091 JMP L4 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/BENCHMUL.EXE.a2 b/tests/prev/BENCHMUL.EXE.a2 deleted file mode 100644 index 2419022..0000000 --- a/tests/prev/BENCHMUL.EXE.a2 +++ /dev/null @@ -1,99 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0C SUB sp, 0Ch -003 000300 56 PUSH si -004 000301 B89401 MOV ax, 194h -005 000304 50 PUSH ax -006 000305 E8530C CALL near ptr printf -007 000308 59 POP cx -008 000309 8D46FC LEA ax, [bp-4] -009 00030C 50 PUSH ax -010 00030D B8B001 MOV ax, 1B0h -011 000310 50 PUSH ax -012 000311 E8D014 CALL near ptr scanf -013 000314 59 POP cx -014 000315 59 POP cx -015 000316 FF76FE PUSH word ptr [bp-2] -016 000319 FF76FC PUSH word ptr [bp-4] -017 00031C B8B401 MOV ax, 1B4h -018 00031F 50 PUSH ax -019 000320 E8380C CALL near ptr printf -020 000323 83C406 ADD sp, 6 -021 000326 8D46F4 LEA ax, [bp-0Ch] -022 000329 50 PUSH ax -023 00032A B8CE01 MOV ax, 1CEh -024 00032D 50 PUSH ax -025 00032E E8B314 CALL near ptr scanf -026 000331 59 POP cx -027 000332 59 POP cx -028 000333 8D46F6 LEA ax, [bp-0Ah] -029 000336 50 PUSH ax -030 000337 B8D101 MOV ax, 1D1h -031 00033A 50 PUSH ax -032 00033B E8A614 CALL near ptr scanf -033 00033E 59 POP cx -034 00033F 59 POP cx -035 000340 C746FA0000 MOV word ptr [bp-6], 0 -036 000345 C746F80100 MOV word ptr [bp-8], 1 - -038 0003B2 8B56FA L1: MOV dx, [bp-6] -039 0003B5 8B46F8 MOV ax, [bp-8] -040 0003B8 3B56FE CMP dx, [bp-2] -041 0003BB 7C8F JL L2 -042 0003BD 7F05 JG L3 -043 0003BF 3B46FC CMP ax, [bp-4] -044 0003C2 7688 JBE L2 - -045 0003C4 FF76F4 L3: PUSH word ptr [bp-0Ch] -046 0003C7 B8D401 MOV ax, 1D4h -047 0003CA 50 PUSH ax -048 0003CB E88D0B CALL near ptr printf -049 0003CE 59 POP cx -050 0003CF 59 POP cx -051 0003D0 5E POP si -052 0003D1 8BE5 MOV sp, bp -053 0003D3 5D POP bp -054 0003D4 C3 RET - -055 00034C BE0100 L2: MOV si, 1 - -057 0003A5 83FE28 L4: CMP si, 28h -058 0003A8 7EA7 JLE L5 -059 0003AA 8346F801 ADD word ptr [bp-8], 1 -060 0003AE 8356FA00 ADC word ptr [bp-6], 0 -061 JMP L1 ;Synthetic inst - -062 000351 8B46F4 L5: MOV ax, [bp-0Ch] -063 000354 F766F4 MUL word ptr [bp-0Ch] -064 000357 F766F4 MUL word ptr [bp-0Ch] -065 00035A F766F4 MUL word ptr [bp-0Ch] -066 00035D F766F4 MUL word ptr [bp-0Ch] -067 000360 F766F4 MUL word ptr [bp-0Ch] -068 000363 F766F4 MUL word ptr [bp-0Ch] -069 000366 F766F4 MUL word ptr [bp-0Ch] -070 000369 F766F4 MUL word ptr [bp-0Ch] -071 00036C F766F4 MUL word ptr [bp-0Ch] -072 00036F F766F4 MUL word ptr [bp-0Ch] -073 000372 F766F4 MUL word ptr [bp-0Ch] -074 000375 F766F4 MUL word ptr [bp-0Ch] -075 000378 F766F4 MUL word ptr [bp-0Ch] -076 00037B F766F4 MUL word ptr [bp-0Ch] -077 00037E F766F4 MUL word ptr [bp-0Ch] -078 000381 F766F4 MUL word ptr [bp-0Ch] -079 000384 F766F4 MUL word ptr [bp-0Ch] -080 000387 F766F4 MUL word ptr [bp-0Ch] -081 00038A F766F4 MUL word ptr [bp-0Ch] -082 00038D F766F4 MUL word ptr [bp-0Ch] -083 000390 F766F4 MUL word ptr [bp-0Ch] -084 000393 F766F4 MUL word ptr [bp-0Ch] -085 000396 F766F4 MUL word ptr [bp-0Ch] -086 000399 F766F4 MUL word ptr [bp-0Ch] -087 00039C BA0300 MOV dx, 3 -088 00039F F7E2 MUL dx -089 0003A1 8946F4 MOV [bp-0Ch], ax -090 0003A4 46 INC si -091 JMP L4 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/BENCHMUL.b b/tests/prev/BENCHMUL.b deleted file mode 100644 index e2f9357..0000000 --- a/tests/prev/BENCHMUL.b +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Input file : ./tests/inputs/BENCHMUL.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -int loc2; -long loc3; -long loc4; -int loc5; - - printf ("enter number of iterations\n"); - scanf ("%ld", &loc0); - printf ("executing %ld iterations\n", loc4); - scanf ("%d", &loc1); - scanf ("%d", &loc2); - loc3 = 1; - - while ((loc3 <= loc4)) { - loc5 = 1; - - while ((loc5 <= 40)) { - loc1 = (((((((((((((((((((((((((loc1 * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * loc1) * 3); - loc5 = (loc5 + 1); - } /* end of while */ - loc3 = (loc3 + 1); - } /* end of while */ - printf ("a=%d\n", loc1); -} - diff --git a/tests/prev/BENCHMUS.EXE.a1 b/tests/prev/BENCHMUS.EXE.a1 deleted file mode 100644 index 60b043f..0000000 --- a/tests/prev/BENCHMUS.EXE.a1 +++ /dev/null @@ -1,91 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0A SUB sp, 0Ah -003 000300 56 PUSH si -004 000301 57 PUSH di -005 000302 B8A801 MOV ax, 1A8h -006 000305 50 PUSH ax -007 000306 E8240C CALL near ptr printf -008 000309 59 POP cx -009 00030A 8D46FC LEA ax, [bp-4] -010 00030D 50 PUSH ax -011 00030E B8C401 MOV ax, 1C4h -012 000311 50 PUSH ax -013 000312 E8A114 CALL near ptr scanf -014 000315 59 POP cx -015 000316 59 POP cx -016 000317 FF76FE PUSH word ptr [bp-2] -017 00031A FF76FC PUSH word ptr [bp-4] -018 00031D B8C801 MOV ax, 1C8h -019 000320 50 PUSH ax -020 000321 E8090C CALL near ptr printf -021 000324 83C406 ADD sp, 6 -022 000327 BE1400 MOV si, 14h -023 00032A 8976F6 MOV [bp-0Ah], si -024 00032D C746FA0000 MOV word ptr [bp-6], 0 -025 000332 C746F80100 MOV word ptr [bp-8], 1 -026 000337 EB4C JMP L1 - -027 000385 8B56FA L1: MOV dx, [bp-6] -028 000388 8B46F8 MOV ax, [bp-8] -029 00038B 3B56FE CMP dx, [bp-2] -030 00038E 7CA9 JL L2 -031 000390 7F05 JG L3 -032 000392 3B46FC CMP ax, [bp-4] -033 000395 76A2 JBE L2 - -034 000397 56 L3: PUSH si -035 000398 B8E201 MOV ax, 1E2h -036 00039B 50 PUSH ax -037 00039C E88E0B CALL near ptr printf -038 00039F 59 POP cx -039 0003A0 59 POP cx -040 0003A1 5F POP di -041 0003A2 5E POP si -042 0003A3 8BE5 MOV sp, bp -043 0003A5 5D POP bp -044 0003A6 C3 RET - -045 000339 BF0100 L2: MOV di, 1 -046 00033C EB3A JMP L4 - -047 000378 83FF28 L4: CMP di, 28h -048 00037B 7EC1 JLE L5 -049 00037D 8346F801 ADD word ptr [bp-8], 1 -050 000381 8356FA00 ADC word ptr [bp-6], 0 -051 JMP L1 ;Synthetic inst - -052 00033E 8BC6 L5: MOV ax, si -053 000340 F7E6 MUL si -054 000342 F7E6 MUL si -055 000344 F7E6 MUL si -056 000346 F7E6 MUL si -057 000348 F7E6 MUL si -058 00034A F7E6 MUL si -059 00034C F7E6 MUL si -060 00034E F7E6 MUL si -061 000350 F7E6 MUL si -062 000352 F7E6 MUL si -063 000354 F7E6 MUL si -064 000356 F7E6 MUL si -065 000358 F7E6 MUL si -066 00035A F7E6 MUL si -067 00035C F7E6 MUL si -068 00035E F7E6 MUL si -069 000360 F7E6 MUL si -070 000362 F7E6 MUL si -071 000364 F7E6 MUL si -072 000366 F7E6 MUL si -073 000368 F7E6 MUL si -074 00036A F7E6 MUL si -075 00036C F7E6 MUL si -076 00036E F7E6 MUL si -077 000370 BA0300 MOV dx, 3 -078 000373 F7E2 MUL dx -079 000375 8BF0 MOV si, ax -080 000377 47 INC di -081 JMP L4 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/BENCHMUS.EXE.a2 b/tests/prev/BENCHMUS.EXE.a2 deleted file mode 100644 index 2495a57..0000000 --- a/tests/prev/BENCHMUS.EXE.a2 +++ /dev/null @@ -1,89 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0A SUB sp, 0Ah -003 000300 56 PUSH si -004 000301 57 PUSH di -005 000302 B8A801 MOV ax, 1A8h -006 000305 50 PUSH ax -007 000306 E8240C CALL near ptr printf -008 000309 59 POP cx -009 00030A 8D46FC LEA ax, [bp-4] -010 00030D 50 PUSH ax -011 00030E B8C401 MOV ax, 1C4h -012 000311 50 PUSH ax -013 000312 E8A114 CALL near ptr scanf -014 000315 59 POP cx -015 000316 59 POP cx -016 000317 FF76FE PUSH word ptr [bp-2] -017 00031A FF76FC PUSH word ptr [bp-4] -018 00031D B8C801 MOV ax, 1C8h -019 000320 50 PUSH ax -020 000321 E8090C CALL near ptr printf -021 000324 83C406 ADD sp, 6 -022 000327 BE1400 MOV si, 14h -023 00032A 8976F6 MOV [bp-0Ah], si -024 00032D C746FA0000 MOV word ptr [bp-6], 0 -025 000332 C746F80100 MOV word ptr [bp-8], 1 - -027 000385 8B56FA L1: MOV dx, [bp-6] -028 000388 8B46F8 MOV ax, [bp-8] -029 00038B 3B56FE CMP dx, [bp-2] -030 00038E 7CA9 JL L2 -031 000390 7F05 JG L3 -032 000392 3B46FC CMP ax, [bp-4] -033 000395 76A2 JBE L2 - -034 000397 56 L3: PUSH si -035 000398 B8E201 MOV ax, 1E2h -036 00039B 50 PUSH ax -037 00039C E88E0B CALL near ptr printf -038 00039F 59 POP cx -039 0003A0 59 POP cx -040 0003A1 5F POP di -041 0003A2 5E POP si -042 0003A3 8BE5 MOV sp, bp -043 0003A5 5D POP bp -044 0003A6 C3 RET - -045 000339 BF0100 L2: MOV di, 1 - -047 000378 83FF28 L4: CMP di, 28h -048 00037B 7EC1 JLE L5 -049 00037D 8346F801 ADD word ptr [bp-8], 1 -050 000381 8356FA00 ADC word ptr [bp-6], 0 -051 JMP L1 ;Synthetic inst - -052 00033E 8BC6 L5: MOV ax, si -053 000340 F7E6 MUL si -054 000342 F7E6 MUL si -055 000344 F7E6 MUL si -056 000346 F7E6 MUL si -057 000348 F7E6 MUL si -058 00034A F7E6 MUL si -059 00034C F7E6 MUL si -060 00034E F7E6 MUL si -061 000350 F7E6 MUL si -062 000352 F7E6 MUL si -063 000354 F7E6 MUL si -064 000356 F7E6 MUL si -065 000358 F7E6 MUL si -066 00035A F7E6 MUL si -067 00035C F7E6 MUL si -068 00035E F7E6 MUL si -069 000360 F7E6 MUL si -070 000362 F7E6 MUL si -071 000364 F7E6 MUL si -072 000366 F7E6 MUL si -073 000368 F7E6 MUL si -074 00036A F7E6 MUL si -075 00036C F7E6 MUL si -076 00036E F7E6 MUL si -077 000370 BA0300 MOV dx, 3 -078 000373 F7E2 MUL dx -079 000375 8BF0 MOV si, ax -080 000377 47 INC di -081 JMP L4 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/BENCHMUS.b b/tests/prev/BENCHMUS.b deleted file mode 100644 index c36ff5c..0000000 --- a/tests/prev/BENCHMUS.b +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Input file : ./tests/inputs/BENCHMUS.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -long loc2; -long loc3; -int loc4; -int loc5; - - printf ("enter number of iterations\n"); - scanf ("%ld", &loc0); - printf ("executing %ld iterations\n", loc3); - loc4 = 20; - loc1 = loc4; - loc2 = 1; - - while ((loc2 <= loc3)) { - loc5 = 1; - - while ((loc5 <= 40)) { - loc4 = (((((((((((((((((((((((((loc4 * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * loc4) * 3); - loc5 = (loc5 + 1); - } /* end of while */ - loc2 = (loc2 + 1); - } /* end of while */ - printf ("a=%d\n", loc4); -} - diff --git a/tests/prev/BENCHSHO.EXE.a1 b/tests/prev/BENCHSHO.EXE.a1 deleted file mode 100644 index 904c2c7..0000000 --- a/tests/prev/BENCHSHO.EXE.a1 +++ /dev/null @@ -1,113 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0E SUB sp, 0Eh -003 000300 8D46FC LEA ax, [bp-4] -004 000303 50 PUSH ax -005 000304 B89401 MOV ax, 194h -006 000307 50 PUSH ax -007 000308 E8E914 CALL near ptr scanf -008 00030B 59 POP cx -009 00030C 59 POP cx -010 00030D FF76FE PUSH word ptr [bp-2] -011 000310 FF76FC PUSH word ptr [bp-4] -012 000313 B89801 MOV ax, 198h -013 000316 50 PUSH ax -014 000317 E8510C CALL near ptr printf -015 00031A 83C406 ADD sp, 6 -016 00031D 8D46F2 LEA ax, [bp-0Eh] -017 000320 50 PUSH ax -018 000321 B8B201 MOV ax, 1B2h -019 000324 50 PUSH ax -020 000325 E8CC14 CALL near ptr scanf -021 000328 59 POP cx -022 000329 59 POP cx -023 00032A 8D46F4 LEA ax, [bp-0Ch] -024 00032D 50 PUSH ax -025 00032E B8B601 MOV ax, 1B6h -026 000331 50 PUSH ax -027 000332 E8BF14 CALL near ptr scanf -028 000335 59 POP cx -029 000336 59 POP cx -030 000337 C746FA0000 MOV word ptr [bp-6], 0 -031 00033C C746F80100 MOV word ptr [bp-8], 1 -032 000341 E97900 JMP L1 - -033 0003BD 8B56FA L1: MOV dx, [bp-6] -034 0003C0 8B46F8 MOV ax, [bp-8] -035 0003C3 3B56FE CMP dx, [bp-2] -036 0003C6 7D03 JGE L2 -037 0003C8 E979FF JMP L3 - -038 000344 C746F60100 L3: MOV word ptr [bp-0Ah], 1 -039 000349 EB64 JMP L4 - -040 0003AF 837EF628 L4: CMP word ptr [bp-0Ah], 28h -041 0003B3 7E96 JLE L5 -042 0003B5 8346F801 ADD word ptr [bp-8], 1 -043 0003B9 8356FA00 ADC word ptr [bp-6], 0 -044 JMP L1 ;Synthetic inst - -045 00034B 8B46F2 L5: MOV ax, [bp-0Eh] -046 00034E 0346F4 ADD ax, [bp-0Ch] -047 000351 0346F6 ADD ax, [bp-0Ah] -048 000354 8946F2 MOV [bp-0Eh], ax -049 000357 8B46F2 MOV ax, [bp-0Eh] -050 00035A D1F8 SAR ax, 1 -051 00035C 8946F4 MOV [bp-0Ch], ax -052 00035F 8B46F4 MOV ax, [bp-0Ch] -053 000362 BB0A00 MOV bx, 0Ah -054 000365 99 CWD -056 000366 F7FB IDIV bx -058 000368 8956F2 MOV [bp-0Eh], dx -059 00036B 8B46F4 MOV ax, [bp-0Ch] -060 00036E 3B46F6 CMP ax, [bp-0Ah] -061 000371 7505 JNE L6 -062 000373 B80100 MOV ax, 1 -063 000376 EB02 JMP L7 - -064 00037A 8946F2 L7: MOV [bp-0Eh], ax -065 00037D 8B46F2 MOV ax, [bp-0Eh] -066 000380 0B46F6 OR ax, [bp-0Ah] -067 000383 8946F4 MOV [bp-0Ch], ax -068 000386 8B46F4 MOV ax, [bp-0Ch] -069 000389 F7D8 NEG ax -070 00038B 1BC0 SBB ax, ax -071 00038D 40 INC ax -072 00038E 8946F2 MOV [bp-0Eh], ax -073 000391 8B46F2 MOV ax, [bp-0Eh] -074 000394 0346F6 ADD ax, [bp-0Ah] -075 000397 8946F4 MOV [bp-0Ch], ax -076 00039A 8B46F4 MOV ax, [bp-0Ch] -077 00039D 3B46F6 CMP ax, [bp-0Ah] -078 0003A0 7E05 JLE L8 -079 0003A2 B80100 MOV ax, 1 -080 0003A5 EB02 JMP L9 - -081 0003A9 8946F2 L9: MOV [bp-0Eh], ax -082 0003AC FF46F6 INC word ptr [bp-0Ah] -083 JMP L4 ;Synthetic inst - -084 0003A7 33C0 L8: XOR ax, ax -085 JMP L9 ;Synthetic inst - -086 000378 33C0 L6: XOR ax, ax -087 JMP L7 ;Synthetic inst - -088 0003CB 7F08 L2: JG L10 -089 0003CD 3B46FC CMP ax, [bp-4] -090 0003D0 7703 JA L10 -091 0003D2 E96FFF JMP L3 - -092 0003D5 FF76F2 L10: PUSH word ptr [bp-0Eh] -093 0003D8 B8BA01 MOV ax, 1BAh -094 0003DB 50 PUSH ax -095 0003DC E88C0B CALL near ptr printf -096 0003DF 59 POP cx -097 0003E0 59 POP cx -098 0003E1 8BE5 MOV sp, bp -099 0003E3 5D POP bp -100 0003E4 C3 RET - - main ENDP - diff --git a/tests/prev/BENCHSHO.EXE.a2 b/tests/prev/BENCHSHO.EXE.a2 deleted file mode 100644 index 6e5837e..0000000 --- a/tests/prev/BENCHSHO.EXE.a2 +++ /dev/null @@ -1,109 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC0E SUB sp, 0Eh -003 000300 8D46FC LEA ax, [bp-4] -004 000303 50 PUSH ax -005 000304 B89401 MOV ax, 194h -006 000307 50 PUSH ax -007 000308 E8E914 CALL near ptr scanf -008 00030B 59 POP cx -009 00030C 59 POP cx -010 00030D FF76FE PUSH word ptr [bp-2] -011 000310 FF76FC PUSH word ptr [bp-4] -012 000313 B89801 MOV ax, 198h -013 000316 50 PUSH ax -014 000317 E8510C CALL near ptr printf -015 00031A 83C406 ADD sp, 6 -016 00031D 8D46F2 LEA ax, [bp-0Eh] -017 000320 50 PUSH ax -018 000321 B8B201 MOV ax, 1B2h -019 000324 50 PUSH ax -020 000325 E8CC14 CALL near ptr scanf -021 000328 59 POP cx -022 000329 59 POP cx -023 00032A 8D46F4 LEA ax, [bp-0Ch] -024 00032D 50 PUSH ax -025 00032E B8B601 MOV ax, 1B6h -026 000331 50 PUSH ax -027 000332 E8BF14 CALL near ptr scanf -028 000335 59 POP cx -029 000336 59 POP cx -030 000337 C746FA0000 MOV word ptr [bp-6], 0 -031 00033C C746F80100 MOV word ptr [bp-8], 1 - -033 0003BD 8B56FA L1: MOV dx, [bp-6] -034 0003C0 8B46F8 MOV ax, [bp-8] -035 0003C3 3B56FE CMP dx, [bp-2] -036 0003C6 7D03 JGE L2 - -038 000344 C746F60100 L3: MOV word ptr [bp-0Ah], 1 - -040 0003AF 837EF628 L4: CMP word ptr [bp-0Ah], 28h -041 0003B3 7E96 JLE L5 -042 0003B5 8346F801 ADD word ptr [bp-8], 1 -043 0003B9 8356FA00 ADC word ptr [bp-6], 0 -044 JMP L1 ;Synthetic inst - -045 00034B 8B46F2 L5: MOV ax, [bp-0Eh] -046 00034E 0346F4 ADD ax, [bp-0Ch] -047 000351 0346F6 ADD ax, [bp-0Ah] -048 000354 8946F2 MOV [bp-0Eh], ax -049 000357 8B46F2 MOV ax, [bp-0Eh] -050 00035A D1F8 SAR ax, 1 -051 00035C 8946F4 MOV [bp-0Ch], ax -052 00035F 8B46F4 MOV ax, [bp-0Ch] -053 000362 BB0A00 MOV bx, 0Ah -054 000365 99 CWD -055 MOV tmp, dx:ax ;Synthetic inst -056 000366 F7FB IDIV bx -057 MOD bx ;Synthetic inst -058 000368 8956F2 MOV [bp-0Eh], dx -059 00036B 8B46F4 MOV ax, [bp-0Ch] -060 00036E 3B46F6 CMP ax, [bp-0Ah] -061 000371 7505 JNE L6 -062 000373 B80100 MOV ax, 1 - -064 00037A 8946F2 L7: MOV [bp-0Eh], ax -065 00037D 8B46F2 MOV ax, [bp-0Eh] -066 000380 0B46F6 OR ax, [bp-0Ah] -067 000383 8946F4 MOV [bp-0Ch], ax -068 000386 8B46F4 MOV ax, [bp-0Ch] -069 000389 F7D8 NEG ax -070 00038B 1BC0 SBB ax, ax -071 00038D 40 INC ax -072 00038E 8946F2 MOV [bp-0Eh], ax -073 000391 8B46F2 MOV ax, [bp-0Eh] -074 000394 0346F6 ADD ax, [bp-0Ah] -075 000397 8946F4 MOV [bp-0Ch], ax -076 00039A 8B46F4 MOV ax, [bp-0Ch] -077 00039D 3B46F6 CMP ax, [bp-0Ah] -078 0003A0 7E05 JLE L8 -079 0003A2 B80100 MOV ax, 1 - -081 0003A9 8946F2 L9: MOV [bp-0Eh], ax -082 0003AC FF46F6 INC word ptr [bp-0Ah] -083 JMP L4 ;Synthetic inst - -084 0003A7 33C0 L8: XOR ax, ax -085 JMP L9 ;Synthetic inst - -086 000378 33C0 L6: XOR ax, ax -087 JMP L7 ;Synthetic inst - -088 0003CB 7F08 L2: JG L10 -089 0003CD 3B46FC CMP ax, [bp-4] -090 0003D0 7703 JA L10 - -092 0003D5 FF76F2 L10: PUSH word ptr [bp-0Eh] -093 0003D8 B8BA01 MOV ax, 1BAh -094 0003DB 50 PUSH ax -095 0003DC E88C0B CALL near ptr printf -096 0003DF 59 POP cx -097 0003E0 59 POP cx -098 0003E1 8BE5 MOV sp, bp -099 0003E3 5D POP bp -100 0003E4 C3 RET - - main ENDP - diff --git a/tests/prev/BENCHSHO.b b/tests/prev/BENCHSHO.b deleted file mode 100644 index 7786608..0000000 --- a/tests/prev/BENCHSHO.b +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Input file : ./tests/inputs/BENCHSHO.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -int loc2; -int loc3; -long loc4; -long loc5; -int loc6; /* ax */ - - scanf ("%ld", &loc0); - printf ("executing %ld iterations\n", loc5); - scanf ("%ld", &loc1); - scanf ("%ld", &loc2); - loc4 = 1; - - while ((loc4 <= loc5)) { - loc3 = 1; - - while ((loc3 <= 40)) { - loc1 = ((loc1 + loc2) + loc3); - loc2 = (loc1 >> 1); - loc1 = (loc2 % 10); - - if (loc2 == loc3) { - loc6 = 1; - } - else { - loc6 = 0; - } - loc1 = loc6; - loc2 = (loc1 | loc3); - loc1 = !loc2; - loc2 = (loc1 + loc3); - - if (loc2 > loc3) { - loc6 = 1; - } - else { - loc6 = 0; - } - loc1 = loc6; - loc3 = (loc3 + 1); - } /* end of while */ - loc4 = (loc4 + 1); - } /* end of while */ - printf ("a=%d\n", loc1); -} - diff --git a/tests/prev/BYTEOPS.EXE.a1 b/tests/prev/BYTEOPS.EXE.a1 deleted file mode 100644 index 80bd09b..0000000 --- a/tests/prev/BYTEOPS.EXE.a1 +++ /dev/null @@ -1,58 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC02 SUB sp, 2 -003 000300 C646FEFF MOV byte ptr [bp-2], 0FFh -004 000304 C646FF8F MOV byte ptr [bp-1], 8Fh -005 000308 8A46FE MOV al, [bp-2] -006 00030B 0246FF ADD al, [bp-1] -007 00030E 8846FF MOV [bp-1], al -008 000311 8A46FE MOV al, [bp-2] -009 000314 2A46FF SUB al, [bp-1] -010 000317 8846FE MOV [bp-2], al -011 00031A 8A46FE MOV al, [bp-2] -012 00031D B400 MOV ah, 0 -013 00031F 8A56FF MOV dl, [bp-1] -014 000322 B600 MOV dh, 0 -015 000324 F7E2 MUL dx -016 000326 8846FE MOV [bp-2], al -017 000329 8A46FF MOV al, [bp-1] -018 00032C B400 MOV ah, 0 -019 00032E 8A56FE MOV dl, [bp-2] -020 000331 B600 MOV dh, 0 -021 000333 8BDA MOV bx, dx -022 000335 99 CWD -024 000336 F7FB IDIV bx -026 000338 8846FF MOV [bp-1], al -027 00033B 8A46FF MOV al, [bp-1] -028 00033E B400 MOV ah, 0 -029 000340 8A56FE MOV dl, [bp-2] -030 000343 B600 MOV dh, 0 -031 000345 8BDA MOV bx, dx -032 000347 99 CWD -034 000348 F7FB IDIV bx -036 00034A 8856FF MOV [bp-1], dl -037 00034D 8A46FE MOV al, [bp-2] -038 000350 B105 MOV cl, 5 -039 000352 D2E0 SHL al, cl -040 000354 8846FE MOV [bp-2], al -041 000357 8A46FF MOV al, [bp-1] -042 00035A 8A4EFE MOV cl, [bp-2] -043 00035D D2E8 SHR al, cl -044 00035F 8846FF MOV [bp-1], al -045 000362 8A46FF MOV al, [bp-1] -046 000365 B400 MOV ah, 0 -047 000367 50 PUSH ax -048 000368 8A46FE MOV al, [bp-2] -049 00036B B400 MOV ah, 0 -050 00036D 50 PUSH ax -051 00036E B89401 MOV ax, 194h -052 000371 50 PUSH ax -053 000372 E8AB06 CALL near ptr printf -054 000375 83C406 ADD sp, 6 -055 000378 8BE5 MOV sp, bp -056 00037A 5D POP bp -057 00037B C3 RET - - main ENDP - diff --git a/tests/prev/BYTEOPS.EXE.a2 b/tests/prev/BYTEOPS.EXE.a2 deleted file mode 100644 index 01f6b52..0000000 --- a/tests/prev/BYTEOPS.EXE.a2 +++ /dev/null @@ -1,62 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC02 SUB sp, 2 -003 000300 C646FEFF MOV byte ptr [bp-2], 0FFh -004 000304 C646FF8F MOV byte ptr [bp-1], 8Fh -005 000308 8A46FE MOV al, [bp-2] -006 00030B 0246FF ADD al, [bp-1] -007 00030E 8846FF MOV [bp-1], al -008 000311 8A46FE MOV al, [bp-2] -009 000314 2A46FF SUB al, [bp-1] -010 000317 8846FE MOV [bp-2], al -011 00031A 8A46FE MOV al, [bp-2] -012 00031D B400 MOV ah, 0 -013 00031F 8A56FF MOV dl, [bp-1] -014 000322 B600 MOV dh, 0 -015 000324 F7E2 MUL dx -016 000326 8846FE MOV [bp-2], al -017 000329 8A46FF MOV al, [bp-1] -018 00032C B400 MOV ah, 0 -019 00032E 8A56FE MOV dl, [bp-2] -020 000331 B600 MOV dh, 0 -021 000333 8BDA MOV bx, dx -022 000335 99 CWD -023 MOV tmp, dx:ax ;Synthetic inst -024 000336 F7FB IDIV bx -025 MOD bx ;Synthetic inst -026 000338 8846FF MOV [bp-1], al -027 00033B 8A46FF MOV al, [bp-1] -028 00033E B400 MOV ah, 0 -029 000340 8A56FE MOV dl, [bp-2] -030 000343 B600 MOV dh, 0 -031 000345 8BDA MOV bx, dx -032 000347 99 CWD -033 MOV tmp, dx:ax ;Synthetic inst -034 000348 F7FB IDIV bx -035 MOD bx ;Synthetic inst -036 00034A 8856FF MOV [bp-1], dl -037 00034D 8A46FE MOV al, [bp-2] -038 000350 B105 MOV cl, 5 -039 000352 D2E0 SHL al, cl -040 000354 8846FE MOV [bp-2], al -041 000357 8A46FF MOV al, [bp-1] -042 00035A 8A4EFE MOV cl, [bp-2] -043 00035D D2E8 SHR al, cl -044 00035F 8846FF MOV [bp-1], al -045 000362 8A46FF MOV al, [bp-1] -046 000365 B400 MOV ah, 0 -047 000367 50 PUSH ax -048 000368 8A46FE MOV al, [bp-2] -049 00036B B400 MOV ah, 0 -050 00036D 50 PUSH ax -051 00036E B89401 MOV ax, 194h -052 000371 50 PUSH ax -053 000372 E8AB06 CALL near ptr printf -054 000375 83C406 ADD sp, 6 -055 000378 8BE5 MOV sp, bp -056 00037A 5D POP bp -057 00037B C3 RET - - main ENDP - diff --git a/tests/prev/BYTEOPS.b b/tests/prev/BYTEOPS.b deleted file mode 100644 index 219e8cd..0000000 --- a/tests/prev/BYTEOPS.b +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Input file : ./tests/inputs/BYTEOPS.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -int loc2; - - loc1 = 255; - loc2 = 143; - loc2 = (loc1 + loc2); - loc1 = (loc1 - loc2); - loc1 = (loc1 * loc2); - loc2 = (loc2 / loc1); - loc2 = (loc2 % loc1); - loc1 = (loc1 << 5); - loc2 = (loc2 >> loc1); - printf ("a = %d, b = %d\n", loc1, loc2); -} - diff --git a/tests/prev/FIBOS.EXE.a1 b/tests/prev/FIBOS.EXE.a1 deleted file mode 100644 index 400cc2a..0000000 --- a/tests/prev/FIBOS.EXE.a1 +++ /dev/null @@ -1,90 +0,0 @@ - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC04 SUB sp, 4 -003 000300 56 PUSH si -004 000301 57 PUSH di -005 000302 B89401 MOV ax, 194h -006 000305 50 PUSH ax -007 000306 E8080C CALL near ptr printf -008 000309 59 POP cx -009 00030A 8D46FC LEA ax, [bp-4] -010 00030D 50 PUSH ax -011 00030E B8B101 MOV ax, 1B1h -012 000311 50 PUSH ax -013 000312 E88514 CALL near ptr scanf -014 000315 59 POP cx -015 000316 59 POP cx -016 000317 BE0100 MOV si, 1 -017 00031A EB2D JMP L1 - -018 000349 3B76FC L1: CMP si, [bp-4] -019 00034C 7ECE JLE L2 -020 00034E 33C0 XOR ax, ax -021 000350 50 PUSH ax -022 000351 E87300 CALL near ptr exit -023 000354 59 POP cx -024 000355 5F POP di -025 000356 5E POP si -026 000357 8BE5 MOV sp, bp -027 000359 5D POP bp -028 00035A C3 RET - -029 00031C B8B401 L2: MOV ax, 1B4h -030 00031F 50 PUSH ax -031 000320 E8EE0B CALL near ptr printf -032 000323 59 POP cx -033 000324 8D46FE LEA ax, [bp-2] -034 000327 50 PUSH ax -035 000328 B8C301 MOV ax, 1C3h -036 00032B 50 PUSH ax -037 00032C E86B14 CALL near ptr scanf -038 00032F 59 POP cx -039 000330 59 POP cx -040 000331 FF76FE PUSH word ptr [bp-2] -041 000334 E82400 CALL near ptr proc_1 -042 000337 59 POP cx -043 000338 8BF8 MOV di, ax -044 00033A 57 PUSH di -045 00033B FF76FE PUSH word ptr [bp-2] -046 00033E B8C601 MOV ax, 1C6h -047 000341 50 PUSH ax -048 000342 E8CC0B CALL near ptr printf -049 000345 83C406 ADD sp, 6 -050 000348 46 INC si -051 JMP L1 ;Synthetic inst - - main ENDP - - proc_1 PROC NEAR -000 00035B 55 PUSH bp -001 00035C 8BEC MOV bp, sp -002 00035E 56 PUSH si -003 00035F 8B7604 MOV si, [bp+4] -004 000362 83FE02 CMP si, 2 -005 000365 7E1C JLE L3 -006 000367 8BC6 MOV ax, si -007 000369 48 DEC ax -008 00036A 50 PUSH ax -009 00036B E8EDFF CALL near ptr proc_1 -010 00036E 59 POP cx -011 00036F 50 PUSH ax -012 000370 8BC6 MOV ax, si -013 000372 05FEFF ADD ax, 0FFFEh -014 000375 50 PUSH ax -015 000376 E8E2FF CALL near ptr proc_1 -016 000379 59 POP cx -017 00037A 8BD0 MOV dx, ax -018 00037C 58 POP ax -019 00037D 03C2 ADD ax, dx -020 00037F EB07 JMP L4 - -021 000388 5E L4: POP si -022 000389 5D POP bp -023 00038A C3 RET - -024 000383 B80100 L3: MOV ax, 1 -025 000386 EB00 JMP L4 - - proc_1 ENDP - diff --git a/tests/prev/FIBOS.EXE.a2 b/tests/prev/FIBOS.EXE.a2 deleted file mode 100644 index 51f5edf..0000000 --- a/tests/prev/FIBOS.EXE.a2 +++ /dev/null @@ -1,88 +0,0 @@ - proc_1 PROC NEAR -000 00035B 55 PUSH bp -001 00035C 8BEC MOV bp, sp -002 00035E 56 PUSH si -003 00035F 8B7604 MOV si, [bp+4] -004 000362 83FE02 CMP si, 2 -005 000365 7E1C JLE L1 -006 000367 8BC6 MOV ax, si -007 000369 48 DEC ax -008 00036A 50 PUSH ax -009 00036B E8EDFF CALL near ptr proc_1 -010 00036E 59 POP cx -011 00036F 50 PUSH ax -012 000370 8BC6 MOV ax, si -013 000372 05FEFF ADD ax, 0FFFEh -014 000375 50 PUSH ax -015 000376 E8E2FF CALL near ptr proc_1 -016 000379 59 POP cx -017 00037A 8BD0 MOV dx, ax -018 00037C 58 POP ax -019 00037D 03C2 ADD ax, dx - -021 000388 5E L2: POP si -022 000389 5D POP bp -023 00038A C3 RET - -024 000383 B80100 L1: MOV ax, 1 -025 000386 EB00 JMP L2 - - proc_1 ENDP - - main PROC NEAR -000 0002FA 55 PUSH bp -001 0002FB 8BEC MOV bp, sp -002 0002FD 83EC04 SUB sp, 4 -003 000300 56 PUSH si -004 000301 57 PUSH di -005 000302 B89401 MOV ax, 194h -006 000305 50 PUSH ax -007 000306 E8080C CALL near ptr printf -008 000309 59 POP cx -009 00030A 8D46FC LEA ax, [bp-4] -010 00030D 50 PUSH ax -011 00030E B8B101 MOV ax, 1B1h -012 000311 50 PUSH ax -013 000312 E88514 CALL near ptr scanf -014 000315 59 POP cx -015 000316 59 POP cx -016 000317 BE0100 MOV si, 1 - -018 000349 3B76FC L3: CMP si, [bp-4] -019 00034C 7ECE JLE L4 -020 00034E 33C0 XOR ax, ax -021 000350 50 PUSH ax -022 000351 E87300 CALL near ptr exit -023 000354 59 POP cx -024 000355 5F POP di -025 000356 5E POP si -026 000357 8BE5 MOV sp, bp -027 000359 5D POP bp -028 00035A C3 RET - -029 00031C B8B401 L4: MOV ax, 1B4h -030 00031F 50 PUSH ax -031 000320 E8EE0B CALL near ptr printf -032 000323 59 POP cx -033 000324 8D46FE LEA ax, [bp-2] -034 000327 50 PUSH ax -035 000328 B8C301 MOV ax, 1C3h -036 00032B 50 PUSH ax -037 00032C E86B14 CALL near ptr scanf -038 00032F 59 POP cx -039 000330 59 POP cx -040 000331 FF76FE PUSH word ptr [bp-2] -041 000334 E82400 CALL near ptr proc_1 -042 000337 59 POP cx -043 000338 8BF8 MOV di, ax -044 00033A 57 PUSH di -045 00033B FF76FE PUSH word ptr [bp-2] -046 00033E B8C601 MOV ax, 1C6h -047 000341 50 PUSH ax -048 000342 E8CC0B CALL near ptr printf -049 000345 83C406 ADD sp, 6 -050 000348 46 INC si -051 JMP L3 ;Synthetic inst - - main ENDP - diff --git a/tests/prev/FIBOS.b b/tests/prev/FIBOS.b deleted file mode 100644 index aec76cf..0000000 --- a/tests/prev/FIBOS.b +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Input file : ./tests/inputs/FIBOS.EXE - * File type : EXE - */ - -#include "dcc.h" - - -int proc_1 (int arg0) -/* Takes 2 bytes of parameters. - * High-level language prologue code. - * C calling convention. - */ -{ -int loc1; -int loc2; /* ax */ - - loc1 = arg0; - - if (loc1 > 2) { - loc2 = (proc_1 ((loc1 - 1)) + proc_1 ((loc1 + 0xfffe))); - } - else { - loc2 = 1; - } - return (loc2); -} - - -void main () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -int loc2; -int loc3; -int loc4; - - printf ("Input number of iterations: "); - scanf ("%d", &loc1); - loc3 = 1; - - while ((loc3 <= loc1)) { - printf ("Input number: "); - scanf ("%d", &loc2); - loc4 = proc_1 (loc2); - printf ("fibonacci(%d) = %u\n", loc2, loc4); - loc3 = (loc3 + 1); - } /* end of while */ - exit (0); -} - diff --git a/tests/prev/MIN.EXE.a1 b/tests/prev/MIN.EXE.a1 deleted file mode 100644 index 6036205..0000000 --- a/tests/prev/MIN.EXE.a1 +++ /dev/null @@ -1,39 +0,0 @@ - start PROC NEAR -000 000100 55 PUSH bp -001 000101 8BEC MOV bp, sp -002 000103 83EC02 SUB sp, 2 -003 000106 C746FE0000 MOV word ptr [bp-2], 0 -004 00010B 8B46FE MOV ax, [bp-2] -005 00010E 3D0600 CMP ax, 6 -006 000111 7735 JA L1 -007 000113 8BD8 MOV bx, ax -008 000115 D1E3 SHL bx, 1 -009 000117 2EFFA71C00 JMP word ptr cs:[bx+1Ch];Switch - -010 00012A B80200 MOV ax, 2 ;Case l0 -011 00012D EB1E JMP L2 - -012 00014D 8BE5 L2: MOV sp, bp -013 00014F 5D POP bp -014 000150 C3 RET - -015 00012F B80300 MOV ax, 3 ;Case l1 -016 000132 EB19 JMP L2 - -017 000134 B80700 MOV ax, 7 ;Case l2 -018 000137 EB14 JMP L2 - -019 000139 B80D00 MOV ax, 0Dh ;Case l3 -020 00013C EB0F JMP L2 - -021 000148 B82C00 L1: MOV ax, 2Ch ;Case l4 -022 00014B EB00 JMP L2 - -023 00013E B81700 MOV ax, 17h ;Case l5 -024 000141 EB0A JMP L2 - -025 000143 B80D00 MOV ax, 0Dh ;Case l6 -026 000146 EB05 JMP L2 - - start ENDP - diff --git a/tests/prev/MIN.EXE.a2 b/tests/prev/MIN.EXE.a2 deleted file mode 100644 index 692f456..0000000 --- a/tests/prev/MIN.EXE.a2 +++ /dev/null @@ -1,38 +0,0 @@ - start PROC NEAR -000 000100 55 PUSH bp -001 000101 8BEC MOV bp, sp -002 000103 83EC02 SUB sp, 2 -003 000106 C746FE0000 MOV word ptr [bp-2], 0 -004 00010B 8B46FE MOV ax, [bp-2] -005 00010E 3D0600 CMP ax, 6 -006 000111 7735 JA L1 -007 000113 8BD8 MOV bx, ax -008 000115 D1E3 SHL bx, 1 -009 000117 2EFFA71C00 JMP word ptr cs:[bx+1Ch];Switch - -010 00012A B80200 MOV ax, 2 ;Case l0 - -012 00014D 8BE5 L2: MOV sp, bp -013 00014F 5D POP bp -014 000150 C3 RET - -015 00012F B80300 MOV ax, 3 ;Case l1 -016 000132 EB19 JMP L2 - -017 000134 B80700 MOV ax, 7 ;Case l2 -018 000137 EB14 JMP L2 - -019 000139 B80D00 MOV ax, 0Dh ;Case l3 -020 00013C EB0F JMP L2 - -021 000148 B82C00 L1: MOV ax, 2Ch ;Case l4 -022 00014B EB00 JMP L2 - -023 00013E B81700 MOV ax, 17h ;Case l5 -024 000141 EB0A JMP L2 - -025 000143 B80D00 MOV ax, 0Dh ;Case l6 -026 000146 EB05 JMP L2 - - start ENDP - diff --git a/tests/prev/MIN.b b/tests/prev/MIN.b deleted file mode 100644 index e5a1f30..0000000 --- a/tests/prev/MIN.b +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Input file : ./tests/inputs/MIN.EXE - * File type : EXE - */ - -#include "dcc.h" - - -void start () -/* Takes no parameters. - * High-level language prologue code. - */ -{ -int loc1; -int loc2; /* ax */ -int loc3; /* bx */ - - loc1 = 0; - loc2 = loc1; - - if (loc2 <= 6) { - loc3 = loc2; - } - else { - } -} -