Commit dcc21c4c by Paul Brook Committed by Paul Brook

m68k.md: Add Coldfire FPU support.

2006-01-22  Paul Brook  <paul@codesourcery.com>
	Peter Barada  <peter@the-baradas.com>

	* config/m68k/m68k.md: Add Coldfire FPU support.
	Define FP mode macro and associated attributes.
	Use it for float mode patterns.
	* config/m68k/linux.h (FUNCTION_VALUE): Use m68k_function_value.
	(LIBCALL_VALUE): Use m68k_libcall_value.
	* config/m68k/m68k-protos.h (m68k_libcall_value): Add prototype.
	(m68k_function_value): Ditto.
	(emit_move_sequence): Ditto.
	* config/m68k/m68kemb.h (LIBCALL_VALUE): Use m68k_libcall_value.
	* config/m68k/m68k-none.h (ASM_SPEC): Add mcfv4e.
	* config/m68k/t-m68kelf (MULTILIB_OPTIONS): Add mcfv4e.
	(MULTILIB_EXCEPTIONS): Ditto.
	* config/m68k/m68k.opt: Add mcfv4e.
	* config/m68k/m68k.c (m68k_handle_option): Handle OPT_mcfv4e.
	(m68k_compute_frame_layout): Include space for ColdFire FPU regs.
	(m68k_output_function_prologue): Save ColdFire FPU registers.
	(m68k_output_function_epilogue): Restore ColdFire FPU registers.
	(force_mode, fp_reg_operand, emit_move_sequence): New functions.
	(m68k_regno_mode_ok): Don't allow types larget than 8 bytes in
	ColdFire FPU registers.
	(m68k_libcall_value, m68k_function_value): New functions.
	* config/m68k/netbsd-elf.h (FUNCTION_VALUE): Use m68k_function_value.
	(LIBCALL_VALUE): Use m68k_libcall_value.
	* config/m68k/m68k.h (TARGET_CPU_CPP_BUILTINS): Define __mcfv4e__.
	(MASK_COLDFIRE): Add MASK_CFV4E.
	(TARGET_COLDFIRE_FPU, TARGET_HARD_FLOAT, TARGET_FP_REG_SIZE): New.
	(MODES_TIEABLE_P): Use TARGET_HARD_FLOAT.
	(REG_CLASS_FROM_LETTER, PREFERRED_RELOAD_CLASS): Ditto.
	(GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS): Define.
	(GO_IF_LEGITIMATE_ADDRESS): Use it.
	(LEGITIMIZE_ADDRESS): Handle ColdFire FPU addresses.
	* doc/invoke.tex: Document -mcfv4e on m68k.


Co-Authored-By: Peter Barada <peter@the-baradas.com>

