Skip to main content

## permute

# Function permute

Source

    fn permute<'tcx>(
        ecx: &mut MiriInterpCx<'tcx>,
        values: &OpTy<'tcx>,
        indices: &OpTy<'tcx>,
        dest: &MPlaceTy<'tcx>,
    ) -> InterpResult<'tcx, ()>

Expand description

Shuffle elements in `values` across lanes using the corresponding index in `indices`, and store the results in `dest`.

This helper is shared by both the 32-bit-lane and 64-bit-lane AVX permute-by-index intrinsics. The element type is taken from `values` and `dest`, while the index lanes are interpreted at their full width (`i32` or `i64`, depending on the intrinsic).

For a vector with `N` lanes, only the low `log2(N)` bits of each index are used. Equivalently, lane `i` of the result is copied from `values[indices[i] & (N - 1)]`.

https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_permutevar8x32_epi32 https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_permutevar8x32_ps https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_permutexvar_epi32 https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_permutexvar_epi64