]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle "vmov qDest.I32 V128{0xFFFF}" so to speak, and make the case
authorJulian Seward <jseward@acm.org>
Tue, 5 Mar 2013 10:35:44 +0000 (10:35 +0000)
committerJulian Seward <jseward@acm.org>
Tue, 5 Mar 2013 10:35:44 +0000 (10:35 +0000)
for a zero immediate more similar.  Verify assembled output against
GNU as.  Fixes #311318.

git-svn-id: svn://svn.valgrind.org/vex/trunk@2693

VEX/priv/host_arm_isel.c

index c74613bab5e254107ea410ec9b4cf66b447e0508..84d856bb358aa512072a8606063d842c65467938 100644 (file)
@@ -3697,9 +3697,14 @@ static HReg iselNeonExpr_wrk ( ISelEnv* env, IRExpr* e )
          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);