]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
iselFltExpr_wrk: handle Iex_ITE, presumably caused by newly-created guarding machinery.
authorJulian Seward <jseward@acm.org>
Mon, 11 Nov 2019 16:06:54 +0000 (17:06 +0100)
committerJulian Seward <jseward@acm.org>
Mon, 11 Nov 2019 16:06:54 +0000 (17:06 +0100)
VEX/priv/host_amd64_isel.c

index a389e81781ae282beee12519d1d634a92f7d0d4b..8dc30684bb0304ce164623dd318b5f9882bccb31 100644 (file)
@@ -2815,6 +2815,19 @@ static HReg iselFltExpr_wrk ( ISelEnv* env, const IRExpr* e )
       return dst;
    }
 
+   if (e->tag == Iex_ITE) { // VFD
+      HReg r1, r0, dst;
+      vassert(ty == Ity_F32);
+      vassert(typeOfIRExpr(env->type_env,e->Iex.ITE.cond) == Ity_I1);
+      r1  = iselFltExpr(env, e->Iex.ITE.iftrue);
+      r0  = iselFltExpr(env, e->Iex.ITE.iffalse);
+      dst = newVRegV(env);
+      addInstr(env, mk_vMOVsd_RR(r1,dst));
+      AMD64CondCode cc = iselCondCode(env, e->Iex.ITE.cond);
+      addInstr(env, AMD64Instr_SseCMov(cc ^ 1, r0, dst));
+      return dst;
+   }
+
    ppIRExpr(e);
    vpanic("iselFltExpr_wrk");
 }