|
From: <sv...@va...> - 2017-01-13 18:02:50
|
Author: sewardj
Date: Fri Jan 13 18:02:38 2017
New Revision: 16202
Log:
Add support for Iop_MaxNumF64, Iop_MinNumF64, Iop_MaxNumF32 and
Iop_MinNumF32, as introduced in vex r3293.
Modified:
trunk/memcheck/mc_translate.c
trunk/memcheck/tests/vbit-test/irops.c
Modified: trunk/memcheck/mc_translate.c
==============================================================================
--- trunk/memcheck/mc_translate.c (original)
+++ trunk/memcheck/mc_translate.c Fri Jan 13 18:02:38 2017
@@ -1611,6 +1611,14 @@
return at;
}
+ /* I32 x I32 -> I32 */
+ if (t1 == Ity_I32 && t2 == Ity_I32 && finalVty == Ity_I32) {
+ if (0) VG_(printf)("mkLazy2: I32 x I32 -> I32\n");
+ at = mkUifU(mce, Ity_I32, va1, va2);
+ at = mkPCastTo(mce, Ity_I32, at);
+ return at;
+ }
+
if (0) {
VG_(printf)("mkLazy2 ");
ppIRType(t1);
@@ -3942,6 +3950,16 @@
case Iop_CmpExpD128:
return mkLazy2(mce, Ity_I32, vatom1, vatom2);
+ case Iop_MaxNumF32:
+ case Iop_MinNumF32:
+ /* F32 x F32 -> F32 */
+ return mkLazy2(mce, Ity_I32, vatom1, vatom2);
+
+ case Iop_MaxNumF64:
+ case Iop_MinNumF64:
+ /* F64 x F64 -> F64 */
+ return mkLazy2(mce, Ity_I64, vatom1, vatom2);
+
/* non-FP after here */
case Iop_DivModU64to32:
Modified: trunk/memcheck/tests/vbit-test/irops.c
==============================================================================
--- trunk/memcheck/tests/vbit-test/irops.c (original)
+++ trunk/memcheck/tests/vbit-test/irops.c Fri Jan 13 18:02:38 2017
@@ -295,6 +295,12 @@
{ DEFOP(Iop_RecpExpF64, UNDEF_UNKNOWN), },
{ DEFOP(Iop_RecpExpF32, UNDEF_UNKNOWN), },
+ /* --------- Possibly required by IEEE 754-2008. --------- */
+ { DEFOP(Iop_MaxNumF64, UNDEF_ALL), .arm = 1 },
+ { DEFOP(Iop_MinNumF64, UNDEF_ALL), .arm = 1 },
+ { DEFOP(Iop_MaxNumF32, UNDEF_ALL), .arm = 1 },
+ { DEFOP(Iop_MinNumF32, UNDEF_ALL), .arm = 1 },
+
/* ------------------ 16-bit scalar FP ------------------ */
{ DEFOP(Iop_F16toF64, UNDEF_ALL), .arm64 = 1 },
{ DEFOP(Iop_F64toF16, UNDEF_ALL), .arm64 = 1 },
|