|
From: <sv...@va...> - 2005-05-14 02:02:59
|
Author: sewardj
Date: 2005-05-14 03:02:50 +0100 (Sat, 14 May 2005)
New Revision: 1196
Modified:
trunk/priv/host-x86/isel.c
Log:
Handle NegF64.
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-05-13 13:54:48 UTC (rev 1195)
+++ trunk/priv/host-x86/isel.c 2005-05-14 02:02:50 UTC (rev 1196)
@@ -2305,6 +2305,24 @@
return;
}
=20
+ /* Neg64(e) */
+ case Iop_Neg64: {
+ HReg yLo, yHi;
+ HReg tLo =3D newVRegI(env);
+ HReg tHi =3D newVRegI(env);
+ /* yHi:yLo =3D arg */
+ iselInt64Expr(&yHi, &yLo, env, e->Iex.Unop.arg);
+ /* tLo =3D 0 - yLo, and set carry */
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(0), tLo))=
;
+ addInstr(env, X86Instr_Alu32R(Xalu_SUB, X86RMI_Reg(yLo), tLo=
));
+ /* tHi =3D 0 - yHi - carry */
+ addInstr(env, X86Instr_Alu32R(Xalu_MOV, X86RMI_Imm(0), tHi))=
;
+ addInstr(env, X86Instr_Alu32R(Xalu_SBB, X86RMI_Reg(yHi), tHi=
));
+ *rHi =3D tHi;
+ *rLo =3D tLo;
+ return;
+ }
+
/* ReinterpF64asI64(e) */
/* Given an IEEE754 double, produce an I64 with the same bit
pattern. */
|