]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 406465 - arm64 instruction selector fails on "t0 = <expr>" where <expr> has type...
authorJulian Seward <jseward@acm.org>
Sat, 13 Apr 2019 10:34:06 +0000 (12:34 +0200)
committerJulian Seward <jseward@acm.org>
Sat, 13 Apr 2019 10:34:06 +0000 (12:34 +0200)
VEX/priv/host_arm64_isel.c

index 49d0f0b19f00975de1dda8f66e02ea312cd22982..b2ab7422b63443b4356576e18a39ea3b7ac3e684 100644 (file)
@@ -3391,6 +3391,10 @@ static HReg iselF16Expr_wrk ( ISelEnv* env, IRExpr* e )
    vassert(e);
    vassert(ty == Ity_F16);
 
+   if (e->tag == Iex_RdTmp) {
+      return lookupIRTemp(env, e->Iex.RdTmp.tmp);
+   }
+
    if (e->tag == Iex_Get) {
       Int offs = e->Iex.Get.offset;
       if (offs >= 0 && offs < 8192 && 0 == (offs & 1)) {
@@ -3706,6 +3710,12 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
          addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src));
          return;
       }
+      if (ty == Ity_F16) {
+         HReg src = iselF16Expr(env, stmt->Ist.WrTmp.data);
+         HReg dst = lookupIRTemp(env, tmp);
+         addInstr(env, ARM64Instr_VMov(8/*yes, really*/, dst, src));
+         return;
+      }
       if (ty == Ity_V128) {
          HReg src = iselV128Expr(env, stmt->Ist.WrTmp.data);
          HReg dst = lookupIRTemp(env, tmp);