Skip to content

simd_gather mask triggers an error #237

Open
@leudz

Description

@leudz

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 argument packed_simd::codegen::vPtr::cptrx8<*const packed_simd::masks::m32> to be a pointer to the element type i32 of the first argument packed_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.

Activity

gnzlbg

gnzlbg commented on Apr 24, 2019

@gnzlbg
Contributor

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 / transmuting m32 to i32 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't workingP-High

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @gnzlbg@leudz

        Issue actions

          simd_gather mask triggers an error · Issue #237 · rust-lang/packed_simd