Fixed the 64-bit old recompiler.
This commit is contained in:
@@ -1423,7 +1423,11 @@ static inline void MEM_STORE_ADDR_EA_B(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12+4+6);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12+4+6);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12+4+6);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD ECX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc1);
|
||||||
@@ -1515,7 +1519,11 @@ static inline void MEM_STORE_ADDR_EA_W(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12+4+6);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12+4+6);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12+4+6);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD ECX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc1);
|
||||||
@@ -1605,7 +1613,11 @@ static inline void MEM_STORE_ADDR_EA_L(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12+4+6);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12+4+6);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12+4+6);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD ECX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc1);
|
||||||
@@ -6059,12 +6071,16 @@ static inline void MEM_STORE_ADDR_EA_B_NO_ABRT(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
load_param_2_reg_32(host_reg);
|
load_param_2_reg_32(host_reg);
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD EBX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc3);
|
||||||
load_param_1_reg_32(REG_ECX);
|
load_param_1_reg_32(REG_EBX);
|
||||||
call_long((uintptr_t)writemembl);
|
call_long((uintptr_t)writemembl);
|
||||||
/*done:*/
|
/*done:*/
|
||||||
}
|
}
|
||||||
@@ -6144,12 +6160,16 @@ static inline void MEM_STORE_ADDR_EA_W_NO_ABRT(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
load_param_2_reg_32(host_reg);
|
load_param_2_reg_32(host_reg);
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD EBX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc3);
|
||||||
load_param_1_reg_32(REG_ECX);
|
load_param_1_reg_32(REG_EBX);
|
||||||
call_long((uintptr_t)writememwl);
|
call_long((uintptr_t)writememwl);
|
||||||
/*done:*/
|
/*done:*/
|
||||||
}
|
}
|
||||||
@@ -6227,12 +6247,16 @@ static inline void MEM_STORE_ADDR_EA_L_NO_ABRT(x86seg *seg, int host_reg)
|
|||||||
addbyte(REG_EDI | (REG_ESI << 3));
|
addbyte(REG_EDI | (REG_ESI << 3));
|
||||||
}
|
}
|
||||||
addbyte(0xeb); /*JMP done*/
|
addbyte(0xeb); /*JMP done*/
|
||||||
addbyte(2+2+3+12);
|
if (host_reg & 8) {
|
||||||
|
addbyte(2+2+3+12);
|
||||||
|
} else {
|
||||||
|
addbyte(2+2+2+12);
|
||||||
|
}
|
||||||
/*slowpath:*/
|
/*slowpath:*/
|
||||||
load_param_2_reg_32(host_reg);
|
load_param_2_reg_32(host_reg);
|
||||||
addbyte(0x01); /*ADD ECX,EAX*/
|
addbyte(0x01); /*ADD EBX,EAX*/
|
||||||
addbyte(0xc1);
|
addbyte(0xc3);
|
||||||
load_param_1_reg_32(REG_ECX);
|
load_param_1_reg_32(REG_EBX);
|
||||||
call_long((uintptr_t)writememll);
|
call_long((uintptr_t)writememll);
|
||||||
/*done:*/
|
/*done:*/
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user