Add support for four IROps that Memcheck generates on arm64, that
the front end doesn't generate.


git-svn-id: svn://svn.valgrind.org/vex/trunk@2935 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/host_arm64_isel.c b/priv/host_arm64_isel.c
index 0da86c5..764fd73 100644
--- a/priv/host_arm64_isel.c
+++ b/priv/host_arm64_isel.c
@@ -2285,6 +2285,33 @@
             addInstr(env, ARM64Instr_VQfromX(res, arg));
             return res;
          }
+         case Iop_Widen8Sto16x8: {
+            HReg res = newVRegV(env);
+            HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
+            addInstr(env, ARM64Instr_VQfromX(res, arg));
+            addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP18x16, res, res, res));
+            addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR16x8,
+                                                res, res, 8));
+            return res;
+         }
+         case Iop_Widen16Sto32x4: {
+            HReg res = newVRegV(env);
+            HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
+            addInstr(env, ARM64Instr_VQfromX(res, arg));
+            addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP116x8, res, res, res));
+            addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR32x4,
+                                                res, res, 16));
+            return res;
+         }
+         case Iop_Widen32Sto64x2: {
+            HReg res = newVRegV(env);
+            HReg arg = iselIntExpr_R(env, e->Iex.Unop.arg);
+            addInstr(env, ARM64Instr_VQfromX(res, arg));
+            addInstr(env, ARM64Instr_VBinV(ARM64vecb_ZIP132x4, res, res, res));
+            addInstr(env, ARM64Instr_VShiftImmV(ARM64vecshi_SSHR64x2,
+                                                res, res, 32));
+            return res;
+         }
          /* ... */
          default:
             break;
@@ -3168,7 +3195,11 @@
  
    if (e->tag == Iex_Binop) {
       switch (e->Iex.Binop.op) {
-
+         case Iop_V128HLtoV256: {
+            *rHi = iselV128Expr(env, e->Iex.Binop.arg1);
+            *rLo = iselV128Expr(env, e->Iex.Binop.arg2);
+            return;
+         }
          case Iop_QandSQsh64x2:
          case Iop_QandSQsh32x4:
          case Iop_QandSQsh16x8: