@@ -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