Skip to content

Commit bccf0a1

Browse files
committed
Merge codegen of a couple more simd intrinsics
1 parent 5a3cfb2 commit bccf0a1

File tree

1 file changed

+14
-44
lines changed

1 file changed

+14
-44
lines changed

src/intrinsics/simd.rs

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)