|
From: <sv...@va...> - 2012-04-13 23:03:52
|
sewardj 2012-04-14 00:03:45 +0100 (Sat, 14 Apr 2012)
New Revision: 2283
Log:
Deal with CLFLUSH, which were not correctly dealt with (w.r.t. new IR
generation conventions) and caused bb_to_IR.c to assert.
Modified files:
branches/TCHAIN/priv/guest_amd64_toIR.c
branches/TCHAIN/priv/guest_x86_toIR.c
branches/TCHAIN/priv/host_amd64_isel.c
branches/TCHAIN/priv/host_x86_isel.c
Modified: branches/TCHAIN/priv/host_amd64_isel.c (+1 -1)
===================================================================
--- branches/TCHAIN/priv/host_amd64_isel.c 2012-04-13 22:46:57 +01:00 (rev 2282)
+++ branches/TCHAIN/priv/host_amd64_isel.c 2012-04-14 00:03:45 -23:00 (rev 2283)
@@ -4263,7 +4263,7 @@
/* Case: some other kind of transfer to any address */
switch (jk) {
case Ijk_Sys_syscall: case Ijk_ClientReq: case Ijk_NoRedir:
- case Ijk_Yield: case Ijk_SigTRAP: {
+ case Ijk_Yield: case Ijk_SigTRAP: case Ijk_TInval: {
HReg r = iselIntExpr_R(env, next);
AMD64AMode* amRIP = AMD64AMode_IR(offsIP, hregAMD64_RBP());
addInstr(env, AMD64Instr_XAssisted(r, amRIP, Acc_ALWAYS, jk));
Modified: branches/TCHAIN/priv/host_x86_isel.c (+1 -1)
===================================================================
--- branches/TCHAIN/priv/host_x86_isel.c 2012-04-13 22:46:57 +01:00 (rev 2282)
+++ branches/TCHAIN/priv/host_x86_isel.c 2012-04-14 00:03:45 -23:00 (rev 2283)
@@ -4171,7 +4171,7 @@
/* Case: some other kind of transfer to any address */
switch (jk) {
case Ijk_Sys_int128: case Ijk_ClientReq: case Ijk_NoRedir:
- case Ijk_Yield: case Ijk_SigTRAP: {
+ case Ijk_Yield: case Ijk_SigTRAP: case Ijk_TInval: {
HReg r = iselIntExpr_R(env, next);
X86AMode* amEIP = X86AMode_IR(offsIP, hregX86_EBP());
addInstr(env, X86Instr_XAssisted(r, amEIP, Xcc_ALWAYS, jk));
Modified: branches/TCHAIN/priv/guest_x86_toIR.c (+1 -3)
===================================================================
--- branches/TCHAIN/priv/guest_x86_toIR.c 2012-04-13 22:46:57 +01:00 (rev 2282)
+++ branches/TCHAIN/priv/guest_x86_toIR.c 2012-04-14 00:03:45 -23:00 (rev 2283)
@@ -11549,9 +11549,7 @@
stmt( IRStmt_Put(OFFB_TILEN, mkU32(lineszB) ) );
- irsb->jumpkind = Ijk_TInval;
- irsb->next = mkU32(guest_EIP_bbstart+delta);
- dres.whatNext = Dis_StopHere;
+ jmp_lit(&dres, Ijk_TInval, (Addr32)(guest_EIP_bbstart+delta));
DIP("clflush %s\n", dis_buf);
goto decode_success;
Modified: branches/TCHAIN/priv/guest_amd64_toIR.c (+2 -4)
===================================================================
--- branches/TCHAIN/priv/guest_amd64_toIR.c 2012-04-13 22:46:57 +01:00 (rev 2282)
+++ branches/TCHAIN/priv/guest_amd64_toIR.c 2012-04-14 00:03:45 -23:00 (rev 2283)
@@ -11482,11 +11482,9 @@
mkU64( ~(lineszB-1) ))) );
stmt( IRStmt_Put(OFFB_TILEN, mkU64(lineszB) ) );
-
- irsb->jumpkind = Ijk_TInval;
- irsb->next = mkU64(guest_RIP_bbstart+delta);
- dres->whatNext = Dis_StopHere;
+ jmp_lit(dres, Ijk_TInval, (Addr64)(guest_RIP_bbstart+delta));
+
DIP("clflush %s\n", dis_buf);
goto decode_success;
}
|