Commit 938937d8 by Michael Meissner

Make -mstring more like -mmultiple; Emit correct stabs on V.4; Emit correct cpp…

Make -mstring more like -mmultiple; Emit correct stabs on V.4; Emit correct cpp flags on little endian eabi

From-SVN: r9795
parent c23a9d0e
...@@ -23,3 +23,37 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ...@@ -23,3 +23,37 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef TARGET_DEFAULT #undef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_LITTLE_ENDIAN) #define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_LITTLE_ENDIAN)
#undef CPP_SPEC
#define CPP_SPEC "\
%{posix: -D_POSIX_SOURCE} \
%{mrelocatable: -D_RELOCATABLE} \
%{mbig: -D_BIG_ENDIAN -Amachine(bigendian)} \
%{mbig-endian: -D_BIG_ENDIAN -Amachine(bigendian)} \
%{!mbig: %{!mbig-endian: -D_LITTLE_ENDIAN -Amachine(littleendian)}} \
%{!mcpu*: \
%{mpower: %{!mpower2: -D_ARCH_PWR}} \
%{mpower2: -D_ARCH_PWR2} \
%{mpowerpc*: -D_ARCH_PPC} \
%{mno-powerpc: %{!mpower: %{!mpower2: -D_ARCH_COM}}} \
%{!mno-powerpc: -D_ARCH_PPC}} \
%{mcpu=common: -D_ARCH_COM} \
%{mcpu=power: -D_ARCH_PWR} \
%{mcpu=powerpc: -D_ARCH_PPC} \
%{mcpu=rios: -D_ARCH_PWR} \
%{mcpu=rios1: -D_ARCH_PWR} \
%{mcpu=rios2: -D_ARCH_PWR2} \
%{mcpu=rsc: -D_ARCH_PWR} \
%{mcpu=rsc1: -D_ARCH_PWR} \
%{mcpu=403: -D_ARCH_PPC} \
%{mcpu=mpc403: -D_ARCH_PPC} \
%{mcpu=ppc403: -D_ARCH_PPC} \
%{mcpu=601: -D_ARCH_PPC -D_ARCH_PWR} \
%{mcpu=mpc601: -D_ARCH_PPC -D_ARCH_PWR} \
%{mcpu=ppc601: -D_ARCH_PPC -D_ARCH_PWR} \
%{mcpu=603: -D_ARCH_PPC} \
%{mcpu=mpc603: -D_ARCH_PPC} \
%{mcpu=ppc603: -D_ARCH_PPC} \
%{mcpu=604: -D_ARCH_PPC} \
%{mcpu=mpc604: -D_ARCH_PPC} \
%{mcpu=ppc604: -D_ARCH_PPC}"
...@@ -81,7 +81,7 @@ rs6000_override_options () ...@@ -81,7 +81,7 @@ rs6000_override_options ()
/* Simplify the entries below by making a mask for any POWER /* Simplify the entries below by making a mask for any POWER
variant and any PowerPC variant. */ variant and any PowerPC variant. */
#define POWER_MASKS (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE) #define POWER_MASKS (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE | MASK_STRING)
#define POWERPC_MASKS (MASK_POWERPC | MASK_PPC_GPOPT \ #define POWERPC_MASKS (MASK_POWERPC | MASK_PPC_GPOPT \
| MASK_PPC_GFXOPT | MASK_POWERPC64) | MASK_PPC_GFXOPT | MASK_POWERPC64)
#define POWERPC_OPT_MASKS (MASK_PPC_GPOPT | MASK_PPC_GFXOPT) #define POWERPC_OPT_MASKS (MASK_PPC_GPOPT | MASK_PPC_GFXOPT)
...@@ -95,25 +95,25 @@ rs6000_override_options () ...@@ -95,25 +95,25 @@ rs6000_override_options ()
} processor_target_table[] } processor_target_table[]
= {{"common", PROCESSOR_COMMON, 0, POWER_MASKS | POWERPC_MASKS}, = {{"common", PROCESSOR_COMMON, 0, POWER_MASKS | POWERPC_MASKS},
{"power", PROCESSOR_POWER, {"power", PROCESSOR_POWER,
MASK_POWER | MASK_MULTIPLE, MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS}, MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"powerpc", PROCESSOR_POWERPC, {"powerpc", PROCESSOR_POWERPC,
MASK_POWERPC | MASK_NEW_MNEMONICS, MASK_POWERPC | MASK_NEW_MNEMONICS,
POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64}, POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"rios", PROCESSOR_RIOS1, {"rios", PROCESSOR_RIOS1,
MASK_POWER | MASK_MULTIPLE, MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS}, MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rios1", PROCESSOR_RIOS1, {"rios1", PROCESSOR_RIOS1,
MASK_POWER | MASK_MULTIPLE, MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS}, MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rsc", PROCESSOR_PPC601, {"rsc", PROCESSOR_PPC601,
MASK_POWER | MASK_MULTIPLE, MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS}, MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rsc1", PROCESSOR_PPC601, {"rsc1", PROCESSOR_PPC601,
MASK_POWER | MASK_MULTIPLE, MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS}, MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rios2", PROCESSOR_RIOS2, {"rios2", PROCESSOR_RIOS2,
MASK_POWER | MASK_MULTIPLE | MASK_POWER2, MASK_POWER | MASK_MULTIPLE | MASK_STRING | MASK_POWER2,
POWERPC_MASKS | MASK_NEW_MNEMONICS}, POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"403", PROCESSOR_PPC403, {"403", PROCESSOR_PPC403,
MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS, MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS,
...@@ -125,13 +125,13 @@ rs6000_override_options () ...@@ -125,13 +125,13 @@ rs6000_override_options ()
MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS, MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS,
POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64}, POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"601", PROCESSOR_PPC601, {"601", PROCESSOR_PPC601,
MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE, MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64}, MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"mpc601", PROCESSOR_PPC601, {"mpc601", PROCESSOR_PPC601,
MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE, MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64}, MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"ppc601", PROCESSOR_PPC601, {"ppc601", PROCESSOR_PPC601,
MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE, MASK_POWER | MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64}, MASK_POWER2 | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"603", PROCESSOR_PPC603, {"603", PROCESSOR_PPC603,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS, MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
...@@ -155,6 +155,7 @@ rs6000_override_options () ...@@ -155,6 +155,7 @@ rs6000_override_options ()
int ptt_size = sizeof (processor_target_table) / sizeof (struct ptt); int ptt_size = sizeof (processor_target_table) / sizeof (struct ptt);
int multiple = TARGET_MULTIPLE; /* save current -mmultiple/-mno-multiple status */ int multiple = TARGET_MULTIPLE; /* save current -mmultiple/-mno-multiple status */
int string = TARGET_STRING; /* save current -mstring/-mno-string status */
profile_block_flag = 0; profile_block_flag = 0;
...@@ -185,6 +186,11 @@ rs6000_override_options () ...@@ -185,6 +186,11 @@ rs6000_override_options ()
if (TARGET_MULTIPLE_SET) if (TARGET_MULTIPLE_SET)
target_flags = (target_flags & ~MASK_MULTIPLE) | multiple; target_flags = (target_flags & ~MASK_MULTIPLE) | multiple;
/* If -mstring or -mno-string was explicitly used, don't
override with the processor default */
if (TARGET_STRING_SET)
target_flags = (target_flags & ~MASK_STRING) | multiple;
/* Don't allow -mmultiple or -mstring on little endian systems, because the /* Don't allow -mmultiple or -mstring on little endian systems, because the
hardware doesn't support the instructions used in little endian mode */ hardware doesn't support the instructions used in little endian mode */
if (!BYTES_BIG_ENDIAN) if (!BYTES_BIG_ENDIAN)
...@@ -199,7 +205,8 @@ rs6000_override_options () ...@@ -199,7 +205,8 @@ rs6000_override_options ()
if (TARGET_STRING) if (TARGET_STRING)
{ {
target_flags &= ~MASK_STRING; target_flags &= ~MASK_STRING;
warning ("-mstring is not supported on little endian systems"); if (TARGET_STRING_SET)
warning ("-mstring is not supported on little endian systems");
} }
} }
......
...@@ -155,6 +155,7 @@ extern int target_flags; ...@@ -155,6 +155,7 @@ extern int target_flags;
/* Use string instructions for block moves */ /* Use string instructions for block moves */
#define MASK_STRING 0x4000 #define MASK_STRING 0x4000
#define MASK_STRING_SET 0x8000
#define TARGET_POWER (target_flags & MASK_POWER) #define TARGET_POWER (target_flags & MASK_POWER)
#define TARGET_POWER2 (target_flags & MASK_POWER2) #define TARGET_POWER2 (target_flags & MASK_POWER2)
...@@ -171,6 +172,7 @@ extern int target_flags; ...@@ -171,6 +172,7 @@ extern int target_flags;
#define TARGET_MULTIPLE (target_flags & MASK_MULTIPLE) #define TARGET_MULTIPLE (target_flags & MASK_MULTIPLE)
#define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET) #define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET)
#define TARGET_STRING (target_flags & MASK_STRING) #define TARGET_STRING (target_flags & MASK_STRING)
#define TARGET_STRING_SET (target_flags & MASK_STRING_SET)
#define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT) #define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)
...@@ -187,40 +189,42 @@ extern int target_flags; ...@@ -187,40 +189,42 @@ extern int target_flags;
#define SUBTARGET_SWITCHES #define SUBTARGET_SWITCHES
#endif #endif
#define TARGET_SWITCHES \ #define TARGET_SWITCHES \
{{"power", MASK_POWER | MASK_MULTIPLE}, \ {{"power", MASK_POWER | MASK_MULTIPLE | MASK_STRING}, \
{"power2", MASK_POWER | MASK_MULTIPLE | MASK_POWER2}, \ {"power2", (MASK_POWER | MASK_MULTIPLE | MASK_STRING \
{"no-power2", - MASK_POWER2}, \ | MASK_POWER2)}, \
{"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE)}, \ {"no-power2", - MASK_POWER2}, \
{"powerpc", MASK_POWERPC}, \ {"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE \
{"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \ | MASK_STRING)}, \
| MASK_PPC_GFXOPT | MASK_POWERPC64)}, \ {"powerpc", MASK_POWERPC}, \
{"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \ {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \
{"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \ | MASK_PPC_GFXOPT | MASK_POWERPC64)}, \
{"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \ {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \
{"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \ {"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \
{"new-mnemonics", MASK_NEW_MNEMONICS}, \ {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \
{"old-mnemonics", -MASK_NEW_MNEMONICS}, \ {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \
{"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \ {"new-mnemonics", MASK_NEW_MNEMONICS}, \
| MASK_MINIMAL_TOC)}, \ {"old-mnemonics", -MASK_NEW_MNEMONICS}, \
{"fp-in-toc", - MASK_NO_FP_IN_TOC}, \ {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \
{"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \ | MASK_MINIMAL_TOC)}, \
{"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \ {"fp-in-toc", - MASK_NO_FP_IN_TOC}, \
{"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \ {"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \
{"minimal-toc", MASK_MINIMAL_TOC}, \ {"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \
{"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \ {"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \
{"no-minimal-toc", - MASK_MINIMAL_TOC}, \ {"minimal-toc", MASK_MINIMAL_TOC}, \
{"hard-float", - MASK_SOFT_FLOAT}, \ {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \
{"soft-float", MASK_SOFT_FLOAT}, \ {"no-minimal-toc", - MASK_MINIMAL_TOC}, \
{"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET}, \ {"hard-float", - MASK_SOFT_FLOAT}, \
{"no-multiple", - MASK_MULTIPLE}, \ {"soft-float", MASK_SOFT_FLOAT}, \
{"no-multiple", MASK_MULTIPLE_SET}, \ {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET}, \
{"string", MASK_STRING}, \ {"no-multiple", - MASK_MULTIPLE}, \
{"no-string", - MASK_STRING}, \ {"no-multiple", MASK_MULTIPLE_SET}, \
SUBTARGET_SWITCHES \ {"string", MASK_STRING | MASK_STRING_SET}, \
{"no-string", - MASK_STRING}, \
SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT}} {"", TARGET_DEFAULT}}
#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE) #define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
/* Processor type. */ /* Processor type. */
enum processor_type enum processor_type
......
...@@ -302,16 +302,22 @@ extern int rs6000_pic_labelno; ...@@ -302,16 +302,22 @@ extern int rs6000_pic_labelno;
#define DBX_DEBUGGING_INFO #define DBX_DEBUGGING_INFO
#define DWARF_DEBUGGING_INFO #define DWARF_DEBUGGING_INFO
/* Line numbers are relative to the current function. */ /* Like block addresses, stabs line numbers are relative to the
current function. */
#undef ASM_OUTPUT_SOURCE_LINE #undef ASM_OUTPUT_SOURCE_LINE
#define ASM_OUTPUT_SOURCE_LINE(file, line) \ #define ASM_OUTPUT_SOURCE_LINE(file, line) \
{ static int sym_lineno = 1; \ do \
fprintf (file, ".stabn 68,0,%d,.LM%d-%s\n.LM%d:\n",\ { \
line, sym_lineno, \ static int sym_lineno = 1; \
XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0), \ fprintf (file, "\t.stabn 68,0,%d,.LM%d-", \
sym_lineno); \ line, sym_lineno); \
sym_lineno += 1; } assemble_name (file, \
XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\
fprintf (file, "\n.LM%d:\n", sym_lineno); \
sym_lineno += 1; \
} \
while (0)
/* But, to make this work, we have to output the stabs for the function /* But, to make this work, we have to output the stabs for the function
name *first*... */ name *first*... */
......
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