From: Jian Cai <caij2...@gmail.com>

[ Upstream commit 44069737ac9625a0f02f0f7f5ab96aae4cd819bc ]

Clang's integrated assembler complains "invalid reassignment of
non-absolute variable 'var_ddq_add'" while assembling
arch/x86/crypto/aes_ctrby8_avx-x86_64.S. It was because var_ddq_add was
reassigned with non-absolute values several times, which IAS did not
support. We can avoid the reassignment by replacing the uses of
var_ddq_add with its definitions accordingly to have compatilibility
with IAS.

Link: https://github.com/ClangBuiltLinux/linux/issues/1008
Reported-by: Sedat Dilek <sedat.di...@gmail.com>
Reported-by: Fangrui Song <mask...@google.com>
Tested-by: Sedat Dilek <sedat.di...@gmail.com> # build+boot Linux v5.7.5; clang 
v11.0.0-git
Signed-off-by: Jian Cai <caij2...@gmail.com>
Signed-off-by: Herbert Xu <herb...@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S 
b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
index ec437db1fa547..494a3bda84870 100644
--- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
+++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S
@@ -127,10 +127,6 @@ ddq_add_8:
 
 /* generate a unique variable for ddq_add_x */
 
-.macro setddq n
-       var_ddq_add = ddq_add_\n
-.endm
-
 /* generate a unique variable for xmm register */
 .macro setxdata n
        var_xdata = %xmm\n
@@ -140,9 +136,7 @@ ddq_add_8:
 
 .macro club name, id
 .altmacro
-       .if \name == DDQ_DATA
-               setddq %\id
-       .elseif \name == XDATA
+       .if \name == XDATA
                setxdata %\id
        .endif
 .noaltmacro
@@ -165,9 +159,8 @@ ddq_add_8:
 
        .set i, 1
        .rept (by - 1)
-               club DDQ_DATA, i
                club XDATA, i
-               vpaddq  var_ddq_add(%rip), xcounter, var_xdata
+               vpaddq  (ddq_add_1 + 16 * (i - 1))(%rip), xcounter, var_xdata
                vptest  ddq_low_msk(%rip), var_xdata
                jnz 1f
                vpaddq  ddq_high_add_1(%rip), var_xdata, var_xdata
@@ -180,8 +173,7 @@ ddq_add_8:
        vmovdqa 1*16(p_keys), xkeyA
 
        vpxor   xkey0, xdata0, xdata0
-       club DDQ_DATA, by
-       vpaddq  var_ddq_add(%rip), xcounter, xcounter
+       vpaddq  (ddq_add_1 + 16 * (by - 1))(%rip), xcounter, xcounter
        vptest  ddq_low_msk(%rip), xcounter
        jnz     1f
        vpaddq  ddq_high_add_1(%rip), xcounter, xcounter
-- 
2.25.1



Reply via email to