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;
/* 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 */
case Iop_I64UtoD128: /* unsigned I64 -> D128 */
return mkPCastTo(mce, Ity_I128, vatom);
+ case Iop_F16toF64:
case Iop_F32toF64:
case Iop_I32StoF64:
case Iop_I32UtoF64:
case Iop_TruncF64asF32:
case Iop_NegF32:
case Iop_AbsF32:
+ case Iop_F16toF32:
return mkPCastTo(mce, Ity_I32, vatom);
case Iop_Ctz32:
{ 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), },