So: In short, pessimise the args, then apply the original narrowing
op.
+
+ FIXME JRS 2011-Jun-15: figure out if this is still correct
+ following today's rationalisation/cleanup of vector narrowing
+ primops.
*/
static
IRAtom* vectorNarrowV128 ( MCEnv* mce, IROp narrow_op,
IRAtom *at1, *at2, *at3;
IRAtom* (*pcast)( MCEnv*, IRAtom* );
switch (narrow_op) {
- case Iop_QNarrow32Sx4: pcast = mkPCast32x4; break;
- case Iop_QNarrow32Ux4: pcast = mkPCast32x4; break;
- case Iop_QNarrow16Sx8: pcast = mkPCast16x8; break;
- case Iop_QNarrow16Ux8: pcast = mkPCast16x8; break;
+ case Iop_QNarrow32Sto16Sx8: pcast = mkPCast32x4; break;
+ case Iop_QNarrow32Uto16Ux8: pcast = mkPCast32x4; break;
+ case Iop_QNarrow16Sto8Sx16: pcast = mkPCast16x8; break;
+ case Iop_QNarrow16Sto8Ux16: pcast = mkPCast16x8; break;
default: VG_(tool_panic)("vectorNarrowV128");
}
tl_assert(isShadowAtom(mce,vatom1));
IRAtom *at1, *at2, *at3;
IRAtom* (*pcast)( MCEnv*, IRAtom* );
switch (narrow_op) {
- case Iop_QNarrow32Sx2: pcast = mkPCast32x2; break;
- case Iop_QNarrow16Sx4: pcast = mkPCast16x4; break;
- case Iop_QNarrow16Ux4: pcast = mkPCast16x4; break;
+ case Iop_QNarrow32Sto16Sx4: pcast = mkPCast32x2; break;
+ case Iop_QNarrow16Sto8Sx8: pcast = mkPCast16x4; break;
+ case Iop_QNarrow16Sto8Ux8: pcast = mkPCast16x4; break;
default: VG_(tool_panic)("vectorNarrow64");
}
tl_assert(isShadowAtom(mce,vatom1));
complainIfUndefined(mce, atom2);
return assignNew('V', mce, Ity_I64, binop(op, vatom1, atom2));
- case Iop_QNarrow32Sx2:
- case Iop_QNarrow16Sx4:
- case Iop_QNarrow16Ux4:
+ case Iop_QNarrow32Sto16Sx4:
+ case Iop_QNarrow16Sto8Sx8:
+ case Iop_QNarrow16Sto8Ux8:
return vectorNarrow64(mce, op, vatom1, vatom2);
case Iop_Min8Ux8:
case Iop_QSub64Sx2:
return binary64Ix2(mce, vatom1, vatom2);
- case Iop_QNarrow32Sx4:
- case Iop_QNarrow32Ux4:
- case Iop_QNarrow16Sx8:
- case Iop_QNarrow16Ux8:
+ case Iop_QNarrow32Sto16Sx8:
+ case Iop_QNarrow32Uto16Ux8:
+ case Iop_QNarrow16Sto8Sx16:
+ case Iop_QNarrow16Sto8Ux16:
return vectorNarrowV128(mce, op, vatom1, vatom2);
case Iop_Sub64Fx2: