aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m68k/m68k.h
diff options
context:
space:
mode:
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-03-31 09:05:45 +0000
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-03-31 09:05:45 +0000
commit29dbfa5b977b784848186eb70d8cdb71cb196a56 (patch)
treeff067672957a9955419621d15325a0c3ae7e504a /gcc/config/m68k/m68k.h
parent8aafcbf970a1d8e469bf5475670b3625c0d1a483 (diff)
*** empty log message ***
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@645 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m68k/m68k.h')
-rw-r--r--gcc/config/m68k/m68k.h29
1 files changed, 19 insertions, 10 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index 9c417b65004..89f57729c18 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -912,23 +912,26 @@ extern enum reg_class regno_reg_class[];
/* On the 68k, the trampoline looks like this:
mov @#.,a0
- jsr @#__trampoline
- jsr @#__trampoline
+ jsr @#___trampoline
+ jsr @#___trampoline
.long STATIC
.long FUNCTION
The reason for having three jsr insns is so that an entire line
of the instruction cache is filled in a predictable way
-that will always be the same. */
+that will always be the same.
+
+We always use the assembler label ___trampoline
+regardless of whether the system adds underscores. */
#define TRAMPOLINE_TEMPLATE(FILE) \
{ \
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x207c)); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
- ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4ef9)); \
- ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "__trampoline")); \
- ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4ef9)); \
- ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "__trampoline")); \
+ ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4eb9)); \
+ ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "*___trampoline"));\
+ ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4eb9)); \
+ ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "*___trampoline"));\
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
@@ -969,6 +972,7 @@ void \
__transfer_from_trampoline () \
{ \
register char *a0 asm ("%a0"); \
+ asm (GLOBAL_ASM_OP, " ___trampoline"); \
asm ("___trampoline:"); \
asm volatile ("move%.l %0,%@" : : "m" (a0[22])); \
asm volatile ("move%.l %1,%0" : "=a" (a0) : "m" (a0[18])); \
@@ -1303,6 +1307,8 @@ __transfer_from_trampoline () \
work properly in synth_mult on the 68020,
relative to an average of the time for add and the time for shift,
taking away a little more because sometimes move insns are needed. */
+#define MULL_COST (TARGET_68040 ? 5 : 13)
+#define MULW_COST (TARGET_68040 ? 3 : 8)
#define RTX_COSTS(X,CODE) \
case PLUS: \
@@ -1345,9 +1351,9 @@ __transfer_from_trampoline () \
break; \
} \
else if (GET_MODE (X) == QImode || GET_MODE (X) == HImode) \
- return COSTS_N_INSNS (8); /* mul.w */ \
+ return COSTS_N_INSNS (MULW_COST); \
else \
- return COSTS_N_INSNS (13); /* mul.l */ \
+ return COSTS_N_INSNS (MULL_COST); \
break; \
case DIV: \
case UDIV: \
@@ -1473,8 +1479,11 @@ __transfer_from_trampoline () \
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files. */
+#define GLOBAL_ASM_OP ".globl"
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
- do { fputs (".globl ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
+ do { fprintf (FILE, "%s ", GLOBAL_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fputs ("\n", FILE);} while (0)
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */