master: Stop touching avx512 registers in c-call

stassats via Sbcl-commits <[email protected]>
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  856ed453f33dbb1f218218f5181a2ae3d57acf41 (commit)
      from  d21baee18414dab4cb86d28dbcb8672f7a177c95 (commit)

- Log -----------------------------------------------------------------
commit 856ed453f33dbb1f218218f5181a2ae3d57acf41
Author: Stas Boukarev <[email protected]>
Date:   Tue Aug 25 17:21:29 2026 +0300

    Stop touching avx512 registers in c-call
    
    Which forces avx512 instructions to be used.
    This breaks avx512 spilling around foreign calls.
    
    Fixes lp#2164994
---
 src/compiler/x86-64/c-call.lisp | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/compiler/x86-64/c-call.lisp b/src/compiler/x86-64/c-call.lisp
index 1ed96f6cd..4302bc766 100644
--- a/src/compiler/x86-64/c-call.lisp
+++ b/src/compiler/x86-64/c-call.lisp
@@ -672,22 +672,22 @@ Floats are passed in integer registers."
                        ,(car (push (make-symbol varname) vars))))
 
        ;; AVX-512 high ZMM registers, ZMM16-31.
-       #+sb-simd-pack-512
-       (loop for zmm from 16 below 32
-             for varname = (format nil "ZMM~D" zmm)
-             collect `(:temporary
-                       (:sc single-avx512-reg :offset ,zmm
-                             :from :eval :to :result)
-                       ,(car (push (make-symbol varname) vars))))
+       #+(and sb-simd-pack-512 nil)
+       (append
+        (loop for zmm from 16 below 32
+              for varname = (format nil "ZMM~D" zmm)
+              collect `(:temporary
+                        (:sc single-avx512-reg :offset ,zmm
+                         :from :eval :to :result)
+                        ,(car (push (make-symbol varname) vars))))
 
-       ;; AVX-512 opmask registers K1-K7.
-       ;; K0 is not allocatable so not listed here
-       #+sb-simd-pack-512
-       (loop for mask from 1 to 7
-             for varname = (format nil "MASK~D" mask)
-             collect `(:temporary
-                       (:sc mask-reg :offset ,mask :from :eval :to :result)
-                       ,(car (push (make-symbol varname) vars))))
+        ;; AVX-512 opmask registers K1-K7.
+        ;; K0 is not allocatable so not listed here
+        (loop for mask from 1 to 7
+              for varname = (format nil "MASK~D" mask)
+              collect `(:temporary
+                        (:sc mask-reg :offset ,mask :from :eval :to :result)
+                        ,(car (push (make-symbol varname) vars)))))
 
        `((:ignore ,@vars))))))
 

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


hooks/post-receive
-- 
SBCL
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.