@@ -217,56 +217,76 @@ XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &tm,
217217 for (unsigned I = MVT::FIRST_FP_VALUETYPE; I <= MVT::LAST_FP_VALUETYPE; ++I) {
218218 MVT VT = MVT::SimpleValueType (I);
219219 if (isTypeLegal (VT)) {
220- // We can use FI for FRINT.
221- // setOperationAction(ISD::FRINT, VT, Legal);
222220 if (VT.getSizeInBits () == 32 && Subtarget.hasSingleFloat ()) {
221+ setOperationAction (ISD::FABS, VT, Legal);
223222 setOperationAction (ISD::FADD, VT, Legal);
224- setOperationAction (ISD::FSUB , VT, Legal);
223+ setOperationAction (ISD::FMA , VT, Legal);
225224 setOperationAction (ISD::FMUL, VT, Legal);
226- setOperationAction (ISD::FDIV, VT, Expand);
225+ setOperationAction (ISD::FNEG, VT, Legal);
226+ setOperationAction (ISD::FSUB, VT, Legal);
227227 } else {
228+ setOperationAction (ISD::FABS, VT, Expand);
228229 setOperationAction (ISD::FADD, VT, Expand);
229- setOperationAction (ISD::FSUB , VT, Expand);
230+ setOperationAction (ISD::FMA , VT, Expand);
230231 setOperationAction (ISD::FMUL, VT, Expand);
231- setOperationAction (ISD::FDIV, VT, Expand);
232+ setOperationAction (ISD::FNEG, VT, Expand);
233+ setOperationAction (ISD::FSUB, VT, Expand);
232234 }
233235
234- // TODO: once implemented in InstrInfo uncomment
235- setOperationAction (ISD::FSQRT, VT, Expand);
236-
237236 // No special instructions for these.
238- setOperationAction (ISD::FSIN, VT, Expand);
237+ setOperationAction (ISD::FCBRT, VT, Expand);
238+ setOperationAction (ISD::FCEIL, VT, Expand);
239+ setOperationAction (ISD::FCOPYSIGN, VT, Expand);
239240 setOperationAction (ISD::FCOS, VT, Expand);
241+ setOperationAction (ISD::FDIV, VT, Expand);
242+ setOperationAction (ISD::FEXP, VT, Expand);
243+ setOperationAction (ISD::FEXP2, VT, Expand);
244+ setOperationAction (ISD::FFLOOR, VT, Expand);
245+ setOperationAction (ISD::FLOG, VT, Expand);
246+ setOperationAction (ISD::FLOG2, VT, Expand);
247+ setOperationAction (ISD::FLOG10, VT, Expand);
248+ setOperationAction (ISD::FMAXIMUM, VT, Expand);
249+ setOperationAction (ISD::FMINIMUM, VT, Expand);
250+ setOperationAction (ISD::FMAXNUM, VT, Expand);
251+ setOperationAction (ISD::FMINNUM, VT, Expand);
252+ setOperationAction (ISD::FNEARBYINT, VT, Expand);
253+ setOperationAction (ISD::FPOW, VT, Expand);
254+ setOperationAction (ISD::FPOWI, VT, Expand);
240255 setOperationAction (ISD::FREM, VT, Expand);
241- setOperationAction (ISD::FABS, VT, Expand);
256+ setOperationAction (ISD::FRINT, VT, Expand);
257+ setOperationAction (ISD::FROUND, VT, Expand);
258+ setOperationAction (ISD::FSIN, VT, Expand);
259+ setOperationAction (ISD::FSINCOS, VT, Expand);
260+ setOperationAction (ISD::FSQRT, VT, Expand);
261+ setOperationAction (ISD::FTRUNC, VT, Expand);
262+ setOperationAction (ISD::LLRINT, VT, Expand);
263+ setOperationAction (ISD::LLROUND, VT, Expand);
264+ setOperationAction (ISD::LRINT, VT, Expand);
265+ setOperationAction (ISD::LROUND, VT, Expand);
242266 }
243267 }
244268
245- // Handle floating-point types.
246269 if (Subtarget.hasSingleFloat ()) {
247- setOperationAction (ISD::FMA, MVT::f32 , Legal);
248270 setOperationAction (ISD::BITCAST, MVT::i32 , Legal);
249271 setOperationAction (ISD::BITCAST, MVT::f32 , Legal);
250272 setOperationAction (ISD::UINT_TO_FP, MVT::i32 , Legal);
251273 setOperationAction (ISD::SINT_TO_FP, MVT::i32 , Legal);
252274 setOperationAction (ISD::FP_TO_UINT, MVT::i32 , Legal);
253275 setOperationAction (ISD::FP_TO_SINT, MVT::i32 , Legal);
254- setOperationAction (ISD::FCOPYSIGN, MVT::f32 , Expand);
255276 } else {
256- setOperationAction (ISD::FMA, MVT::f32 , Expand);
257- setOperationAction (ISD::SETCC, MVT::f32 , Expand);
258277 setOperationAction (ISD::BITCAST, MVT::i32 , Expand);
259278 setOperationAction (ISD::BITCAST, MVT::f32 , Expand);
260279 setOperationAction (ISD::UINT_TO_FP, MVT::i32 , Expand);
261280 setOperationAction (ISD::SINT_TO_FP, MVT::i32 , Expand);
262281 setOperationAction (ISD::FP_TO_UINT, MVT::i32 , Expand);
263282 setOperationAction (ISD::FP_TO_SINT, MVT::i32 , Expand);
264- setOperationAction (ISD::UINT_TO_FP, MVT::i64 , Expand);
265- setOperationAction (ISD::SINT_TO_FP, MVT::i64 , Expand);
266- setOperationAction (ISD::FP_TO_UINT, MVT::i64 , Expand);
267- setOperationAction (ISD::FP_TO_SINT, MVT::i64 , Expand);
268283 }
269- setOperationAction (ISD::FMA, MVT::f64 , Expand);
284+
285+ setOperationAction (ISD::UINT_TO_FP, MVT::i64 , Expand);
286+ setOperationAction (ISD::SINT_TO_FP, MVT::i64 , Expand);
287+ setOperationAction (ISD::FP_TO_UINT, MVT::i64 , Expand);
288+ setOperationAction (ISD::FP_TO_SINT, MVT::i64 , Expand);
289+
270290 setOperationAction (ISD::SETCC, MVT::f64 , Expand);
271291 setOperationAction (ISD::BITCAST, MVT::i64 , Expand);
272292 setOperationAction (ISD::BITCAST, MVT::f64 , Expand);
0 commit comments