Commit 78fb8038 by Richard Sandiford Committed by Richard Sandiford

* config/mcore/mcore.h (target_flags, HARDLIT_BIT, ALIGN8_BIT, DIV_BIT)

	(RELAX_IMM_BIT, W_FIELD_BIT, OVERALIGN_FUNC_BIT, CGDATA_BIT)
	(SLOW_BYTES_BIT, LITTLE_END_BIT, M340_BIT, TARGET_HARDLIT)
	(TARGET_DIV, TARGET_RELAX_IMM, TARGET_W_FIELD, TARGET_OVERALIGN_FUNC)
	(TARGET_CG_DATA, TARGET_SLOW_BYTES, TARGET_LITTLE_END, TARGET_M340)
	(TARGET_SWITCHES, mcore_stack_increment_string)
	(TARGET_OPTIONS): Delete.
	(TARGET_DEFAULT, OPTIMIZATION_OPTIONS): Use MASK_* constants rather
	than *_BIT constants.
	(TARGET_8ALIGN): #undef old definition before redefining to 1.
	* config/mcore/mcore.c (mcore_stack_increment_string): Delete.
	(TARGET_DEFAULT_TARGET_FLAGS): Override default to TARGET_DEFAULT.
	(mcore_override_options): Delete mcore_stack_increment code.
	Change use of M340_BIT to MASK_M340.
	* config/mcore/mcore.opt: New file.

