From: Julian Seward Date: Mon, 6 Apr 2015 14:52:28 +0000 (+0000) Subject: Memcheck: add support for recently added IROps: X-Git-Tag: svn/VALGRIND_3_11_0~523 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2eca28d9d38a925de0e3899429ceda3e3e8017dd;p=thirdparty%2Fvalgrind.git Memcheck: add support for recently added IROps: Iop_F64toF16 Iop_F32toF16 Iop_F16toF64 Iop_F16toF32 git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15070 --- diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c index 25ed75a7cf..11e5f1a8d1 100644 --- a/memcheck/mc_translate.c +++ b/memcheck/mc_translate.c @@ -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: diff --git a/memcheck/tests/vbit-test/irops.c b/memcheck/tests/vbit-test/irops.c index a861164414..4204899b29 100644 --- a/memcheck/tests/vbit-test/irops.c +++ b/memcheck/tests/vbit-test/irops.c @@ -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), }, diff --git a/memcheck/tests/vbit-test/vtest.h b/memcheck/tests/vbit-test/vtest.h index 2d8891c4c9..34dfb891d3 100644 --- a/memcheck/tests/vbit-test/vtest.h +++ b/memcheck/tests/vbit-test/vtest.h @@ -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;