removed some more dependencies on array indices, refactored out forward Long Defs checking
This commit is contained in:
parent
9a6788fd2d
commit
268a015d01
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -7,9 +7,12 @@
|
||||
|
||||
#pragma once
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <algorithm>
|
||||
#include "icode.h"
|
||||
/* Type definition */
|
||||
// this array has to stay in-order of addition i.e. not std::set<iICODE,std::less<iICODE> >
|
||||
// TODO: why ?
|
||||
struct IDX_ARRAY : public std::vector<iICODE>
|
||||
{
|
||||
bool inList(iICODE idx)
|
||||
|
||||
@ -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==".."
|
||||
|
||||
11
src/ast.cpp
11
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);
|
||||
|
||||
|
||||
@ -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 */
|
||||
|
||||
|
||||
371
src/proplong.cpp
371
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 */
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user