From-SVN: r97544
parent 09c3c5dc
2005-04-04 Richard Sandiford <rsandifo@redhat.com>
* config/mcore/mcore.h (target_flags, HARDLIT_BIT, ALIGN8_BIT, DIV_BIT)
(RELAX_IMM_BIT, W_FIELD_BIT, OVERALIGN_FUNC_BIT, CGDATA_BIT)
(SLOW_BYTES_BIT, LITTLE_END_BIT, M340_BIT, TARGET_HARDLIT)
(TARGET_DIV, TARGET_RELAX_IMM, TARGET_W_FIELD, TARGET_OVERALIGN_FUNC)
(TARGET_CG_DATA, TARGET_SLOW_BYTES, TARGET_LITTLE_END, TARGET_M340)
(TARGET_SWITCHES, mcore_stack_increment_string)
(TARGET_OPTIONS): Delete.
(TARGET_DEFAULT, OPTIMIZATION_OPTIONS): Use MASK_* constants rather
than *_BIT constants.
(TARGET_8ALIGN): #undef old definition before redefining to 1.
* config/mcore/mcore.c (mcore_stack_increment_string): Delete.
(TARGET_DEFAULT_TARGET_FLAGS): Override default to TARGET_DEFAULT.
(mcore_override_options): Delete mcore_stack_increment code.
Change use of M340_BIT to MASK_M340.
* config/mcore/mcore.opt: New file.
2005-04-04 Ian Lance Taylor <ian@airs.com> 2005-04-04 Ian Lance Taylor <ian@airs.com>
* config/arm/arm.c (replace_symbols_in_block): Remove static * config/arm/arm.c (replace_symbols_in_block): Remove static
......
...@@ -49,8 +49,7 @@ ...@@ -49,8 +49,7 @@
/* Maximum size we are allowed to grow the stack in a single operation. /* Maximum size we are allowed to grow the stack in a single operation.
If we want more, we must do it in increments of at most this size. If we want more, we must do it in increments of at most this size.
If this value is 0, we don't check at all. */ If this value is 0, we don't check at all. */
const char * mcore_stack_increment_string = 0; int mcore_stack_increment = STACK_UNITS_MAXSTEP;
int mcore_stack_increment = STACK_UNITS_MAXSTEP;
/* For dumping information about frame sizes. */ /* For dumping information about frame sizes. */
char * mcore_current_function_name = 0; char * mcore_current_function_name = 0;
...@@ -176,6 +175,8 @@ static int mcore_arg_partial_bytes (CUMULATIVE_ARGS *, ...@@ -176,6 +175,8 @@ static int mcore_arg_partial_bytes (CUMULATIVE_ARGS *,
#define TARGET_ASM_UNIQUE_SECTION mcore_unique_section #define TARGET_ASM_UNIQUE_SECTION mcore_unique_section
#undef TARGET_ASM_FUNCTION_RODATA_SECTION #undef TARGET_ASM_FUNCTION_RODATA_SECTION
#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
#undef TARGET_DEFAULT_TARGET_FLAGS
#define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT
#undef TARGET_ENCODE_SECTION_INFO #undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO mcore_encode_section_info #define TARGET_ENCODE_SECTION_INFO mcore_encode_section_info
#undef TARGET_STRIP_NAME_ENCODING #undef TARGET_STRIP_NAME_ENCODING
...@@ -2981,21 +2982,9 @@ mcore_is_same_reg (rtx x, rtx y) ...@@ -2981,21 +2982,9 @@ mcore_is_same_reg (rtx x, rtx y)
void void
mcore_override_options (void) mcore_override_options (void)
{ {
if (mcore_stack_increment_string)
{
mcore_stack_increment = atoi (mcore_stack_increment_string);
if (mcore_stack_increment < 0
|| (mcore_stack_increment == 0
&& (mcore_stack_increment_string[0] != '0'
|| mcore_stack_increment_string[1] != 0)))
error ("invalid option %<-mstack-increment=%s%>",
mcore_stack_increment_string);
}
/* Only the m340 supports little endian code. */ /* Only the m340 supports little endian code. */
if (TARGET_LITTLE_END && ! TARGET_M340) if (TARGET_LITTLE_END && ! TARGET_M340)
target_flags |= M340_BIT; target_flags |= MASK_M340;
} }
/* Compute the number of word sized registers needed to /* Compute the number of word sized registers needed to
......
...@@ -66,105 +66,26 @@ ...@@ -66,105 +66,26 @@
#undef LINK_SPEC #undef LINK_SPEC
#define LINK_SPEC "%{mbig-endian:-EB} %{m210:-EB} -X" #define LINK_SPEC "%{mbig-endian:-EB} %{m210:-EB} -X"
/* Can only count on 16 bits of availability; change to long would affect #define TARGET_DEFAULT \
many architecture specific files (other architectures...). */ (MASK_HARDLIT \
extern int target_flags; | MASK_8ALIGN \
| MASK_DIV \
#define HARDLIT_BIT (1 << 0) /* Build in-line literals using 2 insns. */ | MASK_RELAX_IMM \
#define ALIGN8_BIT (1 << 1) /* Max alignment goes to 8 instead of 4. */ | MASK_M340 \
#define DIV_BIT (1 << 2) /* Generate divide instructions. */ | MASK_LITTLE_END)
#define RELAX_IMM_BIT (1 << 3) /* Arbitrary immediates in and, or, tst. */
#define W_FIELD_BIT (1 << 4) /* Generate bit insv/extv using SImode. */
#define OVERALIGN_FUNC_BIT (1 << 5) /* Align functions to 4 byte boundary. */
#define CGDATA_BIT (1 << 6) /* Generate callgraph data. */
#define SLOW_BYTES_BIT (1 << 7) /* Slow byte access. */
#define LITTLE_END_BIT (1 << 8) /* Generate little endian code. */
#define M340_BIT (1 << 9) /* Generate code for the m340. */
#define TARGET_DEFAULT \
(HARDLIT_BIT | ALIGN8_BIT | DIV_BIT | RELAX_IMM_BIT | M340_BIT | LITTLE_END_BIT)
#ifndef MULTILIB_DEFAULTS #ifndef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mlittle-endian", "m340" } #define MULTILIB_DEFAULTS { "mlittle-endian", "m340" }
#endif #endif
#define TARGET_HARDLIT (target_flags & HARDLIT_BIT)
/* The ability to have 4 byte alignment is being suppressed for now. /* The ability to have 4 byte alignment is being suppressed for now.
If this ability is reenabled, you must enable the definition below If this ability is reenabled, you must disable the definition below
*and* edit t-mcore to enable multilibs for 4 byte alignment code. */ *and* edit t-mcore to enable multilibs for 4 byte alignment code. */
#if 0 #undef TARGET_8ALIGN
#define TARGET_8ALIGN (target_flags & ALIGN8_BIT) #define TARGET_8ALIGN 1
#else
#define TARGET_8ALIGN 1
#endif
#define TARGET_DIV (target_flags & DIV_BIT)
#define TARGET_RELAX_IMM (target_flags & RELAX_IMM_BIT)
#define TARGET_W_FIELD (target_flags & W_FIELD_BIT)
#define TARGET_OVERALIGN_FUNC (target_flags & OVERALIGN_FUNC_BIT)
#define TARGET_CG_DATA (target_flags & CGDATA_BIT)
#define TARGET_CG_DATA (target_flags & CGDATA_BIT)
#define TARGET_SLOW_BYTES (target_flags & SLOW_BYTES_BIT)
#define TARGET_LITTLE_END (target_flags & LITTLE_END_BIT)
#define TARGET_M340 (target_flags & M340_BIT)
#define TARGET_SWITCHES \
{ {"hardlit", HARDLIT_BIT, \
N_("Inline constants if it can be done in 2 insns or less") }, \
{"no-hardlit", - HARDLIT_BIT, \
N_("Inline constants if it only takes 1 instruction") }, \
{"4align", - ALIGN8_BIT, \
N_("Set maximum alignment to 4") }, \
{"8align", ALIGN8_BIT, \
N_("Set maximum alignment to 8") }, \
{"div", DIV_BIT, \
"" }, \
{"no-div", - DIV_BIT, \
N_("Do not use the divide instruction") }, \
{"relax-immediates", RELAX_IMM_BIT, \
"" }, \
{"no-relax-immediates", - RELAX_IMM_BIT, \
N_("Do not arbitrary sized immediates in bit operations") }, \
{"wide-bitfields", W_FIELD_BIT, \
N_("Always treat bit-field as int-sized") }, \
{"no-wide-bitfields", - W_FIELD_BIT, \
"" }, \
{"4byte-functions", OVERALIGN_FUNC_BIT, \
N_("Force functions to be aligned to a 4 byte boundary") }, \
{"no-4byte-functions", - OVERALIGN_FUNC_BIT, \
N_("Force functions to be aligned to a 2 byte boundary") }, \
{"callgraph-data", CGDATA_BIT, \
N_("Emit call graph information") }, \
{"no-callgraph-data", - CGDATA_BIT, \
"" }, \
{"slow-bytes", SLOW_BYTES_BIT, \
N_("Prefer word accesses over byte accesses") }, \
{"no-slow-bytes", - SLOW_BYTES_BIT, \
"" }, \
{ "no-lsim", 0, "" }, \
{"little-endian", LITTLE_END_BIT, \
N_("Generate little endian code") }, \
{"big-endian", - LITTLE_END_BIT, \
"" }, \
{"210", - M340_BIT, \
"" }, \
{"340", M340_BIT, \
N_("Generate code for the M*Core M340") }, \
{"", TARGET_DEFAULT, \
"" } \
}
extern char * mcore_current_function_name; extern char * mcore_current_function_name;
/* Target specific options (as opposed to the switches above). */
extern const char * mcore_stack_increment_string;
#define TARGET_OPTIONS \
{ \
{"stack-increment=", & mcore_stack_increment_string, \
N_("Maximum amount for a single stack increment operation"), 0} \
}
/* The MCore ABI says that bitfields are unsigned by default. */ /* The MCore ABI says that bitfields are unsigned by default. */
#define CC1_SPEC "-funsigned-bitfields" #define CC1_SPEC "-funsigned-bitfields"
...@@ -189,7 +110,7 @@ extern const char * mcore_stack_increment_string; ...@@ -189,7 +110,7 @@ extern const char * mcore_stack_increment_string;
} \ } \
if (SIZE) \ if (SIZE) \
{ \ { \
target_flags &= ~ HARDLIT_BIT; \ target_flags &= ~MASK_HARDLIT; \
} \ } \
} }
......
; Options for the Motorola MCore port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 2, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 59 Temple Place - Suite 330, Boston, MA
; 02111-1307, USA.
m210
Target RejectNegative Report InverseMask(M340)
Generate code for the M*Core M210
m340
Target RejectNegative Report Mask(M340)
Generate code for the M*Core M340
m4align
Target RejectNegative Report InverseMask(8ALIGN)
Set maximum alignment to 4
m4byte-functions
Target Report Mask(OVERALIGN_FUNC)
Force functions to be aligned to a 4 byte boundary
m8align
Target RejectNegative Report Mask(8ALIGN)
Set maximum alignment to 8
mbig-endian
Target RejectNegative Report InverseMask(LITTLE_END)
Generate big-endian code
mcallgraph-data
Target Report Mask(CG_DATA)
Emit call graph information
mdiv
Target Report Mask(DIV)
Use the divide instruction
mhardlit
Target Report Mask(HARDLIT)
Inline constants if it can be done in 2 insns or less
mlittle-endian
Target RejectNegative Report Mask(LITTLE_END)
Generate little-endian code
; Not used by the compiler proper.
mno-lsim
Target RejectNegative Undocumented
mrelax-immediates
Target Report Mask(RELAX_IMM)
Use arbitrary sized immediates in bit operations
mslow-bytes
Target Report Mask(SLOW_BYTES)
Prefer word accesses over byte accesses
mstack-increment=
Target RejectNegative Joined UInteger Var(mcore_stack_increment) VarExists
Set the maximum amount for a single stack increment operation
mwide-bitfields
Target Report Mask(W_FIELD)
Always treat bitfields as int-sized
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