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>
		
	
			
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Definitions for the FPU register names
 | 
						|
 *
 | 
						|
 * This file is subject to the terms and conditions of the GNU General Public
 | 
						|
 * License.  See the file "COPYING" in the main directory of this archive
 | 
						|
 * for more details.
 | 
						|
 *
 | 
						|
 * Copyright (C) 1995, 1999 Ralf Baechle
 | 
						|
 * Copyright (C) 1985 MIPS Computer Systems, Inc.
 | 
						|
 * Copyright (C) 1990 - 1992, 1999 Silicon Graphics, Inc.
 | 
						|
 */
 | 
						|
#ifndef _ASM_FPREGDEF_H
 | 
						|
#define _ASM_FPREGDEF_H
 | 
						|
 | 
						|
#include <asm/sgidefs.h>
 | 
						|
 | 
						|
/*
 | 
						|
 * starting with binutils 2.24.51.20140729, MIPS binutils warn about mixing
 | 
						|
 * hardfloat and softfloat object files.  The kernel build uses soft-float by
 | 
						|
 * default, so we also need to pass -msoft-float along to GAS if it supports it.
 | 
						|
 * But this in turn causes assembler errors in files which access hardfloat
 | 
						|
 * registers.  We detect if GAS supports "-msoft-float" in the Makefile and
 | 
						|
 * explicitly put ".set hardfloat" where floating point registers are touched.
 | 
						|
 */
 | 
						|
#ifdef GAS_HAS_SET_HARDFLOAT
 | 
						|
#define SET_HARDFLOAT .set hardfloat
 | 
						|
#else
 | 
						|
#define SET_HARDFLOAT
 | 
						|
#endif
 | 
						|
 | 
						|
#if _MIPS_SIM == _MIPS_SIM_ABI32
 | 
						|
 | 
						|
/*
 | 
						|
 * These definitions only cover the R3000-ish 16/32 register model.
 | 
						|
 * But we're trying to be R3000 friendly anyway ...
 | 
						|
 */
 | 
						|
#define fv0	$f0	 /* return value */
 | 
						|
#define fv0f	$f1
 | 
						|
#define fv1	$f2
 | 
						|
#define fv1f	$f3
 | 
						|
#define fa0	$f12	 /* argument registers */
 | 
						|
#define fa0f	$f13
 | 
						|
#define fa1	$f14
 | 
						|
#define fa1f	$f15
 | 
						|
#define ft0	$f4	 /* caller saved */
 | 
						|
#define ft0f	$f5
 | 
						|
#define ft1	$f6
 | 
						|
#define ft1f	$f7
 | 
						|
#define ft2	$f8
 | 
						|
#define ft2f	$f9
 | 
						|
#define ft3	$f10
 | 
						|
#define ft3f	$f11
 | 
						|
#define ft4	$f16
 | 
						|
#define ft4f	$f17
 | 
						|
#define ft5	$f18
 | 
						|
#define ft5f	$f19
 | 
						|
#define fs0	$f20	 /* callee saved */
 | 
						|
#define fs0f	$f21
 | 
						|
#define fs1	$f22
 | 
						|
#define fs1f	$f23
 | 
						|
#define fs2	$f24
 | 
						|
#define fs2f	$f25
 | 
						|
#define fs3	$f26
 | 
						|
#define fs3f	$f27
 | 
						|
#define fs4	$f28
 | 
						|
#define fs4f	$f29
 | 
						|
#define fs5	$f30
 | 
						|
#define fs5f	$f31
 | 
						|
 | 
						|
#define fcr31	$31	 /* FPU status register */
 | 
						|
 | 
						|
#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
 | 
						|
 | 
						|
#if _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32
 | 
						|
 | 
						|
#define fv0	$f0	/* return value */
 | 
						|
#define fv1	$f2
 | 
						|
#define fa0	$f12	/* argument registers */
 | 
						|
#define fa1	$f13
 | 
						|
#define fa2	$f14
 | 
						|
#define fa3	$f15
 | 
						|
#define fa4	$f16
 | 
						|
#define fa5	$f17
 | 
						|
#define fa6	$f18
 | 
						|
#define fa7	$f19
 | 
						|
#define ft0	$f4	/* caller saved */
 | 
						|
#define ft1	$f5
 | 
						|
#define ft2	$f6
 | 
						|
#define ft3	$f7
 | 
						|
#define ft4	$f8
 | 
						|
#define ft5	$f9
 | 
						|
#define ft6	$f10
 | 
						|
#define ft7	$f11
 | 
						|
#define ft8	$f20
 | 
						|
#define ft9	$f21
 | 
						|
#define ft10	$f22
 | 
						|
#define ft11	$f23
 | 
						|
#define ft12	$f1
 | 
						|
#define ft13	$f3
 | 
						|
#define fs0	$f24	/* callee saved */
 | 
						|
#define fs1	$f25
 | 
						|
#define fs2	$f26
 | 
						|
#define fs3	$f27
 | 
						|
#define fs4	$f28
 | 
						|
#define fs5	$f29
 | 
						|
#define fs6	$f30
 | 
						|
#define fs7	$f31
 | 
						|
 | 
						|
#define fcr31	$31
 | 
						|
 | 
						|
#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32 */
 | 
						|
 | 
						|
#endif /* _ASM_FPREGDEF_H */
 |