|
From: <sv...@va...> - 2005-04-06 01:11:57
|
Author: sewardj
Date: 2005-04-06 02:11:53 +0100 (Wed, 06 Apr 2005)
New Revision: 1122
Modified:
trunk/priv/host-x86/isel.c
Log:
iselIntExpr64(const): save a precious register in the case where
the two halves have the same value.
Modified: trunk/priv/host-x86/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-x86/isel.c 2005-04-06 01:11:08 UTC (rev 1121)
+++ trunk/priv/host-x86/isel.c 2005-04-06 01:11:53 UTC (rev 1122)
@@ -1691,10 +1691,17 @@
HReg tLo =3D newVRegI(env);
HReg tHi =3D newVRegI(env);
vassert(e->Iex.Const.con->tag =3D=3D Ico_U64);
- addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wHi), tHi));
- addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wLo), tLo));
- *rHi =3D tHi;
- *rLo =3D tLo;
+ if (wLo =3D=3D wHi) {
+ /* Save a precious Int register in this special case. */
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wLo), tLo));
+ *rHi =3D tLo;
+ *rLo =3D tLo;
+ } else {
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wHi), tHi));
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(wLo), tLo));
+ *rHi =3D tHi;
+ *rLo =3D tLo;
+ }
return;
}
=20
|