mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 06:48:57 +07:00
MIPS: Fix odd fp register warnings with MIPS64r2
Building 32-bit MIPS64r2 kernels produces warnings like the following on certain toolchains (such as GNU assembler 2.24.90, but not GNU assembler 2.28.51) since commit22b8ba765a
("MIPS: Fix MIPS64 FP save/restore on 32-bit kernels"), due to the exposure of fpu_save_16odd from fpu_save_double and fpu_restore_16odd from fpu_restore_double: arch/mips/kernel/r4k_fpu.S:47: Warning: float register should be even, was 1 ... arch/mips/kernel/r4k_fpu.S:59: Warning: float register should be even, was 1 ... This appears to be because .set mips64r2 does not change the FPU ABI to 64-bit when -march=mips64r2 (or e.g. -march=xlp) is provided on the command line on that toolchain, from the default FPU ABI of 32-bit due to the -mabi=32. This makes access to the odd FPU registers invalid. Fix by explicitly changing the FPU ABI with .set fp=64 directives in fpu_save_16odd and fpu_restore_16odd, and moving the undefine of fp up in asmmacro.h so fp doesn't turn into $30. Fixes:22b8ba765a
("MIPS: Fix MIPS64 FP save/restore on 32-bit kernels") Signed-off-by: James Hogan <jhogan@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Paul Burton <paul.burton@imgtec.com> Cc: linux-mips@linux-mips.org Cc: <stable@vger.kernel.org> # 4.0+:22b8ba765a
: MIPS: Fix MIPS64 FP save/restore on 32-bit kernels Cc: <stable@vger.kernel.org> # 4.0+ Patchwork: https://patchwork.linux-mips.org/patch/17656/
This commit is contained in:
parent
fe1a5cbc78
commit
c7fd89a640
@ -19,6 +19,9 @@
|
|||||||
#include <asm/asmmacro-64.h>
|
#include <asm/asmmacro-64.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* preprocessor replaces the fp in ".set fp=64" with $30 otherwise */
|
||||||
|
#undef fp
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper macros for generating raw instruction encodings.
|
* Helper macros for generating raw instruction encodings.
|
||||||
*/
|
*/
|
||||||
@ -105,6 +108,7 @@
|
|||||||
.macro fpu_save_16odd thread
|
.macro fpu_save_16odd thread
|
||||||
.set push
|
.set push
|
||||||
.set mips64r2
|
.set mips64r2
|
||||||
|
.set fp=64
|
||||||
SET_HARDFLOAT
|
SET_HARDFLOAT
|
||||||
sdc1 $f1, THREAD_FPR1(\thread)
|
sdc1 $f1, THREAD_FPR1(\thread)
|
||||||
sdc1 $f3, THREAD_FPR3(\thread)
|
sdc1 $f3, THREAD_FPR3(\thread)
|
||||||
@ -163,6 +167,7 @@
|
|||||||
.macro fpu_restore_16odd thread
|
.macro fpu_restore_16odd thread
|
||||||
.set push
|
.set push
|
||||||
.set mips64r2
|
.set mips64r2
|
||||||
|
.set fp=64
|
||||||
SET_HARDFLOAT
|
SET_HARDFLOAT
|
||||||
ldc1 $f1, THREAD_FPR1(\thread)
|
ldc1 $f1, THREAD_FPR1(\thread)
|
||||||
ldc1 $f3, THREAD_FPR3(\thread)
|
ldc1 $f3, THREAD_FPR3(\thread)
|
||||||
@ -234,9 +239,6 @@
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
#ifdef TOOLCHAIN_SUPPORTS_MSA
|
#ifdef TOOLCHAIN_SUPPORTS_MSA
|
||||||
/* preprocessor replaces the fp in ".set fp=64" with $30 otherwise */
|
|
||||||
#undef fp
|
|
||||||
|
|
||||||
.macro _cfcmsa rd, cs
|
.macro _cfcmsa rd, cs
|
||||||
.set push
|
.set push
|
||||||
.set mips32r2
|
.set mips32r2
|
||||||
|
Loading…
Reference in New Issue
Block a user