mirror of
https://github.com/cc65/cc65.git
synced 2024-09-29 02:55:20 +00:00
Check also sreg in OptSize1. Added information about shortcut functions for
longs that clear the high word of the right operand on entry. git-svn-id: svn://svn.cc65.org/cc65/trunk@4024 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
b1f772e9be
commit
582506b7fc
@ -164,6 +164,7 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "mulax9", REG_AX, REG_AX | REG_PTR1 },
|
{ "mulax9", REG_AX, REG_AX | REG_PTR1 },
|
||||||
{ "negax", REG_AX, REG_AX },
|
{ "negax", REG_AX, REG_AX },
|
||||||
{ "push0", REG_NONE, REG_AXY },
|
{ "push0", REG_NONE, REG_AXY },
|
||||||
|
{ "push0ax", REG_AX, REG_Y | REG_SREG },
|
||||||
{ "push1", REG_NONE, REG_AXY },
|
{ "push1", REG_NONE, REG_AXY },
|
||||||
{ "push2", REG_NONE, REG_AXY },
|
{ "push2", REG_NONE, REG_AXY },
|
||||||
{ "push3", REG_NONE, REG_AXY },
|
{ "push3", REG_NONE, REG_AXY },
|
||||||
@ -210,6 +211,7 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "steaxysp", REG_EAXY, REG_Y },
|
{ "steaxysp", REG_EAXY, REG_Y },
|
||||||
{ "subeq0sp", REG_AX, REG_AXY },
|
{ "subeq0sp", REG_AX, REG_AXY },
|
||||||
{ "subeqysp", REG_AXY, REG_AXY },
|
{ "subeqysp", REG_AXY, REG_AXY },
|
||||||
|
{ "tosadd0ax", REG_AX, REG_EAXY | REG_TMP1 },
|
||||||
{ "tosadda0", REG_A, REG_AXY },
|
{ "tosadda0", REG_A, REG_AXY },
|
||||||
{ "tosaddax", REG_AX, REG_AXY },
|
{ "tosaddax", REG_AX, REG_AXY },
|
||||||
{ "tosaddeax", REG_EAX, REG_EAXY | REG_TMP1 },
|
{ "tosaddeax", REG_EAX, REG_EAXY | REG_TMP1 },
|
||||||
@ -219,9 +221,10 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "tosasleax", REG_EAX, REG_EAXY | REG_TMP1 },
|
{ "tosasleax", REG_EAX, REG_EAXY | REG_TMP1 },
|
||||||
{ "tosasrax", REG_AX, REG_AXY | REG_TMP1 },
|
{ "tosasrax", REG_AX, REG_AXY | REG_TMP1 },
|
||||||
{ "tosasreax", REG_EAX, REG_EAXY | REG_TMP1 },
|
{ "tosasreax", REG_EAX, REG_EAXY | REG_TMP1 },
|
||||||
|
{ "tosdiv0ax", REG_AX, REG_ALL },
|
||||||
{ "tosdiva0", REG_AY, REG_ALL },
|
{ "tosdiva0", REG_AY, REG_ALL },
|
||||||
{ "tosdivax", REG_AXY, REG_ALL },
|
{ "tosdivax", REG_AXY, REG_ALL },
|
||||||
{ "tosdiveax", REG_EAXY, REG_ALL },
|
{ "tosdiveax", REG_EAX, REG_ALL },
|
||||||
{ "toseq00", REG_NONE, REG_AXY | REG_SREG },
|
{ "toseq00", REG_NONE, REG_AXY | REG_SREG },
|
||||||
{ "toseqa0", REG_A, REG_AXY | REG_SREG },
|
{ "toseqa0", REG_A, REG_AXY | REG_SREG },
|
||||||
{ "toseqax", REG_AX, REG_AXY | REG_SREG },
|
{ "toseqax", REG_AX, REG_AXY | REG_SREG },
|
||||||
@ -245,6 +248,9 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "toslta0", REG_A, REG_AXY | REG_SREG },
|
{ "toslta0", REG_A, REG_AXY | REG_SREG },
|
||||||
{ "tosltax", REG_AX, REG_AXY | REG_SREG },
|
{ "tosltax", REG_AX, REG_AXY | REG_SREG },
|
||||||
{ "toslteax", REG_EAX, REG_AXY | REG_PTR1 },
|
{ "toslteax", REG_EAX, REG_AXY | REG_PTR1 },
|
||||||
|
{ "tosmod0ax", REG_AX, REG_ALL },
|
||||||
|
{ "tosmodeax", REG_EAX, REG_ALL },
|
||||||
|
{ "tosmul0ax", REG_AX, REG_ALL },
|
||||||
{ "tosmula0", REG_AX, REG_ALL },
|
{ "tosmula0", REG_AX, REG_ALL },
|
||||||
{ "tosmulax", REG_AX, REG_ALL },
|
{ "tosmulax", REG_AX, REG_ALL },
|
||||||
{ "tosmuleax", REG_EAX, REG_ALL },
|
{ "tosmuleax", REG_EAX, REG_ALL },
|
||||||
@ -258,9 +264,11 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "tosshleax", REG_A, REG_EAXY | REG_TMP1 },
|
{ "tosshleax", REG_A, REG_EAXY | REG_TMP1 },
|
||||||
{ "tosshrax", REG_A, REG_AXY | REG_TMP1 },
|
{ "tosshrax", REG_A, REG_AXY | REG_TMP1 },
|
||||||
{ "tosshreax", REG_A, REG_EAXY | REG_TMP1 },
|
{ "tosshreax", REG_A, REG_EAXY | REG_TMP1 },
|
||||||
|
{ "tossub0ax", REG_AX, REG_EAXY },
|
||||||
{ "tossuba0", REG_A, REG_AXY },
|
{ "tossuba0", REG_A, REG_AXY },
|
||||||
{ "tossubax", REG_AX, REG_AXY },
|
{ "tossubax", REG_AX, REG_AXY },
|
||||||
{ "tossubeax", REG_EAX, REG_EAXY },
|
{ "tossubeax", REG_EAX, REG_EAXY },
|
||||||
|
{ "tosudiv0ax", REG_AX, REG_ALL & ~REG_SAVE },
|
||||||
{ "tosudiva0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
{ "tosudiva0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
||||||
{ "tosudivax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
{ "tosudivax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
||||||
{ "tosudiveax", REG_EAX, REG_ALL & ~REG_SAVE },
|
{ "tosudiveax", REG_EAX, REG_ALL & ~REG_SAVE },
|
||||||
@ -280,9 +288,11 @@ static const FuncInfo FuncInfoTable[] = {
|
|||||||
{ "tosulta0", REG_A, REG_AXY | REG_SREG },
|
{ "tosulta0", REG_A, REG_AXY | REG_SREG },
|
||||||
{ "tosultax", REG_AX, REG_AXY | REG_SREG },
|
{ "tosultax", REG_AX, REG_AXY | REG_SREG },
|
||||||
{ "tosulteax", REG_EAX, REG_AXY | REG_PTR1 },
|
{ "tosulteax", REG_EAX, REG_AXY | REG_PTR1 },
|
||||||
|
{ "tosumod0ax", REG_AX, REG_ALL & ~REG_SAVE },
|
||||||
{ "tosumoda0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
{ "tosumoda0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
||||||
{ "tosumodax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
{ "tosumodax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */
|
||||||
{ "tosumodeax", REG_EAX, REG_ALL & ~REG_SAVE },
|
{ "tosumodeax", REG_EAX, REG_ALL & ~REG_SAVE },
|
||||||
|
{ "tosumul0ax", REG_AX, REG_ALL },
|
||||||
{ "tosumula0", REG_AX, REG_ALL },
|
{ "tosumula0", REG_AX, REG_ALL },
|
||||||
{ "tosumulax", REG_AX, REG_ALL },
|
{ "tosumulax", REG_AX, REG_ALL },
|
||||||
{ "tosumuleax", REG_EAX, REG_ALL },
|
{ "tosumuleax", REG_EAX, REG_ALL },
|
||||||
|
@ -1554,6 +1554,7 @@ static unsigned RunOptGroup6 (CodeSeg* S)
|
|||||||
* may have opened new oportunities.
|
* may have opened new oportunities.
|
||||||
*/
|
*/
|
||||||
Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
|
Changes += RunOptFunc (S, &DOptUnusedLoads, 1);
|
||||||
|
Changes += RunOptFunc (S, &DOptUnusedStores, 1);
|
||||||
Changes += RunOptFunc (S, &DOptJumpTarget1, 5);
|
Changes += RunOptFunc (S, &DOptJumpTarget1, 5);
|
||||||
Changes += RunOptFunc (S, &DOptStore5, 1);
|
Changes += RunOptFunc (S, &DOptStore5, 1);
|
||||||
}
|
}
|
||||||
|
@ -899,6 +899,8 @@ unsigned OptUnusedStores (CodeSeg* S)
|
|||||||
/* Remember, we had changes */
|
/* Remember, we had changes */
|
||||||
++Changes;
|
++Changes;
|
||||||
|
|
||||||
|
/* Continue with next insn */
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
typedef struct CallDesc CallDesc;
|
typedef struct CallDesc CallDesc;
|
||||||
struct CallDesc {
|
struct CallDesc {
|
||||||
const char* LongFunc; /* Long function name */
|
const char* LongFunc; /* Long function name */
|
||||||
short A, X, Y; /* Register contents */
|
RegContents Regs; /* Register contents */
|
||||||
unsigned Flags; /* Flags from above */
|
unsigned Flags; /* Flags from above */
|
||||||
const char* ShortFunc; /* Short function name */
|
const char* ShortFunc; /* Short function name */
|
||||||
};
|
};
|
||||||
@ -68,85 +68,655 @@ struct CallDesc {
|
|||||||
* name, entries are sorted best match first, so when searching linear for
|
* name, entries are sorted best match first, so when searching linear for
|
||||||
* a match, the first one can be used because it is also the best one (or
|
* a match, the first one can be used because it is also the best one (or
|
||||||
* at least none of the following ones are better).
|
* at least none of the following ones are better).
|
||||||
|
* Note^2: Ptr1 and Tmp1 aren't evaluated, because runtime routines don't
|
||||||
|
* expect parameters here.
|
||||||
*/
|
*/
|
||||||
static const CallDesc CallTable [] = {
|
static const CallDesc CallTable [] = {
|
||||||
/* Name A register X register Y register flags replacement */
|
/* Name A register X register Y register flags replacement */
|
||||||
{ "addeqysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "addeq0sp" },
|
{
|
||||||
{ "laddeqysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "laddeq0sp" },
|
"addeqysp",
|
||||||
{ "ldaxidx", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, F_NONE, "ldaxi" },
|
{
|
||||||
{ "ldaxysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, F_NONE, "ldax0sp" },
|
/* A X Y SRegLo */
|
||||||
{ "ldeaxidx", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, F_NONE, "ldeaxi" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
{ "ldeaxysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, F_NONE, "ldeax0sp" },
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
{ "lsubeqysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "lsubeq0sp" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
{ "pusha", 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, F_SLOWER, "pushc0" },
|
},
|
||||||
{ "pusha", 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, F_SLOWER, "pushc1" },
|
F_NONE,
|
||||||
{ "pusha", 2, UNKNOWN_REGVAL, UNKNOWN_REGVAL, F_SLOWER, "pushc2" },
|
"addeq0sp"
|
||||||
{ "pushax", 0, 0, UNKNOWN_REGVAL, F_NONE, "push0" },
|
},{
|
||||||
{ "pushax", 1, 0, UNKNOWN_REGVAL, F_SLOWER, "push1" },
|
"laddeqysp",
|
||||||
{ "pushax", 2, 0, UNKNOWN_REGVAL, F_SLOWER, "push2" },
|
{
|
||||||
{ "pushax", 3, 0, UNKNOWN_REGVAL, F_SLOWER, "push3" },
|
/* A X Y SRegLo */
|
||||||
{ "pushax", 4, 0, UNKNOWN_REGVAL, F_SLOWER, "push4" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
{ "pushax", 5, 0, UNKNOWN_REGVAL, F_SLOWER, "push5" },
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
{ "pushax", 6, 0, UNKNOWN_REGVAL, F_SLOWER, "push6" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
{ "pushax", 7, 0, UNKNOWN_REGVAL, F_SLOWER, "push7" },
|
},
|
||||||
{ "pushax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "pusha0" },
|
F_NONE,
|
||||||
{ "pushax", UNKNOWN_REGVAL, 0xFF, UNKNOWN_REGVAL, F_SLOWER, "pushaFF" },
|
"laddeq0sp"
|
||||||
{ "pushaysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "pusha0sp" },
|
},{
|
||||||
{ "pushwidx", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, F_NONE, "pushw" },
|
"ldaxidx",
|
||||||
{ "pushwysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, F_NONE, "pushw0sp" },
|
{
|
||||||
{ "staxysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "stax0sp" },
|
/* A X Y SRegLo */
|
||||||
{ "steaxysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "steax0sp" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL,
|
||||||
{ "subeqysp", UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, F_NONE, "subeq0sp" },
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
{ "tosaddax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosadda0" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
{ "tosandax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosanda0" },
|
},
|
||||||
{ "tosdivax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosdiva0" },
|
F_NONE,
|
||||||
{ "toseqax", 0, 0, UNKNOWN_REGVAL, F_NONE, "toseq00" },
|
"ldaxi"
|
||||||
{ "toseqax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "toseqa0" },
|
},{
|
||||||
{ "tosgeax", 0, 0, UNKNOWN_REGVAL, F_NONE, "tosge00" },
|
"ldaxysp",
|
||||||
{ "tosgeax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosgea0" },
|
{
|
||||||
{ "tosgtax", 0, 0, UNKNOWN_REGVAL, F_NONE, "tosgt00" },
|
/* A X Y SRegLo */
|
||||||
{ "tosgtax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosgta0" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL,
|
||||||
{ "tosicmp", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosicmp0" },
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
{ "tosleax", 0, 0, UNKNOWN_REGVAL, F_NONE, "tosle00" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
{ "tosleax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "toslea0" },
|
},
|
||||||
{ "tosltax", 0, 0, UNKNOWN_REGVAL, F_NONE, "toslt00" },
|
F_NONE,
|
||||||
{ "tosltax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "toslta0" },
|
"ldax0sp"
|
||||||
{ "tosmodax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosmoda0" },
|
},{
|
||||||
{ "tosmulax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosmula0" },
|
"ldeaxidx",
|
||||||
{ "tosneax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosnea0" },
|
{
|
||||||
{ "tosorax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosora0" },
|
/* A X Y SRegLo */
|
||||||
{ "tosrsubax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosrsuba0" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL,
|
||||||
{ "tossubax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tossuba0" },
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
{ "tosudivax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosudiva0" },
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
{ "tosugeax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosugea0" },
|
},
|
||||||
{ "tosugtax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosugta0" },
|
F_NONE,
|
||||||
{ "tosuleax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosulea0" },
|
"ldeaxi"
|
||||||
{ "tosultax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosulta0" },
|
},{
|
||||||
{ "tosumodax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosumoda0" },
|
"ldeaxysp",
|
||||||
{ "tosumulax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosumula0" },
|
{
|
||||||
{ "tosxorax", UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, F_NONE, "tosxora0" },
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"ldeax0sp"
|
||||||
|
},{
|
||||||
|
"lsubeqysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"lsubeq0sp"
|
||||||
|
},{
|
||||||
|
"pusha",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"pushc0"
|
||||||
|
},{
|
||||||
|
"pusha",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"pushc1"
|
||||||
|
},{
|
||||||
|
"pusha",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
2, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"pushc2"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"push0"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
1, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push1"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
2, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push2"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
3, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push3"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
4, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push4"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
5, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push5"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
6, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push6"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
7, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"push7"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"pusha0"
|
||||||
|
},{
|
||||||
|
"pushax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0xFF, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_SLOWER,
|
||||||
|
"pushaFF"
|
||||||
|
},{
|
||||||
|
"pushaysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"pusha0sp"
|
||||||
|
},{
|
||||||
|
"pusheax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"push0ax"
|
||||||
|
},{
|
||||||
|
"pushwidx",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"pushw"
|
||||||
|
},{
|
||||||
|
"pushwysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"pushw0sp"
|
||||||
|
},{
|
||||||
|
"staxysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"stax0sp"
|
||||||
|
},{
|
||||||
|
"steaxysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"steax0sp"
|
||||||
|
},{
|
||||||
|
"subeqysp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"subeq0sp"
|
||||||
|
},{
|
||||||
|
"tosaddax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosadda0"
|
||||||
|
},{
|
||||||
|
"tosaddeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosadd0ax"
|
||||||
|
},{
|
||||||
|
"tosandax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosanda0"
|
||||||
|
},{
|
||||||
|
"tosdivax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosdiva0"
|
||||||
|
},{
|
||||||
|
"tosdiveax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosdiv0ax"
|
||||||
|
},{
|
||||||
|
"toseqax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"toseq00"
|
||||||
|
},{
|
||||||
|
"toseqax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"toseqa0"
|
||||||
|
},{
|
||||||
|
"tosgeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosge00"
|
||||||
|
},{
|
||||||
|
"tosgeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosgea0"
|
||||||
|
},{
|
||||||
|
"tosgtax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosgt00"
|
||||||
|
},{
|
||||||
|
"tosgtax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosgta0"
|
||||||
|
},{
|
||||||
|
"tosicmp",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosicmp0"
|
||||||
|
},{
|
||||||
|
"tosleax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosle00"
|
||||||
|
},{
|
||||||
|
"tosleax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"toslea0"
|
||||||
|
},{
|
||||||
|
"tosltax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"toslt00"
|
||||||
|
},{
|
||||||
|
"tosltax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"toslta0"
|
||||||
|
},{
|
||||||
|
"tosmodax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosmoda0"
|
||||||
|
},{
|
||||||
|
"tosmodeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosmod0ax"
|
||||||
|
},{
|
||||||
|
"tosmulax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosmula0"
|
||||||
|
},{
|
||||||
|
"tosmuleax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosmul0ax"
|
||||||
|
},{
|
||||||
|
"tosneax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosnea0"
|
||||||
|
},{
|
||||||
|
"tosorax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosora0"
|
||||||
|
},{
|
||||||
|
"tosrsubax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosrsuba0"
|
||||||
|
},{
|
||||||
|
"tossubax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tossuba0"
|
||||||
|
},{
|
||||||
|
"tossubeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tossub0ax"
|
||||||
|
},{
|
||||||
|
"tosudivax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosudiva0"
|
||||||
|
},{
|
||||||
|
"tosudiveax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosudiv0ax"
|
||||||
|
},{
|
||||||
|
"tosugeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosugea0"
|
||||||
|
},{
|
||||||
|
"tosugtax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosugta0"
|
||||||
|
},{
|
||||||
|
"tosuleax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosulea0"
|
||||||
|
},{
|
||||||
|
"tosultax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosulta0"
|
||||||
|
},{
|
||||||
|
"tosumodax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosumoda0"
|
||||||
|
},{
|
||||||
|
"tosumodeax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosumod0ax"
|
||||||
|
},{
|
||||||
|
"tosumulax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosumula0"
|
||||||
|
},{
|
||||||
|
"tosumuleax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosumul0ax"
|
||||||
|
},{
|
||||||
|
"tosxorax",
|
||||||
|
{
|
||||||
|
/* A X Y SRegLo */
|
||||||
|
UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL,
|
||||||
|
/* SRegHi Ptr1Lo Ptr1Hi Tmp1 */
|
||||||
|
UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL
|
||||||
|
},
|
||||||
|
F_NONE,
|
||||||
|
"tosxora0"
|
||||||
|
},
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
"tosadd0ax", /* tosaddeax, sreg = 0 */
|
|
||||||
"laddeqa", /* laddeq, sreg = 0, x = 0 */
|
"laddeqa", /* laddeq, sreg = 0, x = 0 */
|
||||||
"laddeq1", /* laddeq, sreg = 0, x = 0, a = 1 */
|
"laddeq1", /* laddeq, sreg = 0, x = 0, a = 1 */
|
||||||
"tosand0ax", /* tosandeax, sreg = 0 */
|
"tosand0ax", /* tosandeax, sreg = 0 */
|
||||||
"tosdiv0ax", /* tosdiveax, sreg = 0 */
|
|
||||||
"tosmod0ax", /* tosmodeax, sreg = 0 */
|
|
||||||
"tosmul0ax", /* tosmuleax, sreg = 0 */
|
|
||||||
"tosumul0ax", /* tosumuleax, sreg = 0 */
|
|
||||||
"tosor0ax", /* tosoreax, sreg = 0 */
|
"tosor0ax", /* tosoreax, sreg = 0 */
|
||||||
"push0ax", /* pusheax, sreg = 0 */
|
|
||||||
"tosrsub0ax", /* tosrsubeax, sreg = 0 */
|
"tosrsub0ax", /* tosrsubeax, sreg = 0 */
|
||||||
"tosshl0ax", /* tosshleax, sreg = 0 */
|
"tosshl0ax", /* tosshleax, sreg = 0 */
|
||||||
"tosasl0ax", /* tosasleax, sreg = 0 */
|
"tosasl0ax", /* tosasleax, sreg = 0 */
|
||||||
"tosshr0ax", /* tosshreax, sreg = 0 */
|
"tosshr0ax", /* tosshreax, sreg = 0 */
|
||||||
"tosasr0ax", /* tosasreax, sreg = 0 */
|
"tosasr0ax", /* tosasreax, sreg = 0 */
|
||||||
"tossub0ax", /* tossubeax, sreg = 0 */
|
|
||||||
"lsubeqa", /* lsubeq, sreg = 0, x = 0 */
|
"lsubeqa", /* lsubeq, sreg = 0, x = 0 */
|
||||||
"lsubeq1", /* lsubeq, sreg = 0, x = 0, a = 1 */
|
"lsubeq1", /* lsubeq, sreg = 0, x = 0, a = 1 */
|
||||||
"tosudiv0ax", /* tosudiveax, sreg = 0 */
|
|
||||||
"tosumod0ax", /* tosumodeax, sreg = 0 */
|
|
||||||
"tosxor0ax", /* tosxoreax, sreg = 0 */
|
"tosxor0ax", /* tosxoreax, sreg = 0 */
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -196,6 +766,16 @@ static const CallDesc* FindCall (const char* Name)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int RegMatch (short Expected, short Actual)
|
||||||
|
/* Check for a register match. If Expected has a value, it must be identical
|
||||||
|
* to Actual.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
return RegValIsUnknown (Expected) || (Expected == Actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Code */
|
/* Code */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -230,6 +810,9 @@ unsigned OptSize1 (CodeSeg* S)
|
|||||||
/* Check if it's a subroutine call */
|
/* Check if it's a subroutine call */
|
||||||
if (E->OPC == OP65_JSR && (D = FindCall (E->Arg)) != 0) {
|
if (E->OPC == OP65_JSR && (D = FindCall (E->Arg)) != 0) {
|
||||||
|
|
||||||
|
/* Get input register info for this insn */
|
||||||
|
const RegContents* In = &E->RI->In;
|
||||||
|
|
||||||
/* FindCall finds the first entry that matches our function name.
|
/* FindCall finds the first entry that matches our function name.
|
||||||
* The names are listed in "best match" order, so search for the
|
* The names are listed in "best match" order, so search for the
|
||||||
* first one, that fulfills our conditions.
|
* first one, that fulfills our conditions.
|
||||||
@ -239,10 +822,12 @@ unsigned OptSize1 (CodeSeg* S)
|
|||||||
/* Check the registers and allow slower code only if
|
/* Check the registers and allow slower code only if
|
||||||
* optimizing for size.
|
* optimizing for size.
|
||||||
*/
|
*/
|
||||||
if ((D->A < 0 || D->A == E->RI->In.RegA) &&
|
if ((OptForSize || (D->Flags & F_SLOWER) == 0) &&
|
||||||
(D->X < 0 || D->X == E->RI->In.RegX) &&
|
RegMatch (D->Regs.RegA, In->RegA) &&
|
||||||
(D->Y < 0 || D->Y == E->RI->In.RegY) &&
|
RegMatch (D->Regs.RegX, In->RegX) &&
|
||||||
(OptForSize || (D->Flags & F_SLOWER) == 0)) {
|
RegMatch (D->Regs.RegY, In->RegY) &&
|
||||||
|
RegMatch (D->Regs.SRegLo, In->SRegLo) &&
|
||||||
|
RegMatch (D->Regs.SRegHi, In->SRegHi)) {
|
||||||
|
|
||||||
/* Ok, match for all conditions */
|
/* Ok, match for all conditions */
|
||||||
CodeEntry* X;
|
CodeEntry* X;
|
||||||
|
Loading…
Reference in New Issue
Block a user