From-SVN: r110091
parent d54d5437
2006-01-22 Paul Brook <paul@codesourcery.com>
Peter Barada <peter@the-baradas.com>
* config/m68k/m68k.md: Add Coldfire FPU support.
Define FP mode macro and associated attributes.
Use it for float mode patterns.
* config/m68k/linux.h (FUNCTION_VALUE): Use m68k_function_value.
(LIBCALL_VALUE): Use m68k_libcall_value.
* config/m68k/m68k-protos.h (m68k_libcall_value): Add prototype.
(m68k_function_value): Ditto.
(emit_move_sequence): Ditto.
* config/m68k/m68kemb.h (LIBCALL_VALUE): Use m68k_libcall_value.
* config/m68k/m68k-none.h (ASM_SPEC): Add mcfv4e.
* config/m68k/t-m68kelf (MULTILIB_OPTIONS): Add mcfv4e.
(MULTILIB_EXCEPTIONS): Ditto.
* config/m68k/m68k.opt: Add mcfv4e.
* config/m68k/m68k.c (m68k_handle_option): Handle OPT_mcfv4e.
(m68k_compute_frame_layout): Include space for ColdFire FPU regs.
(m68k_output_function_prologue): Save ColdFire FPU registers.
(m68k_output_function_epilogue): Restore ColdFire FPU registers.
(force_mode, fp_reg_operand, emit_move_sequence): New functions.
(m68k_regno_mode_ok): Don't allow types larget than 8 bytes in
ColdFire FPU registers.
(m68k_libcall_value, m68k_function_value): New functions.
* config/m68k/netbsd-elf.h (FUNCTION_VALUE): Use m68k_function_value.
(LIBCALL_VALUE): Use m68k_libcall_value.
* config/m68k/m68k.h (TARGET_CPU_CPP_BUILTINS): Define __mcfv4e__.
(MASK_COLDFIRE): Add MASK_CFV4E.
(TARGET_COLDFIRE_FPU, TARGET_HARD_FLOAT, TARGET_FP_REG_SIZE): New.
(MODES_TIEABLE_P): Use TARGET_HARD_FLOAT.
(REG_CLASS_FROM_LETTER, PREFERRED_RELOAD_CLASS): Ditto.
(GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS): Define.
(GO_IF_LEGITIMATE_ADDRESS): Use it.
(LEGITIMIZE_ADDRESS): Handle ColdFire FPU addresses.
* doc/invoke.tex: Document -mcfv4e on m68k.
2006-01-22 Ranjit Mathew <rmathew@gcc.gnu.org> 2006-01-22 Ranjit Mathew <rmathew@gcc.gnu.org>
* doc/contribute.texi: Change CVS to SVN and update the corresponding * doc/contribute.texi: Change CVS to SVN and update the corresponding
......
/* Definitions for Motorola 68k running Linux-based GNU systems with /* Definitions for Motorola 68k running Linux-based GNU systems with
ELF format. ELF format.
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -224,11 +224,7 @@ Boston, MA 02110-1301, USA. */ ...@@ -224,11 +224,7 @@ Boston, MA 02110-1301, USA. */
#undef FUNCTION_VALUE #undef FUNCTION_VALUE
#define FUNCTION_VALUE(VALTYPE, FUNC) \ #define FUNCTION_VALUE(VALTYPE, FUNC) \
(TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ m68k_function_value (VALTYPE, FUNC)
? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \
: (POINTER_TYPE_P (VALTYPE) \
? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \
: gen_rtx_REG (TYPE_MODE (VALTYPE), 0)))
/* For compatibility with the large body of existing code which does /* For compatibility with the large body of existing code which does
not always properly declare external functions returning pointer not always properly declare external functions returning pointer
...@@ -251,10 +247,7 @@ do { \ ...@@ -251,10 +247,7 @@ do { \
#undef LIBCALL_VALUE #undef LIBCALL_VALUE
#define LIBCALL_VALUE(MODE) \ #define LIBCALL_VALUE(MODE) \
((((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode) \ m68k_libcall_value (MODE)
&& TARGET_68881) \
? gen_rtx_REG ((MODE), 16) \
: gen_rtx_REG ((MODE), 0))
/* For m68k SVR4, structures are returned using the reentrant /* For m68k SVR4, structures are returned using the reentrant
technique. */ technique. */
......
/* Definitions of target machine for GNU compiler. "naked" 68020. /* Definitions of target machine for GNU compiler. "naked" 68020.
Copyright (C) 1994, 1996, 2003 Free Software Foundation, Inc. Copyright (C) 1994, 1996, 2003, 2006 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -81,7 +81,7 @@ Unrecognized value in TARGET_CPU_DEFAULT. ...@@ -81,7 +81,7 @@ Unrecognized value in TARGET_CPU_DEFAULT.
#undef ASM_SPEC #undef ASM_SPEC
#define ASM_SPEC "\ #define ASM_SPEC "\
%{m68851}%{mno-68851}%{m68881}%{mno-68881}%{msoft-float:-mno-68881} %{m68000}%{m68302}%{mc68000}%{m68010}%{m68020}%{mc68020}%{m68030}%{m68040}%{m68020-40:-mc68040} %{m68020-60:-mc68040} %{m68060}%{mcpu32}%{m68332}%{m5200}%{m5206e}%{m528x}%{m5307}%{m5407}%{!mc68000:%{!m68000:%{!m68302:%{!m68010:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68020-40:%{!m68020-60:%{!m68060:%{!mcpu32:%{!m68332:%{!m5200:%{!m5206e:%{!m528x:%{!m5307:%{!m5407:%(asm_cpu_default)}}}}}}}}}}}}}}}}}} \ %{m68851}%{mno-68851}%{m68881}%{mno-68881}%{msoft-float:-mno-68881} %{m68000}%{m68302}%{mc68000}%{m68010}%{m68020}%{mc68020}%{m68030}%{m68040}%{m68020-40:-mc68040} %{m68020-60:-mc68040} %{m68060}%{mcpu32}%{m68332}%{m5200}%{m5206e}%{m528x}%{m5307}%{m5407}%{mcfv4e}%{!mc68000:%{!m68000:%{!m68302:%{!m68010:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68020-40:%{!m68020-60:%{!m68060:%{!mcpu32:%{!m68332:%{!m5200:%{!m5206e:%{!m528x:%{!m5307:%{!m5407:%{!mcfv4e:%(asm_cpu_default)}}}}}}}}}}}}}}}}}}} \
%{fPIC:--pcrel} %{fpic:--pcrel} %{msep-data:--pcrel} %{mid-shared-library:--pcrel} \ %{fPIC:--pcrel} %{fpic:--pcrel} %{msep-data:--pcrel} %{mid-shared-library:--pcrel} \
" "
......
/* Definitions of target machine for GNU compiler. Sun 68000/68020 version. /* Definitions of target machine for GNU compiler. Sun 68000/68020 version.
Copyright (C) 2000, 2002, 2004, 2005 Free Software Foundation, Inc. Copyright (C) 2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -51,6 +51,9 @@ extern void print_operand (FILE *, rtx, int); ...@@ -51,6 +51,9 @@ extern void print_operand (FILE *, rtx, int);
extern void notice_update_cc (rtx, rtx); extern void notice_update_cc (rtx, rtx);
extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx); extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode); extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode);
extern rtx m68k_libcall_value (enum machine_mode);
extern rtx m68k_function_value (tree, tree);
extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
#endif /* RTX_CODE */ #endif /* RTX_CODE */
......
/* Definitions of target machine for GCC for Motorola 680x0/ColdFire. /* Definitions of target machine for GCC for Motorola 680x0/ColdFire.
Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -90,6 +90,10 @@ Boston, MA 02110-1301, USA. */ ...@@ -90,6 +90,10 @@ Boston, MA 02110-1301, USA. */
builtin_define ("__mcf5400__"); \ builtin_define ("__mcf5400__"); \
builtin_define ("__mcf5407__"); \ builtin_define ("__mcf5407__"); \
} \ } \
if (TARGET_CFV4E) \
{ \
builtin_define ("__mcfv4e__"); \
} \
if (TARGET_CF_HWDIV) \ if (TARGET_CF_HWDIV) \
builtin_define ("__mcfhwdiv__"); \ builtin_define ("__mcfhwdiv__"); \
builtin_assert ("cpu=m68k"); \ builtin_assert ("cpu=m68k"); \
...@@ -112,9 +116,17 @@ Boston, MA 02110-1301, USA. */ ...@@ -112,9 +116,17 @@ Boston, MA 02110-1301, USA. */
#define TARGET_CPU32 (TARGET_68020 && !TARGET_BITFIELD) #define TARGET_CPU32 (TARGET_68020 && !TARGET_BITFIELD)
/* Is the target a ColdFire? */ /* Is the target a ColdFire? */
#define MASK_COLDFIRE (MASK_5200 | MASK_528x | MASK_CFV3 | MASK_CFV4) #define MASK_COLDFIRE \
(MASK_5200 | MASK_528x | MASK_CFV3 | MASK_CFV4 | MASK_CFV4E)
#define TARGET_COLDFIRE ((target_flags & MASK_COLDFIRE) != 0) #define TARGET_COLDFIRE ((target_flags & MASK_COLDFIRE) != 0)
#define TARGET_COLDFIRE_FPU TARGET_CFV4E
#define TARGET_HARD_FLOAT (TARGET_68881 || TARGET_COLDFIRE_FPU)
/* Size (in bytes) of FPU registers. */
#define TARGET_FP_REG_SIZE (TARGET_COLDFIRE ? 8 : 12)
#define OVERRIDE_OPTIONS override_options() #define OVERRIDE_OPTIONS override_options()
/* These are meant to be redefined in the host dependent files */ /* These are meant to be redefined in the host dependent files */
...@@ -229,7 +241,7 @@ Boston, MA 02110-1301, USA. */ ...@@ -229,7 +241,7 @@ Boston, MA 02110-1301, USA. */
{ \ { \
int i; \ int i; \
HARD_REG_SET x; \ HARD_REG_SET x; \
if (! TARGET_68881) \ if (!TARGET_HARD_FLOAT) \
{ \ { \
COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \ COPY_HARD_REG_SET (x, reg_class_contents[(int)FP_REGS]); \
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) \
...@@ -262,7 +274,7 @@ Boston, MA 02110-1301, USA. */ ...@@ -262,7 +274,7 @@ Boston, MA 02110-1301, USA. */
m68k_regno_mode_ok ((REGNO), (MODE)) m68k_regno_mode_ok ((REGNO), (MODE))
#define MODES_TIEABLE_P(MODE1, MODE2) \ #define MODES_TIEABLE_P(MODE1, MODE2) \
(! TARGET_68881 \ (! TARGET_HARD_FLOAT \
|| ((GET_MODE_CLASS (MODE1) == MODE_FLOAT \ || ((GET_MODE_CLASS (MODE1) == MODE_FLOAT \
|| GET_MODE_CLASS (MODE1) == MODE_COMPLEX_FLOAT) \ || GET_MODE_CLASS (MODE1) == MODE_COMPLEX_FLOAT) \
== (GET_MODE_CLASS (MODE2) == MODE_FLOAT \ == (GET_MODE_CLASS (MODE2) == MODE_FLOAT \
...@@ -336,8 +348,8 @@ extern enum reg_class regno_reg_class[]; ...@@ -336,8 +348,8 @@ extern enum reg_class regno_reg_class[];
#define REG_CLASS_FROM_LETTER(C) \ #define REG_CLASS_FROM_LETTER(C) \
((C) == 'a' ? ADDR_REGS : \ ((C) == 'a' ? ADDR_REGS : \
((C) == 'd' ? DATA_REGS : \ ((C) == 'd' ? DATA_REGS : \
((C) == 'f' ? (TARGET_68881 ? FP_REGS : \ ((C) == 'f' ? (TARGET_HARD_FLOAT ? \
NO_REGS) : \ FP_REGS : NO_REGS) : \
NO_REGS))) NO_REGS)))
/* For the m68k, `I' is used for the range 1 to 8 /* For the m68k, `I' is used for the range 1 to 8
...@@ -407,7 +419,7 @@ extern enum reg_class regno_reg_class[]; ...@@ -407,7 +419,7 @@ extern enum reg_class regno_reg_class[];
? DATA_REGS \ ? DATA_REGS \
: (GET_CODE (X) == CONST_DOUBLE \ : (GET_CODE (X) == CONST_DOUBLE \
&& GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \ && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) \
? (TARGET_68881 && (CLASS == FP_REGS || CLASS == DATA_OR_FP_REGS) \ ? (TARGET_HARD_FLOAT && (CLASS == FP_REGS || CLASS == DATA_OR_FP_REGS) \
? FP_REGS : NO_REGS) \ ? FP_REGS : NO_REGS) \
: (TARGET_PCREL \ : (TARGET_PCREL \
&& (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \ && (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST \
...@@ -752,16 +764,34 @@ __transfer_from_trampoline () \ ...@@ -752,16 +764,34 @@ __transfer_from_trampoline () \
&& GET_CODE (XEXP (X, 1)) == CONST_INT \ && GET_CODE (XEXP (X, 1)) == CONST_INT \
&& (INTVAL (XEXP (X, 1)) == 2 \ && (INTVAL (XEXP (X, 1)) == 2 \
|| INTVAL (XEXP (X, 1)) == 4 \ || INTVAL (XEXP (X, 1)) == 4 \
|| (INTVAL (XEXP (X, 1)) == 8 && !TARGET_COLDFIRE)))) || (INTVAL (XEXP (X, 1)) == 8 \
&& (TARGET_CFV4E || !TARGET_COLDFIRE)))))
/* Coldfire FPU only accepts addressing modes 2-5 */
#define GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
{ if (LEGITIMATE_BASE_REG_P (X) \
|| ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \
&& LEGITIMATE_BASE_REG_P (XEXP (X, 0))) \
|| ((GET_CODE (X) == PLUS) && LEGITIMATE_BASE_REG_P (XEXP (X, 0)) \
&& (GET_CODE (XEXP (X, 1)) == CONST_INT) \
&& ((((unsigned) INTVAL (XEXP (X, 1)) + 0x8000) < 0x10000)))) \
goto ADDR;}
/* If pic, we accept INDEX+LABEL, which is what do_tablejump makes. */ /* If pic, we accept INDEX+LABEL, which is what do_tablejump makes. */
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
{ GO_IF_NONINDEXED_ADDRESS (X, ADDR); \ { if (TARGET_COLDFIRE_FPU && (GET_MODE_CLASS (MODE) == MODE_FLOAT)) \
GO_IF_INDEXED_ADDRESS (X, ADDR); \ { \
if (flag_pic && MODE == CASE_VECTOR_MODE && GET_CODE (X) == PLUS \ GO_IF_COLDFIRE_FPU_LEGITIMATE_ADDRESS (MODE, X, ADDR); \
&& LEGITIMATE_INDEX_P (XEXP (X, 0)) \ } \
&& GET_CODE (XEXP (X, 1)) == LABEL_REF) \ else \
goto ADDR; } { \
GO_IF_NONINDEXED_ADDRESS (X, ADDR); \
GO_IF_INDEXED_ADDRESS (X, ADDR); \
if (flag_pic && MODE == CASE_VECTOR_MODE && GET_CODE (X) == PLUS \
&& LEGITIMATE_INDEX_P (XEXP (X, 0)) \
&& GET_CODE (XEXP (X, 1)) == LABEL_REF) \
goto ADDR; \
}}
/* Don't call memory_address_noforce for the address to fetch /* Don't call memory_address_noforce for the address to fetch
the switch offset. This address is ok as it stands (see above), the switch offset. This address is ok as it stands (see above),
...@@ -783,7 +813,9 @@ __transfer_from_trampoline () \ ...@@ -783,7 +813,9 @@ __transfer_from_trampoline () \
{ COPY_ONCE (X); XEXP (X, 1) = force_operand (XEXP (X, 1), 0);} \ { COPY_ONCE (X); XEXP (X, 1) = force_operand (XEXP (X, 1), 0);} \
if (ch && GET_CODE (XEXP (X, 1)) == REG \ if (ch && GET_CODE (XEXP (X, 1)) == REG \
&& GET_CODE (XEXP (X, 0)) == REG) \ && GET_CODE (XEXP (X, 0)) == REG) \
goto WIN; \ { if (TARGET_CFV4E && GET_MODE_CLASS (MODE) == MODE_FLOAT) \
{ COPY_ONCE (X); X = force_operand (X, 0);} \
goto WIN; } \
if (ch) { GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); } \ if (ch) { GO_IF_LEGITIMATE_ADDRESS (MODE, X, WIN); } \
if (GET_CODE (XEXP (X, 0)) == REG \ if (GET_CODE (XEXP (X, 0)) == REG \
|| (GET_CODE (XEXP (X, 0)) == SIGN_EXTEND \ || (GET_CODE (XEXP (X, 0)) == SIGN_EXTEND \
...@@ -794,6 +826,9 @@ __transfer_from_trampoline () \ ...@@ -794,6 +826,9 @@ __transfer_from_trampoline () \
emit_move_insn (temp, val); \ emit_move_insn (temp, val); \
COPY_ONCE (X); \ COPY_ONCE (X); \
XEXP (X, 1) = temp; \ XEXP (X, 1) = temp; \
if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
&& GET_CODE (XEXP (X, 0)) == REG) \
X = force_operand (X, 0); \
goto WIN; } \ goto WIN; } \
else if (GET_CODE (XEXP (X, 1)) == REG \ else if (GET_CODE (XEXP (X, 1)) == REG \
|| (GET_CODE (XEXP (X, 1)) == SIGN_EXTEND \ || (GET_CODE (XEXP (X, 1)) == SIGN_EXTEND \
...@@ -804,6 +839,9 @@ __transfer_from_trampoline () \ ...@@ -804,6 +839,9 @@ __transfer_from_trampoline () \
emit_move_insn (temp, val); \ emit_move_insn (temp, val); \
COPY_ONCE (X); \ COPY_ONCE (X); \
XEXP (X, 0) = temp; \ XEXP (X, 0) = temp; \
if (TARGET_COLDFIRE_FPU && GET_MODE_CLASS (MODE) == MODE_FLOAT \
&& GET_CODE (XEXP (X, 1)) == REG) \
X = force_operand (X, 0); \
goto WIN; }}} goto WIN; }}}
/* On the 68000, only predecrement and postincrement address depend thus /* On the 68000, only predecrement and postincrement address depend thus
......
; Options for the Motorola 68000 port of the compiler. ; Options for the Motorola 68000 port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc. ; Copyright (C) 2005, 2006 Free Software Foundation, Inc.
; ;
; This file is part of GCC. ; This file is part of GCC.
; ;
...@@ -39,6 +39,10 @@ m5407 ...@@ -39,6 +39,10 @@ m5407
Target RejectNegative Mask(CFV4) Target RejectNegative Mask(CFV4)
Generate code for a 5407 Generate code for a 5407
mcfv4e
Target RejectNegative Mask(CFV4E)
Generate code for a ColdFire v4e
m68000 m68000
Target RejectNegative Target RejectNegative
Generate code for a 68000 Generate code for a 68000
......
/* Definitions of target machine for GNU compiler. "embedded" 68XXX. /* Definitions of target machine for GNU compiler. "embedded" 68XXX.
This is meant to be included after m68k.h. This is meant to be included after m68k.h.
Copyright (C) 1994, 1995, 1998, 1999, 2004 Free Software Foundation, Inc. */ Copyright (C) 1994, 1995, 1998, 1999, 2004, 2006
Free Software Foundation, Inc. */
/* Override the SVR4 ABI for this target. */ /* Override the SVR4 ABI for this target. */
...@@ -21,19 +22,12 @@ ...@@ -21,19 +22,12 @@
and unions in registers, which is slightly more efficient. */ and unions in registers, which is slightly more efficient. */
#define DEFAULT_PCC_STRUCT_RETURN 0 #define DEFAULT_PCC_STRUCT_RETURN 0
/* Return floating point values in a fp register. This make fp code a
little bit faster. It also makes -msoft-float code incompatible with
-m68881 code, so people have to be careful not to mix the two. */
#undef FUNCTION_VALUE #undef FUNCTION_VALUE
#define FUNCTION_VALUE(VALTYPE,FUNC) LIBCALL_VALUE (TYPE_MODE (VALTYPE)) #define FUNCTION_VALUE(VALTYPE,FUNC) LIBCALL_VALUE (TYPE_MODE (VALTYPE))
#undef LIBCALL_VALUE #undef LIBCALL_VALUE
#define LIBCALL_VALUE(MODE) \ #define LIBCALL_VALUE(MODE) \
gen_rtx_REG ((MODE), \ m68k_libcall_value (MODE)
((TARGET_68881 \
&& ((MODE) == SFmode || (MODE) == DFmode \
|| (MODE) == XFmode)) \
? 16 : 0))
#undef FUNCTION_VALUE_REGNO_P #undef FUNCTION_VALUE_REGNO_P
#define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (TARGET_68881 && (N) == 16)) #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (TARGET_68881 && (N) == 16))
......
/* Definitions of target machine for GNU compiler, /* Definitions of target machine for GNU compiler,
for m68k (including m68010) NetBSD platforms using the for m68k (including m68010) NetBSD platforms using the
ELF object format. ELF object format.
Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
Contributed by Wasabi Systems. Inc. Contributed by Wasabi Systems. Inc.
This file is derived from <m68k/m68kv4.h>, <m68k/m68kelf.h>, This file is derived from <m68k/m68kv4.h>, <m68k/m68kelf.h>,
...@@ -307,11 +307,7 @@ while (0) ...@@ -307,11 +307,7 @@ while (0)
#undef FUNCTION_VALUE #undef FUNCTION_VALUE
#define FUNCTION_VALUE(VALTYPE, FUNC) \ #define FUNCTION_VALUE(VALTYPE, FUNC) \
(TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ m68k_function_value (VALTYPE, FUNC)
? gen_rtx_REG (TYPE_MODE (VALTYPE), 16) \
: (POINTER_TYPE_P (VALTYPE) \
? gen_rtx_REG (TYPE_MODE (VALTYPE), 8) \
: gen_rtx_REG (TYPE_MODE (VALTYPE), 0)))
/* For compatibility with the large body of existing code which does /* For compatibility with the large body of existing code which does
...@@ -339,10 +335,7 @@ while (0) ...@@ -339,10 +335,7 @@ while (0)
#undef LIBCALL_VALUE #undef LIBCALL_VALUE
#define LIBCALL_VALUE(MODE) \ #define LIBCALL_VALUE(MODE) \
((((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode) \ m68k_libcall_value (MODE)
&& TARGET_68881) \
? gen_rtx_REG (MODE, 16) \
: gen_rtx_REG (MODE, 0))
/* Boundary (in *bits*) on which stack pointer should be aligned. /* Boundary (in *bits*) on which stack pointer should be aligned.
......
...@@ -12,14 +12,15 @@ xfgnulib.c: $(srcdir)/config/m68k/fpgnulib.c ...@@ -12,14 +12,15 @@ xfgnulib.c: $(srcdir)/config/m68k/fpgnulib.c
echo '#define EXTFLOAT' > xfgnulib.c echo '#define EXTFLOAT' > xfgnulib.c
cat $(srcdir)/config/m68k/fpgnulib.c >> xfgnulib.c cat $(srcdir)/config/m68k/fpgnulib.c >> xfgnulib.c
MULTILIB_OPTIONS = m68000/m68020/m5200/m5206e/m528x/m5307/m5407/mcpu32/m68040/m68060 m68881/msoft-float MULTILIB_OPTIONS = m68000/m68020/m5200/m5206e/m528x/m5307/m5407/mcfv4e/mcpu32/m68040/m68060 m68881/msoft-float
MULTILIB_DIRNAMES = MULTILIB_DIRNAMES =
MULTILIB_MATCHES = m68000=mc68000 m68000=m68302 mcpu32=m68332 m68020=mc68020 m5206e=m5272 MULTILIB_MATCHES = m68000=mc68000 m68000=m68302 mcpu32=m68332 m68020=mc68020 m5206e=m5272
MULTILIB_EXCEPTIONS = m68000/msoft-float m5200/m68881 m5200/msoft-float \ MULTILIB_EXCEPTIONS = m68000/msoft-float m5200/m68881 m5200/msoft-float \
m5206e/m68881 m5206e/msoft-float m528x/m68881 m528x/msoft-float \ m5206e/m68881 m5206e/msoft-float m528x/m68881 m528x/msoft-float \
m5307/m68881 m5307/msoft-float m5407/m68881 m5407/msoft-float \ m5307/m68881 m5307/msoft-float m5407/m68881 m5407/msoft-float \
mcpu32/m68881 mcpu32/msoft-float m68040/m68881 m68040/msoft-float \ mcpu32/m68881 mcpu32/msoft-float m68040/m68881 m68040/msoft-float \
m68060/m68881 m68060/msoft-float m68060/m68881 m68060/msoft-float \
mcfv4e/msoft-float mcfv4e/m68881
LIBGCC = stmp-multilib LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib INSTALL_LIBGCC = install-multilib
......
...@@ -565,7 +565,8 @@ Objective-C and Objective-C++ Dialects}. ...@@ -565,7 +565,8 @@ Objective-C and Objective-C++ Dialects}.
@emph{M680x0 Options} @emph{M680x0 Options}
@gccoptlist{-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol @gccoptlist{-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 @gol
-m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 @gol -m68060 -mcpu32 -m5200 -mcfv4e -m68881 -mbitfield @gol
-mc68000 -mc68020 @gol
-mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol -mnobitfield -mrtd -mshort -msoft-float -mpcrel @gol
-malign-int -mstrict-align -msep-data -mno-sep-data @gol -malign-int -mstrict-align -msep-data -mno-sep-data @gol
-mshared-library-id=n -mid-shared-library -mno-id-shared-library} -mshared-library-id=n -mid-shared-library -mno-id-shared-library}
...@@ -9906,6 +9907,10 @@ when the compiler is configured for 520X-based systems. ...@@ -9906,6 +9907,10 @@ when the compiler is configured for 520X-based systems.
Use this option for microcontroller with a 5200 core, including Use this option for microcontroller with a 5200 core, including
the MCF5202, MCF5203, MCF5204 and MCF5202. the MCF5202, MCF5203, MCF5204 and MCF5202.
@item -mcfv4e
@opindex mcfv4e
Generate output for a ColdFire V4e family cpu (e.g.@: 547x/548x).
This includes use of hardware floating point instructions.
@item -m68020-40 @item -m68020-40
@opindex m68020-40 @opindex m68020-40
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment