OM -> OCM

This commit is contained in:
v0x3l 2020-03-01 15:11:22 -06:00
parent 831e12ad75
commit 472bc164d8
4 changed files with 58 additions and 50 deletions

View File

@ -228,33 +228,33 @@ I64 AsmMakeArgMask(CCompCtrl *cc, CAsmArg *arg)
arg->imm_or_off_present = FALSE; //Zero displacement
if (arg->reg2 != REG_NONE || arg->scale != 1)
{
res &= 0x0000FF0000;
{//if reg or scale
res &= ARGG_M|ARGG_RM; //0x0000FF0000;
goto mm_done;
}
if (arg->indirect)
{
if (arg->imm_or_off_present)
res &= 0x00FFFF0000;
res &= ARGG_RM|ARGG_M|ARGG_MN|ARGG_MOFFS;//0x00FFFF0000;
else
res &= 0x000FFF0000;
res &= ARGG_RM|ARGG_M|ARGG_MN;//0x000FFF0000;
}
else
{
if (arg->imm_or_off_present)
res &= 0x000F000FFE;
res &= ARGG_MN|ARGG_IMM|ARGG_UIMM|ARGG_REL; //0x000F000FFE;
else
res &= 0x3F0FFFF000;
res &= ARGG_R|ARGG_RM|ARGG_M|ARGG_MN|ARGT_AL|ARGT_AX|ARGT_EAX|ARGT_RAX|ARGT_CL|ARGT_DX;//0x3F0FFFF000;
}
if (arg->seg != REG_NONE)
res&=0x00FFFF0000;
res &= ARGG_RM|ARGG_M|ARGG_MN|ARGG_MOFFS;//0x00FFFF0000;
if (arg->reg1 == REG_NONE)
{
if (arg->indirect)
res &= 0x00FFFF0000;
res &= ARGG_RM|ARGG_M|ARGG_MN|ARGG_MOFFS; //0x00FFFF0000;
else if (arg->num.i < 0)
{
if (arg->num.i >= I8_MIN)
@ -477,17 +477,17 @@ Bool ParseAsmInst(CCompCtrl *cc,CHashOpcode *tmpo,I64 argcount)
aotc->seg_size!=16 && tmpins->flags & IEF_OP_SIZE16)
cur.has_operand_prefix=TRUE;
if (om==OM_IB) cur.imm.U8_count=1;
else if (om==OM_IW) cur.imm.U8_count=2;
else if (om==OM_ID) cur.imm.U8_count=4;
if (om==OCM_IB) cur.imm.U8_count=1;
else if (om==OCM_IW) cur.imm.U8_count=2;
else if (om==OCM_ID) cur.imm.U8_count=4;
if (om==OM_CB) {
if (om==OCM_CB) {
cur.imm.U8_count=1;
cur.imm.imm_flag=FALSE;
} else if (om==OM_CW) {
} else if (om==OCM_CW) {
cur.imm.U8_count=2;
cur.imm.imm_flag=FALSE;
} else if (om==OM_CD) {
} else if (om==OCM_CD) {
cur.imm.U8_count=4;
cur.imm.imm_flag=FALSE;
}

Binary file not shown.

View File

@ -2000,14 +2000,14 @@ class CAsmUnresolvedRef
};
//Opcode Modifier
#define OM_NO 0
#define OM_CB 1
#define OM_CW 2
#define OM_CD 3
#define OM_CP 4
#define OM_IB 5
#define OM_IW 6
#define OM_ID 7
#define OCM_NO 0
#define OCM_CB 1
#define OCM_CW 2
#define OCM_CD 3
#define OCM_CP 4
#define OCM_IB 5
#define OCM_IW 6
#define OCM_ID 7
#define ARGt_NONE 0
#define ARGt_REL8 1
@ -2017,6 +2017,7 @@ class CAsmUnresolvedRef
#define ARGT_REL8 (1<<ARGt_REL8)
#define ARGT_REL16 (1<<ARGt_REL16)
#define ARGT_REL32 (1<<ARGt_REL32)
#define ARGG_REL (ARGT_REL8|ARGT_REL16|ARGT_REL32)
#define ARGt_IMM8 4
#define ARGt_IMM16 5
@ -2026,6 +2027,7 @@ class CAsmUnresolvedRef
#define ARGT_IMM16 (1<<ARGt_IMM16)
#define ARGT_IMM32 (1<<ARGt_IMM32)
#define ARGT_IMM64 (1<<ARGt_IMM64)
#define ARGG_IMM (ARGT_IMM8|ARGT_IMM16|ARGT_IMM32|ARGT_IMM64)
#define ARGt_UIMM8 8
#define ARGt_UIMM16 9
@ -2035,6 +2037,7 @@ class CAsmUnresolvedRef
#define ARGT_UIMM16 (1<<ARGt_UIMM16)
#define ARGT_UIMM32 (1<<ARGt_UIMM32)
#define ARGT_UIMM64 (1<<ARGt_UIMM64)
#define ARGG_UIMM (ARGT_UIMM8|ARGT_UIMM16|ARGT_UIMM32|ARGT_UIMM64)
#define ARGt_R8 12
#define ARGt_R16 13
@ -2044,6 +2047,7 @@ class CAsmUnresolvedRef
#define ARGT_R16 (1<<ARGt_R16)
#define ARGT_R32 (1<<ARGt_R32)
#define ARGT_R64 (1<<ARGt_R64)
$ER$#define ARGG_R (ARGT_R8|ARGT_R16|ARGT_R32|ARGT_R64)
#define ARGt_RM8 16
#define ARGt_RM16 17
@ -2053,6 +2057,7 @@ class CAsmUnresolvedRef
#define ARGT_RM16 (1<<ARGt_RM16)
#define ARGT_RM32 (1<<ARGt_RM32)
#define ARGT_RM64 (1<<ARGt_RM64)
#define ARGG_RM (ARGT_RM8|ARGT_RM16|ARGT_RM32|ARGT_RM64)
#define ARGt_M8 20
#define ARGt_M16 21
@ -2062,6 +2067,7 @@ class CAsmUnresolvedRef
#define ARGT_M16 (1<<ARGt_M16)
#define ARGT_M32 (1<<ARGt_M32)
#define ARGT_M64 (1<<ARGt_M64)
#define ARGG_M (ARGT_M8|ARGT_M16|ARGT_M32|ARGT_M64)
#define ARGt_M1632 24 // Not implemented
#define ARGt_M16N32 25 // Not implemented
@ -2071,6 +2077,7 @@ class CAsmUnresolvedRef
#define ARGT_M16N32 (1<<ARGt_M16N32)
#define ARGT_M16N16 (1<<ARGt_M16N16)
#define ARGT_M32N32 (1<<ARGt_M32N32)
#define ARGG_MN (ARGT_M1632|ARGT_M16N32|ARGT_M16N16|ARGT_M32N32)
#define ARGt_MOFFS8 28
#define ARGt_MOFFS16 29
@ -2109,6 +2116,7 @@ class CAsmUnresolvedRef
#define ARGT_FS (1<<ARGt_FS)
#define ARGT_GS (1<<ARGt_GS)
#define ARGT_CS (1<<ARGt_CS)
#define ARGG_SREG (ARGT_SREG|ARGT_SS|ARGT_DS|ARGT_ES|ARGT_FS|ARGT_GS|ARGT_CS)
#define ARGt_ST0 46
#define ARGt_STI 47