|
From: <sv...@va...> - 2005-11-16 17:21:18
|
Author: cerion
Date: 2005-11-16 17:21:10 +0000 (Wed, 16 Nov 2005)
New Revision: 1461
Log:
Yet more irops, for fp vector conversion/rounding.
Modified:
trunk/priv/ir/irdefs.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/ir/irdefs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/ir/irdefs.c 2005-11-15 11:16:30 UTC (rev 1460)
+++ trunk/priv/ir/irdefs.c 2005-11-16 17:21:10 UTC (rev 1461)
@@ -275,6 +275,17 @@
case Iop_ReinterpF32asI32: vex_printf("ReinterpF32asI32"); return;
case Iop_ReinterpI32asF32: vex_printf("ReinterpI32asF32"); return;
=20
+ case Iop_I32UtoFx4: vex_printf("Iop_I32UtoFx4"); return;
+ case Iop_I32StoFx4: vex_printf("Iop_I32StoFx4"); return;
+
+ case Iop_QFtoI32Ux4_RZ: vex_printf("Iop_QFtoI32Ux4_RZ"); return;
+ case Iop_QFtoI32Sx4_RZ: vex_printf("Iop_QFtoI32Sx4_RZ"); return;
+
+ case Iop_RoundF32x4_RM: vex_printf("Iop_RoundF32x4_RM"); return;
+ case Iop_RoundF32x4_RP: vex_printf("Iop_RoundF32x4_RP"); return;
+ case Iop_RoundF32x4_RN: vex_printf("Iop_RoundF32x4_RN"); return;
+ case Iop_RoundF32x4_RZ: vex_printf("Iop_RoundF32x4_RZ"); return;
+
case Iop_Add8x8: vex_printf("Add8x8"); return;
case Iop_Add16x4: vex_printf("Add16x4"); return;
case Iop_Add32x2: vex_printf("Add32x2"); return;
@@ -1511,6 +1522,16 @@
=20
case Iop_RoundF64: BINARY(Ity_F64, Ity_I32,Ity_F64);
=20
+ case Iop_I32UtoFx4:
+ case Iop_I32StoFx4:
+ case Iop_QFtoI32Ux4_RZ:
+ case Iop_QFtoI32Sx4_RZ:
+ case Iop_RoundF32x4_RM:
+ case Iop_RoundF32x4_RP:
+ case Iop_RoundF32x4_RN:
+ case Iop_RoundF32x4_RZ:
+ UNARY(Ity_V128, Ity_V128);
+
case Iop_64HLtoV128: BINARY(Ity_V128, Ity_I64,Ity_I64);
case Iop_V128to64: case Iop_V128HIto64:=20
UNARY(Ity_I64, Ity_V128);
Modified: trunk/pub/libvex_ir.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/pub/libvex_ir.h 2005-11-15 11:16:30 UTC (rev 1460)
+++ trunk/pub/libvex_ir.h 2005-11-16 17:21:10 UTC (rev 1461)
@@ -469,12 +469,23 @@
/* binary */
Iop_Add32Fx4, Iop_Sub32Fx4, Iop_Mul32Fx4, Iop_Div32Fx4,=20
Iop_Max32Fx4, Iop_Min32Fx4,
+ /* Note: For the following compares, the ppc32 front-end assumes a
+ nan in a lane of either argument returns zero for that lane. */
Iop_CmpEQ32Fx4, Iop_CmpLT32Fx4, Iop_CmpLE32Fx4, Iop_CmpUN32Fx4,=20
Iop_CmpGT32Fx4, Iop_CmpGE32Fx4,
=20
/* unary */
Iop_Recip32Fx4, Iop_Sqrt32Fx4, Iop_RSqrt32Fx4,
=20
+ /* --- Int to/from FP conversion --- */
+ /* Unlike the standard fp conversions, these irops take no
+ rounding mode argument. Instead the irop trailers _R{M,P,N,Z}
+ indicate the mode: {-inf, +inf, nearest, zero} respectively. */
+ Iop_I32UtoFx4, Iop_I32StoFx4, /* I32x4 -> F32x4 */
+ Iop_QFtoI32Ux4_RZ, Iop_QFtoI32Sx4_RZ, /* F32x4 -> I32x4 */
+ Iop_RoundF32x4_RM, Iop_RoundF32x4_RP, /* round to fp integer */
+ Iop_RoundF32x4_RN, Iop_RoundF32x4_RZ, /* round to fp integer */
+
/* --- 32x4 lowest-lane-only scalar FP --- */
=20
/* In binary cases, upper 3/4 is copied from first operand. In
|