| From 517c298ecd170415825ddc93c993e506cb6c6205 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 22 Jun 2020 16:24:33 -0700 |
| Subject: crypto: aesni - add compatibility with IAS |
| |
| From: Jian Cai <caij2003@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.dilek@gmail.com> |
| Reported-by: Fangrui Song <maskray@google.com> |
| Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # build+boot Linux v5.7.5; clang v11.0.0-git |
| Signed-off-by: Jian Cai <caij2003@gmail.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@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 |
| |