diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2024-05-11 22:11:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-11 22:11:53 +0200 |
| commit | 893ba536bc929899fb4662ba24d9ed8f82a643cd (patch) | |
| tree | 8346e0a839c9fd6884c9a7dcc35bfc3444af3c6e /src | |
| parent | 7b50189dce74cf5b86cd928161138a2bd6c9305f (diff) | |
| parent | 4a4535a57cef0182d516888f1abb5d4a9ec84fdc (diff) | |
| download | rust-893ba536bc929899fb4662ba24d9ed8f82a643cd.tar.gz rust-893ba536bc929899fb4662ba24d9ed8f82a643cd.zip | |
Merge pull request #1491 from folkertdev/add-llvm-avx2-permd
add `llvm.x86.avx2.permd` intrinsic
Diffstat (limited to 'src')
| -rw-r--r-- | src/intrinsics/llvm_x86.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/intrinsics/llvm_x86.rs b/src/intrinsics/llvm_x86.rs index 71e06c73a37..75e9e16db55 100644 --- a/src/intrinsics/llvm_x86.rs +++ b/src/intrinsics/llvm_x86.rs @@ -374,6 +374,21 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>( } } } + "llvm.x86.avx2.permd" => { + // https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_permutevar8x32_epi32 + intrinsic_args!(fx, args => (a, idx); intrinsic); + + for j in 0..=7 { + let index = idx.value_typed_lane(fx, fx.tcx.types.u32, j).load_scalar(fx); + let index = fx.bcx.ins().uextend(fx.pointer_type, index); + let value = a.value_lane_dyn(fx, index).load_scalar(fx); + ret.place_typed_lane(fx, fx.tcx.types.u32, j).to_ptr().store( + fx, + value, + MemFlags::trusted(), + ); + } + } "llvm.x86.avx2.vperm2i128" | "llvm.x86.avx.vperm2f128.ps.256" | "llvm.x86.avx.vperm2f128.pd.256" => { |
