@@ -258,28 +258,6 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
258
258
} ) ;
259
259
} ;
260
260
261
- simd_fabs, ( c a) {
262
- if !a. layout( ) . ty. is_simd( ) {
263
- report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
264
- return ;
265
- }
266
-
267
- simd_for_each_lane( fx, a, ret, & |fx, _lane_ty, _ret_lane_ty, lane| {
268
- fx. bcx. ins( ) . fabs( lane)
269
- } ) ;
270
- } ;
271
-
272
- simd_fsqrt, ( c a) {
273
- if !a. layout( ) . ty. is_simd( ) {
274
- report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
275
- return ;
276
- }
277
-
278
- simd_for_each_lane( fx, a, ret, & |fx, _lane_ty, _ret_lane_ty, lane| {
279
- fx. bcx. ins( ) . sqrt( lane)
280
- } ) ;
281
- } ;
282
-
283
261
simd_add | simd_sub | simd_mul | simd_div | simd_rem
284
262
| simd_shl | simd_shr | simd_and | simd_or | simd_xor, ( c x, c y) {
285
263
if !x. layout( ) . ty. is_simd( ) {
@@ -407,34 +385,26 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
407
385
}
408
386
} ) ;
409
387
} ;
410
- simd_ceil, ( c a) {
411
- if !a. layout( ) . ty. is_simd( ) {
412
- report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
413
- return ;
414
- }
415
388
416
- simd_for_each_lane( fx, a, ret, & |fx, _lane_ty, _ret_lane_ty, lane| {
417
- fx. bcx. ins( ) . ceil( lane)
418
- } ) ;
419
- } ;
420
- simd_floor, ( c a) {
421
- if !a. layout( ) . ty. is_simd( ) {
422
- report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
423
- return ;
424
- }
425
-
426
- simd_for_each_lane( fx, a, ret, & |fx, _lane_ty, _ret_lane_ty, lane| {
427
- fx. bcx. ins( ) . floor( lane)
428
- } ) ;
429
- } ;
430
- simd_trunc, ( c a) {
389
+ simd_fabs | simd_fsqrt | simd_ceil | simd_floor | simd_trunc, ( c a) {
431
390
if !a. layout( ) . ty. is_simd( ) {
432
391
report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
433
392
return ;
434
393
}
435
394
436
- simd_for_each_lane( fx, a, ret, & |fx, _lane_ty, _ret_lane_ty, lane| {
437
- fx. bcx. ins( ) . trunc( lane)
395
+ simd_for_each_lane( fx, a, ret, & |fx, lane_ty, _ret_lane_ty, lane| {
396
+ match lane_ty. kind( ) {
397
+ ty:: Float ( _) => { } ,
398
+ _ => unreachable!( "{:?}" , lane_ty) ,
399
+ }
400
+ match intrinsic {
401
+ sym:: simd_fabs => fx. bcx. ins( ) . fabs( lane) ,
402
+ sym:: simd_fsqrt => fx. bcx. ins( ) . sqrt( lane) ,
403
+ sym:: simd_ceil => fx. bcx. ins( ) . ceil( lane) ,
404
+ sym:: simd_floor => fx. bcx. ins( ) . floor( lane) ,
405
+ sym:: simd_trunc => fx. bcx. ins( ) . trunc( lane) ,
406
+ _ => unreachable!( ) ,
407
+ }
438
408
} ) ;
439
409
} ;
440
410
0 commit comments