master: add vpsadbw, vpalignr and vpsubusb to sb-simd

stassats via Sbcl-commits <[email protected]> Mon, 20 Jul 2026 15:00:44 +0000
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  c315c378e4bf72f398448acc8054c806c132d31b (commit)
      from  a7e50f3c4a2a6048bf042c0aad14af3843e4a810 (commit)

- Log -----------------------------------------------------------------
commit c315c378e4bf72f398448acc8054c806c132d31b
Author: arthur <[email protected]>
Date:   Mon Jul 20 08:21:14 2026 +0200

    add vpsadbw, vpalignr and vpsubusb to sb-simd
---
 contrib/sb-simd/code/instruction-sets/avx2.lisp | 9 ++++++++-
 contrib/sb-simd/code/packages.lisp              | 5 +++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/contrib/sb-simd/code/instruction-sets/avx2.lisp b/contrib/sb-simd/code/instruction-sets/avx2.lisp
index 7af8bdb47..cce26caa3 100644
--- a/contrib/sb-simd/code/instruction-sets/avx2.lisp
+++ b/contrib/sb-simd/code/instruction-sets/avx2.lisp
@@ -96,6 +96,7 @@
    (two-arg-u8.32-min     #:vpminub       (u8.32) (u8.32 u8.32)   :cost 2 :associative t)
    (two-arg-u8.32+        #:vpaddb        (u8.32) (u8.32 u8.32)   :cost 2 :associative t)
    (two-arg-u8.32-        #:vpsubb        (u8.32) (u8.32 u8.32)   :cost 2)
+   (two-arg-u8.32-sat-    #:vpsubusb      (u8.32) (u8.32 u8.32)   :cost 2)
    (two-arg-u8.32=        #:vpcmpeqb      (u8.32) (u8.32 u8.32)   :cost 1 :associative t)
    (two-arg-u8.32/=       nil             (u8.32) (u8.32 u8.32)   :cost 2 :associative t :encoding :fake-vop)
    (two-arg-u8.32>~       #:vpcmpgtb      (u8.32) (u8.32 u8.32)   :cost 1)
@@ -110,7 +111,11 @@
    (u8.32-movemask        #:vpmovmskb     (u32)   (u8.32)         :cost 1)
    (u8.32-shuffle         #:vpshufb       (u8.32) (u8.32 u8.32)   :cost 1)
    (u8.32-insert-u8.16    #:vinserti128   (u8.32) (u8.32 u8.16 imm8) :cost 1)
-   (u8.16-from-u8.32      #:vextracti128  (u8.16) (u8.32 imm1) :cost 1)
+   (u8.16-from-u8.32      #:vextracti128  (u8.16) (u8.32 imm1)       :cost 1)
+   (u8.16-sad             #:vpsadbw       (u64.4) (u8.16 u8.16)      :cost 1)
+   (u8.32-sad             #:vpsadbw       (u64.4) (u8.32 u8.32)      :cost 1)
+   (u8.16-alignr          #:vpalignr      (u8.16) (u8.16 u8.16 imm8) :cost 1)
+   (u8.32-alignr          #:vpalignr      (u8.32) (u8.32 u8.32 imm8) :cost 1)
    (u8.32-permute128      #:vperm2i128    (u8.32) (u8.32 u8.32 imm8) :cost 1)
    ;; u16.16
    (make-u16.16           nil            (u16.16) (u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16 u16) :cost 1 :encoding :fake-vop)
@@ -241,6 +246,8 @@
    (s8.32-sign            #:vpsignb      (s8.32) (s8.32 s8.32)    :cost 1)
    (s8.32-broadcastvec    #:vpbroadcastb (s8.32) (s8.32)          :cost 1)
    (s8.16-from-s8.32      #:vextracti128 (s8.16) (s8.32 imm1)     :cost 1)
+   (s8.16-sad             #:vpsadbw      (u64.4) (s8.16 s8.16)      :cost 1)
+   (s8.32-sad             #:vpsadbw      (u64.4) (s8.32 s8.32)      :cost 1)
    (s8.32-insert-s8.16    #:vinserti128  (s8.32) (s8.32 s8.16 imm1) :cost 1)
    (s8.32-permute128      #:vperm2i128   (s8.32) (s8.32 s8.32 imm8) :cost 1)
    ;; s16.16
diff --git a/contrib/sb-simd/code/packages.lisp b/contrib/sb-simd/code/packages.lisp
index a0207f394..b82262aa6 100644
--- a/contrib/sb-simd/code/packages.lisp
+++ b/contrib/sb-simd/code/packages.lisp
@@ -1764,11 +1764,13 @@
     #8#
     #9=
     (:export
+     #:two-arg-u8.32-sat-
      ;; f32.8
      ;; f64.4
      #:f64.4-reverse
      #:f64.4-permute4x64
      ;; u8.16
+     #:u8.16-alignr
      ;; u16.8
      ;; u32.4
      #:u32.4-shiftl
@@ -1779,6 +1781,7 @@
      ;; s8.16
      ;; s16.8
      ;; s32.4
+     #:s8.16-sad
      #:s32.4-shiftl
      #:s32.4-shiftr
      ;; s64.2
@@ -1802,6 +1805,8 @@
      #:u8.32>=
      #:u8.32<=
      #:u8.32-avg
+     #:u8.32-sad
+     #:u8.32-alignr
      #:u8.32-packus
      #:u8.32-unpackhi
      #:u8.32-unpacklo

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL