Applied the remaining mainline PCem commits.
This commit is contained in:
@@ -1066,16 +1066,14 @@ static void MEM_LOAD_ADDR_EA_W(x86seg *seg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 1[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x01);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xfff*/
|
||||
addbyte(0xf7); /*TEST EDI, 1*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xfff);
|
||||
addlong(1);
|
||||
if (IS_32_ADDR(readlookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, readlookup2[ESI*8]*/
|
||||
@@ -1095,18 +1093,17 @@ static void MEM_LOAD_ADDR_EA_W(x86seg *seg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+5+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(5+2);
|
||||
addbyte(0x66); /*MOV AX,-1[RDI+RSI]*/
|
||||
addbyte(4+2);
|
||||
addbyte(0x66); /*MOV AX,[RDI+RSI]*/
|
||||
addbyte(0x8b);
|
||||
addbyte(0x44);
|
||||
addbyte(0x04);
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+12+4+6);
|
||||
/*slowpath:*/
|
||||
@@ -1155,16 +1152,14 @@ static void MEM_LOAD_ADDR_EA_L(x86seg *seg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 3[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x03);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xffc*/
|
||||
addbyte(0xf7); /*TEST EDI, 3*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xffc);
|
||||
addlong(3);
|
||||
if (IS_32_ADDR(readlookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, readlookup2[ESI*8]*/
|
||||
@@ -1184,17 +1179,16 @@ static void MEM_LOAD_ADDR_EA_L(x86seg *seg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+3+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(4+2);
|
||||
addbyte(0x8b); /*MOV EAX,-3[RDI+RSI]*/
|
||||
addbyte(0x44);
|
||||
addbyte(3+2);
|
||||
addbyte(0x8b); /*MOV EAX,[RDI+RSI]*/
|
||||
addbyte(0x04);
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+12+4+6);
|
||||
/*slowpath:*/
|
||||
@@ -1236,16 +1230,14 @@ static void MEM_LOAD_ADDR_EA_Q(x86seg *seg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 7[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x07);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xff8*/
|
||||
addbyte(0xf7); /*TEST EDI, 7*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xff8);
|
||||
addlong(7);
|
||||
if (IS_32_ADDR(readlookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, readlookup2[ESI*8]*/
|
||||
@@ -1265,18 +1257,17 @@ static void MEM_LOAD_ADDR_EA_Q(x86seg *seg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+5+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(5+2);
|
||||
addbyte(0x48); /*MOV RAX,-7[RDI+RSI]*/
|
||||
addbyte(4+2);
|
||||
addbyte(0x48); /*MOV RAX,[RDI+RSI]*/
|
||||
addbyte(0x8b);
|
||||
addbyte(0x44);
|
||||
addbyte(0x04);
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-7);
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+12+4+6);
|
||||
/*slowpath:*/
|
||||
@@ -1444,16 +1435,14 @@ static void MEM_STORE_ADDR_EA_W(x86seg *seg, int host_reg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 1[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x01);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xfff*/
|
||||
addbyte(0xf7); /*TEST EDI, 1*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xfff);
|
||||
addlong(1);
|
||||
if (IS_32_ADDR(writelookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, writelookup2[ESI*8]*/
|
||||
@@ -1473,29 +1462,27 @@ static void MEM_STORE_ADDR_EA_W(x86seg *seg, int host_reg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 6:5)+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(((host_reg & 8) ? 6:5)+2);
|
||||
addbyte(((host_reg & 8) ? 5:4)+2);
|
||||
if (host_reg & 8)
|
||||
{
|
||||
addbyte(0x66); /*MOV -1[RDI+RSI],host_reg*/
|
||||
addbyte(0x66); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x44);
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | ((host_reg & 7) << 3));
|
||||
addbyte(0x04 | ((host_reg & 7) << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbyte(0x66); /*MOV -1[RDI+RSI],host_reg*/
|
||||
addbyte(0x66); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | (host_reg << 3));
|
||||
addbyte(0x04 | (host_reg << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
}
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+3+12+4+6);
|
||||
@@ -1539,16 +1526,14 @@ static void MEM_STORE_ADDR_EA_L(x86seg *seg, int host_reg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 3[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x03);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xffc*/
|
||||
addbyte(0xf7); /*TEST EDI, 3*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xffc);
|
||||
addlong(3);
|
||||
if (IS_32_ADDR(writelookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, writelookup2[ESI*8]*/
|
||||
@@ -1568,27 +1553,25 @@ static void MEM_STORE_ADDR_EA_L(x86seg *seg, int host_reg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 4:3)+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(((host_reg & 8) ? 4:3)+2);
|
||||
if (host_reg & 8)
|
||||
{
|
||||
addbyte(0x44); /*MOV -3[RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | ((host_reg & 7) << 3));
|
||||
addbyte(0x04 | ((host_reg & 7) << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbyte(0x89); /*MOV -3[RDI+RSI],host_reg*/
|
||||
addbyte(0x44 | (host_reg << 3));
|
||||
addbyte(0x04 | (host_reg << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
}
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+3+12+4+6);
|
||||
@@ -1632,16 +1615,14 @@ static void MEM_STORE_ADDR_EA_Q(x86seg *seg, int host_reg, int host_reg2)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 7[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x07);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xff8*/
|
||||
addbyte(0xf7); /*TEST EDI, 7*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xff8);
|
||||
addlong(7);
|
||||
if (IS_32_ADDR(writelookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, writelookup2[ESI*8]*/
|
||||
@@ -1661,28 +1642,26 @@ static void MEM_STORE_ADDR_EA_Q(x86seg *seg, int host_reg, int host_reg2)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+5+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(5+2);
|
||||
addbyte(4+2);
|
||||
if (host_reg & 8)
|
||||
{
|
||||
addbyte(0x4c); /*MOV -7[RDI+RSI],host_reg*/
|
||||
addbyte(0x4c); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | ((host_reg & 7) << 3));
|
||||
addbyte(0x04 | ((host_reg & 7) << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-7);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbyte(0x48); /*MOV -3[RDI+RSI],host_reg*/
|
||||
addbyte(0x48); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | (host_reg << 3));
|
||||
addbyte(0x04 | (host_reg << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-7);
|
||||
}
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+3+12+4+6);
|
||||
@@ -5818,16 +5797,14 @@ static int MEM_LOAD_ADDR_EA_W_NO_ABRT(x86seg *seg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 1[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x01);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xfff*/
|
||||
addbyte(0xf7); /*TEST EDI, 1*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xfff);
|
||||
addlong(1);
|
||||
if (IS_32_ADDR(readlookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, readlookup2[ESI*8]*/
|
||||
@@ -5847,18 +5824,17 @@ static int MEM_LOAD_ADDR_EA_W_NO_ABRT(x86seg *seg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+5+2);
|
||||
addbyte(0x75); /*JE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(5+2);
|
||||
addbyte(0x66); /*MOV AX,-1[RDI+RSI]*/
|
||||
addbyte(4+2);
|
||||
addbyte(0x66); /*MOV AX,[RDI+RSI]*/
|
||||
addbyte(0x8b);
|
||||
addbyte(0x44);
|
||||
addbyte(0x04);
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+12);
|
||||
/*slowpath:*/
|
||||
@@ -5899,16 +5875,14 @@ static int MEM_LOAD_ADDR_EA_L_NO_ABRT(x86seg *seg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x08);
|
||||
addbyte(0x67); /*LEA EDI, 3[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x03);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xffc*/
|
||||
addbyte(0xf7); /*TEST EDI, 3*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xffc);
|
||||
addlong(3);
|
||||
if (IS_32_ADDR(readlookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, readlookup2[ESI*8]*/
|
||||
@@ -5928,17 +5902,16 @@ static int MEM_LOAD_ADDR_EA_L_NO_ABRT(x86seg *seg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+4+2);
|
||||
addbyte(0x54); /*JNE slowpath*/
|
||||
addbyte(3+2+3+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(4+2);
|
||||
addbyte(3+2);
|
||||
addbyte(0x8b); /*MOV EAX,-3[RDI+RSI]*/
|
||||
addbyte(0x44);
|
||||
addbyte(0x04);
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+12);
|
||||
/*slowpath:*/
|
||||
@@ -6081,16 +6054,14 @@ static void MEM_STORE_ADDR_EA_W_NO_ABRT(x86seg *seg, int host_reg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x18);
|
||||
addbyte(0x67); /*LEA EDI, 1[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x01);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xfff*/
|
||||
addbyte(0xf7); /*TEST EDI, 1*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xfff);
|
||||
addlong(1);
|
||||
if (IS_32_ADDR(writelookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, writelookup2[ESI*8]*/
|
||||
@@ -6110,29 +6081,27 @@ static void MEM_STORE_ADDR_EA_W_NO_ABRT(x86seg *seg, int host_reg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 6:5)+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(((host_reg & 8) ? 6:5)+2);
|
||||
addbyte(((host_reg & 8) ? 5:4)+2);
|
||||
if (host_reg & 8)
|
||||
{
|
||||
addbyte(0x66); /*MOV -1[RDI+RSI],host_reg*/
|
||||
addbyte(0x66); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x44);
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | ((host_reg & 7) << 3));
|
||||
addbyte(0x04 | ((host_reg & 7) << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbyte(0x66); /*MOV -1[RDI+RSI],host_reg*/
|
||||
addbyte(0x66); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | (host_reg << 3));
|
||||
addbyte(0x04 | (host_reg << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-1);
|
||||
}
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+3+12);
|
||||
@@ -6170,16 +6139,14 @@ static void MEM_STORE_ADDR_EA_L_NO_ABRT(x86seg *seg, int host_reg)
|
||||
addbyte(0x8d);
|
||||
addbyte(0x34);
|
||||
addbyte(0x18);
|
||||
addbyte(0x67); /*LEA EDI, 3[ESI]*/
|
||||
addbyte(0x8d);
|
||||
addbyte(0x7e);
|
||||
addbyte(0x03);
|
||||
addbyte(0x89); /*MOV EDI, ESI*/
|
||||
addbyte(0xf7);
|
||||
addbyte(0xc1); /*SHR ESI, 12*/
|
||||
addbyte(0xe8 | REG_ESI);
|
||||
addbyte(12);
|
||||
addbyte(0xf7); /*TEST EDI, 0xffc*/
|
||||
addbyte(0xf7); /*TEST EDI, 3*/
|
||||
addbyte(0xc7);
|
||||
addlong(0xffc);
|
||||
addlong(3);
|
||||
if (IS_32_ADDR(writelookup2))
|
||||
{
|
||||
addbyte(0x67); /*MOV RSI, writelookup2[ESI*8]*/
|
||||
@@ -6199,27 +6166,25 @@ static void MEM_STORE_ADDR_EA_L_NO_ABRT(x86seg *seg, int host_reg)
|
||||
addbyte(0x34);
|
||||
addbyte(0xf2);
|
||||
}
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(0x75); /*JNE slowpath*/
|
||||
addbyte(3+2+((host_reg & 8) ? 4:3)+2);
|
||||
addbyte(0x83); /*CMP ESI, -1*/
|
||||
addbyte(0xf8 | REG_ESI);
|
||||
addbyte(-1);
|
||||
addbyte(0x74); /*JE slowpath*/
|
||||
addbyte(((host_reg & 8) ? 5:4)+2);
|
||||
addbyte(((host_reg & 8) ? 4:3)+2);
|
||||
if (host_reg & 8)
|
||||
{
|
||||
addbyte(0x44); /*MOV -3[RDI+RSI],host_reg*/
|
||||
addbyte(0x44); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x89);
|
||||
addbyte(0x44 | ((host_reg & 7) << 3));
|
||||
addbyte(0x04 | ((host_reg & 7) << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
}
|
||||
else
|
||||
{
|
||||
addbyte(0x89); /*MOV -3[RDI+RSI],host_reg*/
|
||||
addbyte(0x44 | (host_reg << 3));
|
||||
addbyte(0x89); /*MOV [RDI+RSI],host_reg*/
|
||||
addbyte(0x04 | (host_reg << 3));
|
||||
addbyte(REG_EDI | (REG_ESI << 3));
|
||||
addbyte(-3);
|
||||
}
|
||||
addbyte(0xeb); /*JMP done*/
|
||||
addbyte(2+2+3+12);
|
||||
|
||||
Reference in New Issue
Block a user