Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
9fd3fbd0
Commit
9fd3fbd0
authored
Mar 31, 1992
by
Richard Stallman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r645
parent
ef58021b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
57 deletions
+31
-57
gcc/config/m68k/m68k.h
+19
-10
gcc/config/m68k/sgs.h
+1
-11
gcc/config/m68k/tower-as.h
+11
-36
No files found.
gcc/config/m68k/m68k.h
View file @
9fd3fbd0
...
...
@@ -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, 0x4e
f
9)); \
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
__trampoline"));
\
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
f
9)); \
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
__trampoline"));
\
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
b
9)); \
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
*___trampoline"));
\
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
b
9)); \
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. */
...
...
gcc/config/m68k/sgs.h
View file @
9fd3fbd0
...
...
@@ -38,6 +38,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define LONG_ASM_OP ".long"
#define SPACE_ASM_OP ".space"
#define ALIGN_ASM_OP ".align"
#undef GLOBAL_ASM_OP
#define GLOBAL_ASM_OP ".global"
#define SWBEG_ASM_OP ".swbeg"
#define SET_ASM_OP ".set"
...
...
@@ -199,17 +200,6 @@ do { union { float f; long l;} tem; \
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (68k, SGS/AT&T syntax)");
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files. */
#undef ASM_GLOBALIZE_LABEL
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
do { \
fprintf ((FILE), "\t%s ", GLOBAL_ASM_OP); \
assemble_name ((FILE), NAME); \
fputs ("\n", FILE); \
} while (0)
#undef PRINT_OPERAND_PRINT_FLOAT
#define PRINT_OPERAND_PRINT_FLOAT(CODE,FILE) \
asm_fprintf ((FILE), "%I0x%x", u1.i);
...
...
gcc/config/m68k/tower-as.h
View file @
9fd3fbd0
...
...
@@ -159,10 +159,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
fprintf (FILE, "\tlink %%a6,&%d\n", -fsize); \
else \
fprintf (FILE, "\tlink %%a6,&0\n\tsub.l &%d,%%sp\n", fsize); } \
for (regno = 24; regno < 56; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
fprintf(FILE, "\tfpmoved %s,-(%%sp)\n", \
reg_names[regno]); \
for (regno = 16; regno < 24; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
mask |= 1 << (regno - 16); \
...
...
@@ -188,20 +184,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
{ register int regno; \
register int mask, fmask; \
register int nregs; \
int offset, foffset
, fpoffset;
\
int offset, foffset
;
\
extern char call_used_regs[]; \
int fsize = ((SIZE) + 3) & -4; \
int big = 0; \
nregs = 0; fmask = 0; fpoffset = 0; \
for (regno = 24 ; regno < 56 ; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
nregs++; \
fpoffset = nregs*8; \
nregs = 0; \
nregs = 0; fmask = 0; \
for (regno = 16; regno < 24; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
{ nregs++; fmask |= 1 << (23 - regno); } \
foffset =
fpoffset + nregs * 12;
\
foffset =
nregs * 12;
\
nregs = 0; mask = 0; \
if (frame_pointer_needed) regs_ever_live[FRAME_POINTER_REGNUM] = 0; \
for (regno = 0; regno < 16; regno++) \
...
...
@@ -210,7 +201,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
offset = foffset + nregs * 4; \
if (offset + fsize >= 0x8000 \
&& frame_pointer_needed \
&& (mask || fmask
|| fpoffset))
\
&& (mask || fmask
))
\
{ fprintf (FILE, "\tmov.l &%d,%%a0\n", -fsize); \
fsize = 0, big = 1; } \
if (exact_log2 (mask) >= 0) { \
...
...
@@ -241,20 +232,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
else \
fprintf (FILE, "\tfmovm -%d(%%a6),&0x%x\n", \
foffset + fsize, fmask); } \
if (fpoffset != 0) \
for (regno = 55; regno >= 24; regno--) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) { \
if (big) \
fprintf(FILE, "\tfpmoved -%d(%%a6,%%a0.l),%s\n", \
fpoffset + fsize, reg_names[regno]); \
else if (! frame_pointer_needed) \
fprintf(FILE, "\tfpmoved (%%sp)+,%s\n", \
reg_names[regno]); \
else \
fprintf(FILE, "\tfpmoved -%d(%%a6),%s\n", \
fpoffset + fsize, reg_names[regno]); \
fpoffset -= 8; \
} \
if (current_function_returns_pointer) \
fprintf (FILE, "\tmov.l %%d0,%%a0\n"); \
if (frame_pointer_needed) \
...
...
@@ -314,16 +291,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 11), \
sprintf ((OUTPUT), "%s%%%%%d", (NAME), (LABELNO)))
/* This is
how to output a
command to make the user-level label named NAME
/* This is
the
command to make the user-level label named NAME
defined for reference from other files. */
#undef ASM_GLOBALIZE_LABEL
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
do { fputs ("\tglobal ", FILE); \
assemble_name (FILE, NAME); \
fputs ("\n", FILE); \
} while (0)
#undef GLOBAL_ASM_OP
#define GLOBAL_ASM_OP "global"
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
...
...
@@ -577,7 +550,9 @@ do { fprintf (asm_out_file, "\tdef\t"); \
#define PUT_SDB_ENDEF fputs("\tendef\n", asm_out_file)
#define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\ttype\t0%o;", a)
#define PUT_SDB_SIZE(a) fprintf(asm_out_file, "\tsize\t%d;", a)
#define PUT_SDB_DIM(a) fprintf(asm_out_file, "\tdim\t%d;", a)
#define PUT_SDB_START_DIM fprintf(asm_out_file, "\tdim\t")
#define PUT_SDB_NEXT_DIM(a) fprintf(asm_out_file, "%d,", a)
#define PUT_SDB_LAST_DIM(a) fprintf(asm_out_file, "%d;", a)
#define PUT_SDB_TAG(a) \
do { fprintf (asm_out_file, "\ttag\t"); \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment