about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-06-23 10:37:57 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-06-23 10:37:57 +0000
commitaee30c5ddcf87a09c894c8ac318a5f154530e928 (patch)
tree5255823d70c0e9c71d975c889793f74e59704bb4
parent92a40938506b3e57a231647ee6527218b2058e60 (diff)
downloadrust-aee30c5ddcf87a09c894c8ac318a5f154530e928.tar.gz
rust-aee30c5ddcf87a09c894c8ac318a5f154530e928.zip
Implement _mm_abs_epi*
-rw-r--r--src/intrinsics/llvm_x86.rs11
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);