Skip to content

Commit 7c594eb

Browse files
committed
Add some missing f16-f128 support in intrinsics
1 parent 6c410ba commit 7c594eb

File tree

1 file changed

+9
-9
lines changed
  • compiler/rustc_const_eval/src/interpret/intrinsics

1 file changed

+9
-9
lines changed

compiler/rustc_const_eval/src/interpret/intrinsics/simd.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use either::Either;
22
use rustc_abi::Endian;
3-
use rustc_apfloat::ieee::{Double, Single};
3+
use rustc_apfloat::ieee::{Double, Half, Quad, Single};
44
use rustc_apfloat::{Float, Round};
55
use rustc_middle::mir::interpret::{InterpErrorKind, UndefinedBehaviorInfo};
66
use rustc_middle::ty::FloatTy;
@@ -120,10 +120,10 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
120120
let op = op.to_scalar();
121121
// "Bitwise" operation, no NaN adjustments
122122
match float_ty {
123-
FloatTy::F16 => unimplemented!("f16_f128"),
123+
FloatTy::F16 => Scalar::from_f16(op.to_f16()?.abs()),
124124
FloatTy::F32 => Scalar::from_f32(op.to_f32()?.abs()),
125125
FloatTy::F64 => Scalar::from_f64(op.to_f64()?.abs()),
126-
FloatTy::F128 => unimplemented!("f16_f128"),
126+
FloatTy::F128 => Scalar::from_f128(op.to_f128()?.abs()),
127127
}
128128
}
129129
Op::Round(rounding) => {
@@ -136,10 +136,10 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
136136
};
137137
let op = op.to_scalar();
138138
match float_ty {
139-
FloatTy::F16 => unimplemented!("f16_f128"),
139+
FloatTy::F16 => self.float_round::<Half>(op, rounding)?,
140140
FloatTy::F32 => self.float_round::<Single>(op, rounding)?,
141141
FloatTy::F64 => self.float_round::<Double>(op, rounding)?,
142-
FloatTy::F128 => unimplemented!("f16_f128"),
142+
FloatTy::F128 => self.float_round::<Quad>(op, rounding)?,
143143
}
144144
}
145145
Op::Numeric(name) => {
@@ -716,10 +716,10 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
716716
};
717717

718718
let val = match float_ty {
719-
FloatTy::F16 => unimplemented!("f16_f128"),
719+
FloatTy::F16 => self.float_muladd::<Half>(a, b, c, typ)?,
720720
FloatTy::F32 => self.float_muladd::<Single>(a, b, c, typ)?,
721721
FloatTy::F64 => self.float_muladd::<Double>(a, b, c, typ)?,
722-
FloatTy::F128 => unimplemented!("f16_f128"),
722+
FloatTy::F128 => self.float_muladd::<Quad>(a, b, c, typ)?,
723723
};
724724
self.write_scalar(val, &dest)?;
725725
}
@@ -747,10 +747,10 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
747747
let left = left.to_scalar();
748748
let right = right.to_scalar();
749749
interp_ok(match float_ty {
750-
FloatTy::F16 => unimplemented!("f16_f128"),
750+
FloatTy::F16 => self.float_minmax::<Half>(left, right, op)?,
751751
FloatTy::F32 => self.float_minmax::<Single>(left, right, op)?,
752752
FloatTy::F64 => self.float_minmax::<Double>(left, right, op)?,
753-
FloatTy::F128 => unimplemented!("f16_f128"),
753+
FloatTy::F128 => self.float_minmax::<Quad>(left, right, op)?,
754754
})
755755
}
756756
}

0 commit comments

Comments
 (0)