|
From: <sv...@va...> - 2013-03-05 10:35:54
|
sewardj 2013-03-05 10:35:44 +0000 (Tue, 05 Mar 2013)
New Revision: 2693
Log:
Handle "vmov qDest.I32 V128{0xFFFF}" so to speak, and make the case
for a zero immediate more similar. Verify assembled output against
GNU as. Fixes #311318.
Modified files:
trunk/priv/host_arm_isel.c
Modified: trunk/priv/host_arm_isel.c (+7 -2)
===================================================================
--- trunk/priv/host_arm_isel.c 2013-03-04 18:33:56 +00:00 (rev 2692)
+++ trunk/priv/host_arm_isel.c 2013-03-05 10:35:44 +00:00 (rev 2693)
@@ -3697,11 +3697,16 @@
generated during disassemble. They are represented as Iop_64HLtoV128
binary operation and are handled among binary ops. */
/* But zero can be created by valgrind internal optimizer */
- if (e->Iex.Const.con->Ico.V128 == 0) {
+ if (e->Iex.Const.con->Ico.V128 == 0x0000) {
HReg res = newVRegV(env);
- addInstr(env, ARMInstr_NeonImm(res, ARMNImm_TI(0, 0)));
+ addInstr(env, ARMInstr_NeonImm(res, ARMNImm_TI(6, 0)));
return res;
}
+ if (e->Iex.Const.con->Ico.V128 == 0xFFFF) {
+ HReg res = newVRegV(env);
+ addInstr(env, ARMInstr_NeonImm(res, ARMNImm_TI(6, 255)));
+ return res;
+ }
ppIRExpr(e);
vpanic("128-bit constant is not implemented");
}
|