diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2023-06-23 10:37:57 +0000 |
|---|---|---|
| committer | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2023-06-23 10:37:57 +0000 |
| commit | aee30c5ddcf87a09c894c8ac318a5f154530e928 (patch) | |
| tree | 5255823d70c0e9c71d975c889793f74e59704bb4 | |
| parent | 92a40938506b3e57a231647ee6527218b2058e60 (diff) | |
| download | rust-aee30c5ddcf87a09c894c8ac318a5f154530e928.tar.gz rust-aee30c5ddcf87a09c894c8ac318a5f154530e928.zip | |
Implement _mm_abs_epi*
| -rw-r--r-- | src/intrinsics/llvm_x86.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/intrinsics/llvm_x86.rs b/src/intrinsics/llvm_x86.rs index 798a8440c9d..61dac0cce8b 100644 --- a/src/intrinsics/llvm_x86.rs +++ b/src/intrinsics/llvm_x86.rs @@ -514,6 +514,17 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>( let dest = CPlace::for_ptr(Pointer::new(mem_addr), a.layout()); dest.write_cvalue(fx, a); } + "llvm.x86.ssse3.pabs.b.128" | "llvm.x86.ssse3.pabs.w.128" | "llvm.x86.ssse3.pabs.d.128" => { + let a = match args { + [a] => a, + _ => bug!("wrong number of args for intrinsic {intrinsic}"), + }; + let a = codegen_operand(fx, a); + + simd_for_each_lane(fx, a, ret, &|fx, _lane_ty, _res_lane_ty, lane| { + fx.bcx.ins().iabs(lane) + }); + } "llvm.x86.addcarry.32" | "llvm.x86.addcarry.64" => { intrinsic_args!(fx, args => (c_in, a, b); intrinsic); let c_in = c_in.load_scalar(fx); |
