@@ -258,28 +258,6 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
258258 } ) ;
259259 } ;
260260
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-
283261 simd_add | simd_sub | simd_mul | simd_div | simd_rem
284262 | simd_shl | simd_shr | simd_and | simd_or | simd_xor, ( c x, c y) {
285263 if !x. layout( ) . ty. is_simd( ) {
@@ -407,34 +385,26 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
407385 }
408386 } ) ;
409387 } ;
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- }
415388
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) {
431390 if !a. layout( ) . ty. is_simd( ) {
432391 report_simd_type_validation_error( fx, intrinsic, span, a. layout( ) . ty) ;
433392 return ;
434393 }
435394
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+ }
438408 } ) ;
439409 } ;
440410
0 commit comments