Open
Description
Hi, this code
fn main() {
let masks = [m32::new(false); 1024];
let mask_ptr = cptrx8::splat(masks.as_ptr());
let mask = unsafe {
mask_ptr.read(m32x8::splat(true), m32x8::splat(false))
};
}
triggers this error
invalid monomorphization of
simd_gather
intrinsic: expected element type*const packed_simd::masks::m32
of second argumentpacked_simd::codegen::vPtr::cptrx8<*const packed_simd::masks::m32>
to be a pointer to the element typei32
of the first argumentpacked_simd::codegen::v256::m32x8
, found*const packed_simd::masks::m32
!=*_ i32
Is it the intended behavior?
All masks trigger an error and I'm using the version 1.36.0-nightly (e938c2b9a 2019-04-23) on x86_64-pc-windows-msvc.
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
gnzlbg commentedon Apr 24, 2019
Thanks for the report. That should work, but as you mention it does not - I can reproduce.
When doing the
mask_ptr.read
we should be internally casting / transmutingm32
toi32
but we are not doing currently that, and apparently no test covers this. Nice.Until this is fixed, a workaround would be to write
cptrx8::splat(masks.as_ptr() as *const i32);
and once you load the vector of i32s, then cast it to a mask vector.