Summary
rustc_codegen_cranelift does not implement the simd_funnel_shl and simd_funnel_shr intrinsics. Code using them fails to compile with:
error: Unknown SIMD intrinsic simd_funnel_shl
error: Unknown SIMD intrinsic simd_funnel_shr
This blocks the rustc test tests/ui/simd/intrinsic/generic-arithmetic-pass.rs, which is currently skipped in scripts/test_rustc_tests.sh with the comment unimplemented simd_funnel_{shl,shr}.
Reproduce
#![feature(repr_simd, core_intrinsics)]
#![allow(non_camel_case_types)]
use std::intrinsics::simd::{simd_funnel_shl, simd_funnel_shr};
#[repr(simd)]
#[derive(Copy, Clone)]
struct i32x4([i32; 4]);
fn main() {
let x = i32x4([1, 2, 3, 4]);
let y = i32x4([2, 3, 4, 5]);
unsafe {
let _ = simd_funnel_shl(x, y, x);
let _ = simd_funnel_shr(x, y, x);
}
}
rustc -Zcodegen-backend=cranelift repro.rs
btw simd_shl and simd_shr are already implemented in src/intrinsics/simd.rs
Funnel shifts combine bits from two vectors according to a per lane shift amount
Summary
rustc_codegen_craneliftdoes not implement thesimd_funnel_shlandsimd_funnel_shrintrinsics. Code using them fails to compile with:error: Unknown SIMD intrinsic simd_funnel_shl
error: Unknown SIMD intrinsic simd_funnel_shr
This blocks the rustc test
tests/ui/simd/intrinsic/generic-arithmetic-pass.rs, which is currently skipped inscripts/test_rustc_tests.shwith the commentunimplemented simd_funnel_{shl,shr}.Reproduce
btw
simd_shland simd_shrare already implemented in src/intrinsics/simd.rsFunnel shifts combine bits from two vectors according to a per lane shift amount