@@ -217,56 +217,76 @@ XtensaTargetLowering::XtensaTargetLowering(const TargetMachine &tm,
217
217
for (unsigned I = MVT::FIRST_FP_VALUETYPE; I <= MVT::LAST_FP_VALUETYPE; ++I) {
218
218
MVT VT = MVT::SimpleValueType (I);
219
219
if (isTypeLegal (VT)) {
220
- // We can use FI for FRINT.
221
- // setOperationAction(ISD::FRINT, VT, Legal);
222
220
if (VT.getSizeInBits () == 32 && Subtarget.hasSingleFloat ()) {
221
+ setOperationAction (ISD::FABS, VT, Legal);
223
222
setOperationAction (ISD::FADD, VT, Legal);
224
- setOperationAction (ISD::FSUB , VT, Legal);
223
+ setOperationAction (ISD::FMA , VT, Legal);
225
224
setOperationAction (ISD::FMUL, VT, Legal);
226
- setOperationAction (ISD::FDIV, VT, Expand);
225
+ setOperationAction (ISD::FNEG, VT, Legal);
226
+ setOperationAction (ISD::FSUB, VT, Legal);
227
227
} else {
228
+ setOperationAction (ISD::FABS, VT, Expand);
228
229
setOperationAction (ISD::FADD, VT, Expand);
229
- setOperationAction (ISD::FSUB , VT, Expand);
230
+ setOperationAction (ISD::FMA , VT, Expand);
230
231
setOperationAction (ISD::FMUL, VT, Expand);
231
- setOperationAction (ISD::FDIV, VT, Expand);
232
+ setOperationAction (ISD::FNEG, VT, Expand);
233
+ setOperationAction (ISD::FSUB, VT, Expand);
232
234
}
233
235
234
- // TODO: once implemented in InstrInfo uncomment
235
- setOperationAction (ISD::FSQRT, VT, Expand);
236
-
237
236
// 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);
239
240
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);
240
255
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);
242
266
}
243
267
}
244
268
245
- // Handle floating-point types.
246
269
if (Subtarget.hasSingleFloat ()) {
247
- setOperationAction (ISD::FMA, MVT::f32 , Legal);
248
270
setOperationAction (ISD::BITCAST, MVT::i32 , Legal);
249
271
setOperationAction (ISD::BITCAST, MVT::f32 , Legal);
250
272
setOperationAction (ISD::UINT_TO_FP, MVT::i32 , Legal);
251
273
setOperationAction (ISD::SINT_TO_FP, MVT::i32 , Legal);
252
274
setOperationAction (ISD::FP_TO_UINT, MVT::i32 , Legal);
253
275
setOperationAction (ISD::FP_TO_SINT, MVT::i32 , Legal);
254
- setOperationAction (ISD::FCOPYSIGN, MVT::f32 , Expand);
255
276
} else {
256
- setOperationAction (ISD::FMA, MVT::f32 , Expand);
257
- setOperationAction (ISD::SETCC, MVT::f32 , Expand);
258
277
setOperationAction (ISD::BITCAST, MVT::i32 , Expand);
259
278
setOperationAction (ISD::BITCAST, MVT::f32 , Expand);
260
279
setOperationAction (ISD::UINT_TO_FP, MVT::i32 , Expand);
261
280
setOperationAction (ISD::SINT_TO_FP, MVT::i32 , Expand);
262
281
setOperationAction (ISD::FP_TO_UINT, MVT::i32 , Expand);
263
282
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);
268
283
}
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
+
270
290
setOperationAction (ISD::SETCC, MVT::f64 , Expand);
271
291
setOperationAction (ISD::BITCAST, MVT::i64 , Expand);
272
292
setOperationAction (ISD::BITCAST, MVT::f64 , Expand);
0 commit comments