]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Memcheck: add support for recently added IROps:
authorJulian Seward <jseward@acm.org>
Mon, 6 Apr 2015 14:52:28 +0000 (14:52 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 6 Apr 2015 14:52:28 +0000 (14:52 +0000)
Iop_F64toF16
Iop_F32toF16
Iop_F16toF64
Iop_F16toF32

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15070

memcheck/mc_translate.c
memcheck/tests/vbit-test/irops.c
memcheck/tests/vbit-test/vtest.h

index 25ed75a7cf46842dccec2e4f63b6ef8437fdb1ee..11e5f1a8d1b0620b845d097500e8ae4746f907b1 100644 (file)
@@ -381,6 +381,7 @@ static IRType shadowTypeV ( IRType ty )
       case Ity_I32: 
       case Ity_I64: 
       case Ity_I128: return ty;
+      case Ity_F16:  return Ity_I16;
       case Ity_F32:  return Ity_I32;
       case Ity_D32:  return Ity_I32;
       case Ity_F64:  return Ity_I64;
@@ -3801,6 +3802,11 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
          /* First arg is I32 (rounding mode), second is F32/I32 (data). */
          return mkLazy2(mce, Ity_I32, vatom1, vatom2);
 
+      case Iop_F64toF16:
+      case Iop_F32toF16:
+         /* First arg is I32 (rounding mode), second is F64/F32 (data). */
+         return mkLazy2(mce, Ity_I16, vatom1, vatom2);
+
       case Iop_F128toI32S: /* IRRoundingMode(I32) x F128 -> signed I32  */
       case Iop_F128toI32U: /* IRRoundingMode(I32) x F128 -> unsigned I32  */
       case Iop_F128toF32:  /* IRRoundingMode(I32) x F128 -> F32         */
@@ -4335,6 +4341,7 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IROp op, IRAtom* atom )
       case Iop_I64UtoD128: /* unsigned I64 -> D128 */
          return mkPCastTo(mce, Ity_I128, vatom);
 
+      case Iop_F16toF64:
       case Iop_F32toF64: 
       case Iop_I32StoF64:
       case Iop_I32UtoF64:
@@ -4364,6 +4371,7 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IROp op, IRAtom* atom )
       case Iop_TruncF64asF32:
       case Iop_NegF32:
       case Iop_AbsF32:
+      case Iop_F16toF32: 
          return mkPCastTo(mce, Ity_I32, vatom);
 
       case Iop_Ctz32:
index a861164414e11b04164d1f9f577b0a3537a843f0..4204899b292ea68a7a7a29e56f42a853153d9637 100644 (file)
@@ -259,11 +259,11 @@ static irop_t irops[] = {
   { DEFOP(Iop_RecpExpF64, UNDEF_UNKNOWN), },
   { DEFOP(Iop_RecpExpF32, UNDEF_UNKNOWN), },
 
-  /* ------------------ 16-bit scalar FP --------------------- */
-  { DEFOP(Iop_F16toF64, UNDEF_UNKNOWN), },
-  { DEFOP(Iop_F64toF16, UNDEF_UNKNOWN), },
-  { DEFOP(Iop_F16toF32, UNDEF_UNKNOWN), },
-  { DEFOP(Iop_F32toF16, UNDEF_UNKNOWN), },
+  /* ------------------ 16-bit scalar FP ------------------ */
+  { DEFOP(Iop_F16toF64,  UNDEF_ALL), .arm64 = 1 },
+  { DEFOP(Iop_F64toF16,  UNDEF_ALL), .arm64 = 1 },
+  { DEFOP(Iop_F16toF32,  UNDEF_ALL), .arm64 = 1 },
+  { DEFOP(Iop_F32toF16,  UNDEF_ALL), .arm64 = 1 },
 
   /* ------------------ 32-bit SIMD Integer ------------------ */
   { DEFOP(Iop_QAdd32S, UNDEF_UNKNOWN), },
index 2d8891c4c9b0b02c65e76c0c85ab2eccf8092661..34dfb891d39b889cfca7a9a9cf3f2774716a2b01 100644 (file)
@@ -72,6 +72,7 @@ typedef struct {
    unsigned    ppc32  : 1;
    unsigned    ppc64  : 1;
    unsigned    arm    : 1;
+   unsigned    arm64  : 1;
    unsigned    x86    : 1;
    unsigned    mips32 : 1;
    unsigned    mips64 : 1;