aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@cygnus.com>1999-05-05 07:46:43 +0000
committerNick Clifton <nickc@gcc.gnu.org>1999-05-05 07:46:43 +0000
commitafef3d7a1b7262215ba575f8825ac2477c05a692 (patch)
treea0740688654c5451e4dc20aa0786526d142b9dc8
parent9ba051d33eda5c331f6189ed57f814d46666c064 (diff)
downloadgcc-afef3d7a1b7262215ba575f8825ac2477c05a692.zip
gcc-afef3d7a1b7262215ba575f8825ac2477c05a692.tar.gz
gcc-afef3d7a1b7262215ba575f8825ac2477c05a692.tar.bz2
Remove assembler dialect dependencies.
From-SVN: r26776
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/arm/aof.h3
-rw-r--r--gcc/config/arm/arm.h55
3 files changed, 55 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c343a1b..fb98a33 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+Wed May 5 07:40:02 1999 Nick Clifton <nickc@cygnus.com>
+
+ Patch from: Nick Burrett <nick.burrett@btinternet.com>
+ * config/arm/arm.h (ARM_MCOUNT_NAME): Define.
+ (FUNCTION_PROFILER): Remove assembler dialect dependency and use
+ ARM_MCOUNT_NAME.
+ (TRAMPOLINE_TEMPLATE): Remove assembler dialect dependency.
+
+ * config/arm/aof.h (ARM_MCOUNT_NAME): Define.
+
1999-05-05 09:58 -0400 Zack Weinberg <zack@rabi.columbia.edu>
* gcc.c (default_compilers): Fix brace nesting bug.
diff --git a/gcc/config/arm/aof.h b/gcc/config/arm/aof.h
index 6c21850..ce41a70 100644
--- a/gcc/config/arm/aof.h
+++ b/gcc/config/arm/aof.h
@@ -420,6 +420,9 @@ do { \
#define USER_LABEL_PREFIX ""
#define LOCAL_LABEL_PREFIX ""
+/* AOF does not prefix user function names with an underscore. */
+#define ARM_MCOUNT_NAME "_mcount"
+
/* Output of Dispatch Tables */
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM,BODY,VALUE,REL) \
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index ef18f49..52b4332 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -1133,15 +1133,42 @@ do { \
#define FUNCTION_PROLOGUE(STREAM, SIZE) \
output_func_prologue ((STREAM), (SIZE))
-/* Call the function profiler with a given profile label. The Acorn compiler
- puts this BEFORE the prolog but gcc puts it afterwards. The ``mov ip,lr''
- seems like a good idea to stick with cc convention. ``prof'' doesn't seem
- to mind about this! */
+/* If your target environment doesn't prefix user functions with an
+ underscore, you may wish to re-define this to prevent any conflicts.
+ e.g. AOF may prefix mcount with an underscore. */
+#ifndef ARM_MCOUNT_NAME
+#define ARM_MCOUNT_NAME "*mcount"
+#endif
+
+/* Call the function profiler with a given profile label. The Acorn
+ compiler puts this BEFORE the prolog but gcc puts it afterwards.
+ On the ARM the full profile code will look like:
+ .data
+ LP1
+ .word 0
+ .text
+ mov ip, lr
+ bl mcount
+ .word LP1
+
+ profile_function() in final.c outputs the .data section, FUNCTION_PROFILER
+ will output the .text section.
+
+ The ``mov ip,lr'' seems like a good idea to stick with cc convention.
+ ``prof'' doesn't seem to mind about this! */
#define FUNCTION_PROFILER(STREAM,LABELNO) \
{ \
- fprintf(STREAM, "\tmov\t%sip, %slr\n", REGISTER_PREFIX, REGISTER_PREFIX); \
- fprintf(STREAM, "\tbl\tmcount\n"); \
- fprintf(STREAM, "\t.word\tLP%d\n", (LABELNO)); \
+ char temp[20]; \
+ rtx sym; \
+ \
+ fprintf ((STREAM), "\tmov\t%s%s, %s%s\n\tbl\t", \
+ REGISTER_PREFIX, reg_names[12] /* ip */, \
+ REGISTER_PREFIX, reg_names[14] /* lr */); \
+ assemble_name ((STREAM), ARM_MCOUNT_NAME); \
+ fputc ('\n', (STREAM)); \
+ ASM_GENERATE_INTERNAL_LABEL (temp, "LP", (LABELNO)); \
+ sym = gen_rtx (SYMBOL_REF, Pmode, temp); \
+ ASM_OUTPUT_INT ((STREAM), sym); \
}
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
@@ -1243,12 +1270,14 @@ do { \
??? FIXME: When the trampoline returns, r8 will be clobbered. */
#define TRAMPOLINE_TEMPLATE(FILE) \
{ \
- fprintf ((FILE), "\tldr\t%sr8, [%spc, #0]\n", \
- REGISTER_PREFIX, REGISTER_PREFIX); \
- fprintf ((FILE), "\tldr\t%spc, [%spc, #0]\n", \
- REGISTER_PREFIX, REGISTER_PREFIX); \
- fprintf ((FILE), "\t.word\t0\n"); \
- fprintf ((FILE), "\t.word\t0\n"); \
+ fprintf ((FILE), "\tldr\t%s%s, [%s%s, #0]\n", \
+ REGISTER_PREFIX, reg_names[STATIC_CHAIN_REGNUM], \
+ REGISTER_PREFIX, reg_names[PC_REGNUM]); \
+ fprintf ((FILE), "\tldr\t%s%s, [%s%s, #0]\n", \
+ REGISTER_PREFIX, reg_names[PC_REGNUM], \
+ REGISTER_PREFIX, reg_names[PC_REGNUM]); \
+ ASM_OUTPUT_INT ((FILE), const0_rtx); \
+ ASM_OUTPUT_INT ((FILE), const0_rtx); \
}
/* Length in units of the trampoline for entering a nested function. */