diff options
author | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-03-31 09:05:45 +0000 |
---|---|---|
committer | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-03-31 09:05:45 +0000 |
commit | 29dbfa5b977b784848186eb70d8cdb71cb196a56 (patch) | |
tree | ff067672957a9955419621d15325a0c3ae7e504a /gcc/config/m68k/m68k.h | |
parent | 8aafcbf970a1d8e469bf5475670b3625c0d1a483 (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.h | 29 |
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. */ |