From 3c9dcbed5f8ed6886899bd31a157b4eb820c8711 Mon Sep 17 00:00:00 2001 From: Ari Projansky Date: Wed, 5 Apr 2023 21:24:51 +0000 Subject: [PATCH] sb-simd: Fix sse+xmm0 encoding Check if xmm0 is in use, and if so, back up its contents before assigning to it. --- .../sb-simd/code/define-instruction-vops.lisp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/contrib/sb-simd/code/define-instruction-vops.lisp b/contrib/sb-simd/code/define-instruction-vops.lisp index 03e9ce207..52348c474 100644 --- a/contrib/sb-simd/code/define-instruction-vops.lisp +++ b/contrib/sb-simd/code/define-instruction-vops.lisp @@ -129,17 +129,15 @@ (:result-types ,@result-types) (:generator ,cost - (move xmm0 ,z) - (cond ((location= ,x ,r) - (inst ,mnemonic ,@prefix ,r ,y xmm0 ,@suffix)) - ((or (not (tn-p ,y)) - (not (location= ,y ,r))) - (move ,r ,x) - (inst ,mnemonic ,@prefix ,r ,y xmm0 ,@suffix)) - (t + (cond ((location= ,x xmm0) (move tmp ,x) + (move xmm0 ,z) (inst ,mnemonic ,@prefix tmp ,y xmm0 ,@suffix) - (move ,r tmp)))))))) + (move ,r tmp)) + (t + (move xmm0 ,z) + (move ,r ,x) + (inst ,mnemonic ,@prefix ,r ,y xmm0 ,@suffix)))))))) (:fma (assert mnemonic) (let ((x (first asyms)) -- 2.39.1