summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-05-24 14:40:43 +0000
committermeissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-05-24 14:40:43 +0000
commitfff5066c71ed3264b661d49bd66c3a9df9740404 (patch)
tree8c5a7981890a50bbe869fe76170bdf31a16dbaae /gcc
parentc89b244ba48d4fefd0a0fb8cc244fb4dd84f2e19 (diff)
downloadgcc-fff5066c71ed3264b661d49bd66c3a9df9740404.tar.gz
Make -mstring more like -mmultiple; Emit correct stabs on V.4; Emit correct cpp flags on little endian eabi
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@9795 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/eabile.h34
-rw-r--r--gcc/config/rs6000/rs6000.c29
-rw-r--r--gcc/config/rs6000/rs6000.h68
-rw-r--r--gcc/config/rs6000/sysv4.h22
4 files changed, 102 insertions, 51 deletions
diff --git a/gcc/config/rs6000/eabile.h b/gcc/config/rs6000/eabile.h
index fc61d8c01ab..93691e89421 100644
--- a/gcc/config/rs6000/eabile.h
+++ b/gcc/config/rs6000/eabile.h
@@ -23,3 +23,37 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef TARGET_DEFAULT
#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}"
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index b3d07461701..69fb22d30c7 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -81,7 +81,7 @@ rs6000_override_options ()
/* Simplify the entries below by making a mask for any POWER
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 \
| MASK_PPC_GFXOPT | MASK_POWERPC64)
#define POWERPC_OPT_MASKS (MASK_PPC_GPOPT | MASK_PPC_GFXOPT)
@@ -95,25 +95,25 @@ rs6000_override_options ()
} processor_target_table[]
= {{"common", PROCESSOR_COMMON, 0, POWER_MASKS | POWERPC_MASKS},
{"power", PROCESSOR_POWER,
- MASK_POWER | MASK_MULTIPLE,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"powerpc", PROCESSOR_POWERPC,
MASK_POWERPC | MASK_NEW_MNEMONICS,
POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"rios", PROCESSOR_RIOS1,
- MASK_POWER | MASK_MULTIPLE,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rios1", PROCESSOR_RIOS1,
- MASK_POWER | MASK_MULTIPLE,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rsc", PROCESSOR_PPC601,
- MASK_POWER | MASK_MULTIPLE,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rsc1", PROCESSOR_PPC601,
- MASK_POWER | MASK_MULTIPLE,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING,
MASK_POWER2 | POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"rios2", PROCESSOR_RIOS2,
- MASK_POWER | MASK_MULTIPLE | MASK_POWER2,
+ MASK_POWER | MASK_MULTIPLE | MASK_STRING | MASK_POWER2,
POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"403", PROCESSOR_PPC403,
MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS,
@@ -125,13 +125,13 @@ rs6000_override_options ()
MASK_POWERPC | MASK_SOFT_FLOAT | MASK_NEW_MNEMONICS,
POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64},
{"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},
{"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},
{"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},
{"603", PROCESSOR_PPC603,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
@@ -155,6 +155,7 @@ rs6000_override_options ()
int ptt_size = sizeof (processor_target_table) / sizeof (struct ptt);
int multiple = TARGET_MULTIPLE; /* save current -mmultiple/-mno-multiple status */
+ int string = TARGET_STRING; /* save current -mstring/-mno-string status */
profile_block_flag = 0;
@@ -185,6 +186,11 @@ rs6000_override_options ()
if (TARGET_MULTIPLE_SET)
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
hardware doesn't support the instructions used in little endian mode */
if (!BYTES_BIG_ENDIAN)
@@ -199,7 +205,8 @@ rs6000_override_options ()
if (TARGET_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");
}
}
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 09382d7b7c7..ae087ea40e6 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -155,6 +155,7 @@ extern int target_flags;
/* Use string instructions for block moves */
#define MASK_STRING 0x4000
+#define MASK_STRING_SET 0x8000
#define TARGET_POWER (target_flags & MASK_POWER)
#define TARGET_POWER2 (target_flags & MASK_POWER2)
@@ -171,6 +172,7 @@ extern int target_flags;
#define TARGET_MULTIPLE (target_flags & MASK_MULTIPLE)
#define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET)
#define TARGET_STRING (target_flags & MASK_STRING)
+#define TARGET_STRING_SET (target_flags & MASK_STRING_SET)
#define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)
@@ -187,40 +189,42 @@ extern int target_flags;
#define SUBTARGET_SWITCHES
#endif
-#define TARGET_SWITCHES \
- {{"power", MASK_POWER | MASK_MULTIPLE}, \
- {"power2", MASK_POWER | MASK_MULTIPLE | MASK_POWER2}, \
- {"no-power2", - MASK_POWER2}, \
- {"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE)}, \
- {"powerpc", MASK_POWERPC}, \
- {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \
- | MASK_PPC_GFXOPT | MASK_POWERPC64)}, \
- {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \
- {"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \
- {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \
- {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \
- {"new-mnemonics", MASK_NEW_MNEMONICS}, \
- {"old-mnemonics", -MASK_NEW_MNEMONICS}, \
- {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \
- | MASK_MINIMAL_TOC)}, \
- {"fp-in-toc", - MASK_NO_FP_IN_TOC}, \
- {"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \
- {"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \
- {"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \
- {"minimal-toc", MASK_MINIMAL_TOC}, \
- {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \
- {"no-minimal-toc", - MASK_MINIMAL_TOC}, \
- {"hard-float", - MASK_SOFT_FLOAT}, \
- {"soft-float", MASK_SOFT_FLOAT}, \
- {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET}, \
- {"no-multiple", - MASK_MULTIPLE}, \
- {"no-multiple", MASK_MULTIPLE_SET}, \
- {"string", MASK_STRING}, \
- {"no-string", - MASK_STRING}, \
- SUBTARGET_SWITCHES \
+#define TARGET_SWITCHES \
+ {{"power", MASK_POWER | MASK_MULTIPLE | MASK_STRING}, \
+ {"power2", (MASK_POWER | MASK_MULTIPLE | MASK_STRING \
+ | MASK_POWER2)}, \
+ {"no-power2", - MASK_POWER2}, \
+ {"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE \
+ | MASK_STRING)}, \
+ {"powerpc", MASK_POWERPC}, \
+ {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \
+ | MASK_PPC_GFXOPT | MASK_POWERPC64)}, \
+ {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT}, \
+ {"no-powerpc-gpopt", - MASK_PPC_GPOPT}, \
+ {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT}, \
+ {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT}, \
+ {"new-mnemonics", MASK_NEW_MNEMONICS}, \
+ {"old-mnemonics", -MASK_NEW_MNEMONICS}, \
+ {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \
+ | MASK_MINIMAL_TOC)}, \
+ {"fp-in-toc", - MASK_NO_FP_IN_TOC}, \
+ {"no-fp-in-toc", MASK_NO_FP_IN_TOC}, \
+ {"sum-in-toc", - MASK_NO_SUM_IN_TOC}, \
+ {"no-sum-in-toc", MASK_NO_SUM_IN_TOC}, \
+ {"minimal-toc", MASK_MINIMAL_TOC}, \
+ {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)}, \
+ {"no-minimal-toc", - MASK_MINIMAL_TOC}, \
+ {"hard-float", - MASK_SOFT_FLOAT}, \
+ {"soft-float", MASK_SOFT_FLOAT}, \
+ {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET}, \
+ {"no-multiple", - MASK_MULTIPLE}, \
+ {"no-multiple", MASK_MULTIPLE_SET}, \
+ {"string", MASK_STRING | MASK_STRING_SET}, \
+ {"no-string", - MASK_STRING}, \
+ SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT}}
-#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE)
+#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
/* Processor type. */
enum processor_type
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index fbcd0f68af1..d29596503fd 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -302,16 +302,22 @@ extern int rs6000_pic_labelno;
#define DBX_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
-#define ASM_OUTPUT_SOURCE_LINE(file, line) \
- { static int sym_lineno = 1; \
- fprintf (file, ".stabn 68,0,%d,.LM%d-%s\n.LM%d:\n",\
- line, sym_lineno, \
- XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0), \
- sym_lineno); \
- sym_lineno += 1; }
+#define ASM_OUTPUT_SOURCE_LINE(file, line) \
+do \
+ { \
+ static int sym_lineno = 1; \
+ fprintf (file, "\t.stabn 68,0,%d,.LM%d-", \
+ line, sym_lineno); \
+ 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
name *first*... */