MIPS: Fix build with binutils 2.24.51+
Starting with version 2.24.51.20140728 MIPS binutils complain loudly about mixing soft-float and hard-float object files, leading to this build failure since GCC is invoked with "-msoft-float" on MIPS: {standard input}: Warning: .gnu_attribute 4,3 requires `softfloat' LD arch/mips/alchemy/common/built-in.o mipsel-softfloat-linux-gnu-ld: Warning: arch/mips/alchemy/common/built-in.o uses -msoft-float (set by arch/mips/alchemy/common/prom.o), arch/mips/alchemy/common/sleeper.o uses -mhard-float To fix this, we detect if GAS is new enough to support "-msoft-float" command option, and if it does, we can let GCC pass it to GAS; but then we also need to sprinkle the files which make use of floating point registers with the necessary ".set hardfloat" directives. Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com> Cc: Linux-MIPS <linux-mips@linux-mips.org> Cc: Matthew Fortune <Matthew.Fortune@imgtec.com> Cc: Markos Chandras <Markos.Chandras@imgtec.com> Cc: Maciej W. Rozycki <macro@linux-mips.org> Patchwork: https://patchwork.linux-mips.org/patch/8355/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:

committed by
Ralf Baechle

parent
491a48aa52
commit
842dfc11ea
@@ -19,8 +19,12 @@
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/regdef.h>
|
||||
|
||||
/* preprocessor replaces the fp in ".set fp=64" with $30 otherwise */
|
||||
#undef fp
|
||||
|
||||
.macro EX insn, reg, src
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
.set nomacro
|
||||
.ex\@: \insn \reg, \src
|
||||
.set pop
|
||||
@@ -33,12 +37,17 @@
|
||||
.set arch=r4000
|
||||
|
||||
LEAF(_save_fp_context)
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
cfc1 t1, fcr31
|
||||
.set pop
|
||||
|
||||
#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2)
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
#ifdef CONFIG_CPU_MIPS32_R2
|
||||
.set mips64r2
|
||||
.set mips32r2
|
||||
.set fp=64
|
||||
mfc0 t0, CP0_STATUS
|
||||
sll t0, t0, 5
|
||||
bgez t0, 1f # skip storing odd if FR=0
|
||||
@@ -64,6 +73,8 @@ LEAF(_save_fp_context)
|
||||
1: .set pop
|
||||
#endif
|
||||
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
/* Store the 16 even double precision registers */
|
||||
EX sdc1 $f0, SC_FPREGS+0(a0)
|
||||
EX sdc1 $f2, SC_FPREGS+16(a0)
|
||||
@@ -84,11 +95,14 @@ LEAF(_save_fp_context)
|
||||
EX sw t1, SC_FPC_CSR(a0)
|
||||
jr ra
|
||||
li v0, 0 # success
|
||||
.set pop
|
||||
END(_save_fp_context)
|
||||
|
||||
#ifdef CONFIG_MIPS32_COMPAT
|
||||
/* Save 32-bit process floating point context */
|
||||
LEAF(_save_fp_context32)
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
cfc1 t1, fcr31
|
||||
|
||||
mfc0 t0, CP0_STATUS
|
||||
@@ -134,6 +148,7 @@ LEAF(_save_fp_context32)
|
||||
EX sw t1, SC32_FPC_CSR(a0)
|
||||
cfc1 t0, $0 # implementation/version
|
||||
EX sw t0, SC32_FPC_EIR(a0)
|
||||
.set pop
|
||||
|
||||
jr ra
|
||||
li v0, 0 # success
|
||||
@@ -150,8 +165,10 @@ LEAF(_restore_fp_context)
|
||||
|
||||
#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2)
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
#ifdef CONFIG_CPU_MIPS32_R2
|
||||
.set mips64r2
|
||||
.set mips32r2
|
||||
.set fp=64
|
||||
mfc0 t0, CP0_STATUS
|
||||
sll t0, t0, 5
|
||||
bgez t0, 1f # skip loading odd if FR=0
|
||||
@@ -175,6 +192,8 @@ LEAF(_restore_fp_context)
|
||||
EX ldc1 $f31, SC_FPREGS+248(a0)
|
||||
1: .set pop
|
||||
#endif
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
EX ldc1 $f0, SC_FPREGS+0(a0)
|
||||
EX ldc1 $f2, SC_FPREGS+16(a0)
|
||||
EX ldc1 $f4, SC_FPREGS+32(a0)
|
||||
@@ -192,6 +211,7 @@ LEAF(_restore_fp_context)
|
||||
EX ldc1 $f28, SC_FPREGS+224(a0)
|
||||
EX ldc1 $f30, SC_FPREGS+240(a0)
|
||||
ctc1 t1, fcr31
|
||||
.set pop
|
||||
jr ra
|
||||
li v0, 0 # success
|
||||
END(_restore_fp_context)
|
||||
@@ -199,6 +219,8 @@ LEAF(_restore_fp_context)
|
||||
#ifdef CONFIG_MIPS32_COMPAT
|
||||
LEAF(_restore_fp_context32)
|
||||
/* Restore an o32 sigcontext. */
|
||||
.set push
|
||||
SET_HARDFLOAT
|
||||
EX lw t1, SC32_FPC_CSR(a0)
|
||||
|
||||
mfc0 t0, CP0_STATUS
|
||||
@@ -242,6 +264,7 @@ LEAF(_restore_fp_context32)
|
||||
ctc1 t1, fcr31
|
||||
jr ra
|
||||
li v0, 0 # success
|
||||
.set pop
|
||||
END(_restore_fp_context32)
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user