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[];
...
@@ -912,23 +912,26 @@ extern enum reg_class regno_reg_class[];
/* On the 68k, the trampoline looks like this:
/* On the 68k, the trampoline looks like this:
mov @#.,a0
mov @#.,a0
jsr @#__trampoline
jsr @#__
_
trampoline
jsr @#__trampoline
jsr @#__
_
trampoline
.long STATIC
.long STATIC
.long FUNCTION
.long FUNCTION
The reason for having three jsr insns is so that an entire line
The reason for having three jsr insns is so that an entire line
of the instruction cache is filled in a predictable way
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) \
#define TRAMPOLINE_TEMPLATE(FILE) \
{ \
{ \
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x207c)); \
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, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
f
9)); \
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
b
9)); \
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
__trampoline"));
\
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
*___trampoline"));
\
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
f
9)); \
ASM_OUTPUT_SHORT (FILE, gen_rtx (CONST_INT, VOIDmode, 0x4e
b
9)); \
ASM_OUTPUT_INT (FILE, gen_rtx (SYMBOL_REF, SImode, "
__trampoline"));
\
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); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
ASM_OUTPUT_SHORT (FILE, const0_rtx); \
...
@@ -969,6 +972,7 @@ void \
...
@@ -969,6 +972,7 @@ void \
__transfer_from_trampoline () \
__transfer_from_trampoline () \
{ \
{ \
register char *a0 asm ("%a0"); \
register char *a0 asm ("%a0"); \
asm (GLOBAL_ASM_OP, " ___trampoline"); \
asm ("___trampoline:"); \
asm ("___trampoline:"); \
asm volatile ("move%.l %0,%@" : : "m" (a0[22])); \
asm volatile ("move%.l %0,%@" : : "m" (a0[22])); \
asm volatile ("move%.l %1,%0" : "=a" (a0) : "m" (a0[18])); \
asm volatile ("move%.l %1,%0" : "=a" (a0) : "m" (a0[18])); \
...
@@ -1303,6 +1307,8 @@ __transfer_from_trampoline () \
...
@@ -1303,6 +1307,8 @@ __transfer_from_trampoline () \
work properly in synth_mult on the 68020,
work properly in synth_mult on the 68020,
relative to an average of the time for add and the time for shift,
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. */
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) \
#define RTX_COSTS(X,CODE) \
case PLUS: \
case PLUS: \
...
@@ -1345,9 +1351,9 @@ __transfer_from_trampoline () \
...
@@ -1345,9 +1351,9 @@ __transfer_from_trampoline () \
break; \
break; \
} \
} \
else if (GET_MODE (X) == QImode || GET_MODE (X) == HImode) \
else if (GET_MODE (X) == QImode || GET_MODE (X) == HImode) \
return COSTS_N_INSNS (
8);
/* mul.w */
\
return COSTS_N_INSNS (
MULW_COST);
\
else \
else \
return COSTS_N_INSNS (
13);
/* mul.l */
\
return COSTS_N_INSNS (
MULL_COST);
\
break; \
break; \
case DIV: \
case DIV: \
case UDIV: \
case UDIV: \
...
@@ -1473,8 +1479,11 @@ __transfer_from_trampoline () \
...
@@ -1473,8 +1479,11 @@ __transfer_from_trampoline () \
/* This is how to output a command to make the user-level label named NAME
/* This is how to output a command to make the user-level label named NAME
defined for reference from other files. */
defined for reference from other files. */
#define GLOBAL_ASM_OP ".globl"
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
#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.
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
`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. */
...
@@ -38,6 +38,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define LONG_ASM_OP ".long"
#define LONG_ASM_OP ".long"
#define SPACE_ASM_OP ".space"
#define SPACE_ASM_OP ".space"
#define ALIGN_ASM_OP ".align"
#define ALIGN_ASM_OP ".align"
#undef GLOBAL_ASM_OP
#define GLOBAL_ASM_OP ".global"
#define GLOBAL_ASM_OP ".global"
#define SWBEG_ASM_OP ".swbeg"
#define SWBEG_ASM_OP ".swbeg"
#define SET_ASM_OP ".set"
#define SET_ASM_OP ".set"
...
@@ -199,17 +200,6 @@ do { union { float f; long l;} tem; \
...
@@ -199,17 +200,6 @@ do { union { float f; long l;} tem; \
#undef TARGET_VERSION
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (68k, SGS/AT&T syntax)");
#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
#undef PRINT_OPERAND_PRINT_FLOAT
#define PRINT_OPERAND_PRINT_FLOAT(CODE,FILE) \
#define PRINT_OPERAND_PRINT_FLOAT(CODE,FILE) \
asm_fprintf ((FILE), "%I0x%x", u1.i);
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. */
...
@@ -159,10 +159,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
fprintf (FILE, "\tlink %%a6,&%d\n", -fsize); \
fprintf (FILE, "\tlink %%a6,&%d\n", -fsize); \
else \
else \
fprintf (FILE, "\tlink %%a6,&0\n\tsub.l &%d,%%sp\n", fsize); } \
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++) \
for (regno = 16; regno < 24; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
mask |= 1 << (regno - 16); \
mask |= 1 << (regno - 16); \
...
@@ -188,20 +184,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
...
@@ -188,20 +184,15 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
{ register int regno; \
{ register int regno; \
register int mask, fmask; \
register int mask, fmask; \
register int nregs; \
register int nregs; \
int offset, foffset
, fpoffset;
\
int offset, foffset
;
\
extern char call_used_regs[]; \
extern char call_used_regs[]; \
int fsize = ((SIZE) + 3) & -4; \
int fsize = ((SIZE) + 3) & -4; \
int big = 0; \
int big = 0; \
nregs = 0; fmask = 0; fpoffset = 0; \
nregs = 0; fmask = 0; \
for (regno = 24 ; regno < 56 ; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
nregs++; \
fpoffset = nregs*8; \
nregs = 0; \
for (regno = 16; regno < 24; regno++) \
for (regno = 16; regno < 24; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
{ nregs++; fmask |= 1 << (23 - regno); } \
{ nregs++; fmask |= 1 << (23 - regno); } \
foffset =
fpoffset + nregs * 12;
\
foffset =
nregs * 12;
\
nregs = 0; mask = 0; \
nregs = 0; mask = 0; \
if (frame_pointer_needed) regs_ever_live[FRAME_POINTER_REGNUM] = 0; \
if (frame_pointer_needed) regs_ever_live[FRAME_POINTER_REGNUM] = 0; \
for (regno = 0; regno < 16; regno++) \
for (regno = 0; regno < 16; regno++) \
...
@@ -210,7 +201,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
...
@@ -210,7 +201,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
offset = foffset + nregs * 4; \
offset = foffset + nregs * 4; \
if (offset + fsize >= 0x8000 \
if (offset + fsize >= 0x8000 \
&& frame_pointer_needed \
&& frame_pointer_needed \
&& (mask || fmask
|| fpoffset))
\
&& (mask || fmask
))
\
{ fprintf (FILE, "\tmov.l &%d,%%a0\n", -fsize); \
{ fprintf (FILE, "\tmov.l &%d,%%a0\n", -fsize); \
fsize = 0, big = 1; } \
fsize = 0, big = 1; } \
if (exact_log2 (mask) >= 0) { \
if (exact_log2 (mask) >= 0) { \
...
@@ -241,20 +232,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
...
@@ -241,20 +232,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
else \
else \
fprintf (FILE, "\tfmovm -%d(%%a6),&0x%x\n", \
fprintf (FILE, "\tfmovm -%d(%%a6),&0x%x\n", \
foffset + fsize, fmask); } \
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) \
if (current_function_returns_pointer) \
fprintf (FILE, "\tmov.l %%d0,%%a0\n"); \
fprintf (FILE, "\tmov.l %%d0,%%a0\n"); \
if (frame_pointer_needed) \
if (frame_pointer_needed) \
...
@@ -314,16 +291,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
...
@@ -314,16 +291,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 11), \
( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 11), \
sprintf ((OUTPUT), "%s%%%%%d", (NAME), (LABELNO)))
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. */
defined for reference from other files. */
#undef ASM_GLOBALIZE_LABEL
#undef GLOBAL_ASM_OP
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
#define GLOBAL_ASM_OP "global"
do { fputs ("\tglobal ", FILE); \
assemble_name (FILE, NAME); \
fputs ("\n", FILE); \
} while (0)
#undef ASM_GENERATE_INTERNAL_LABEL
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
...
@@ -577,7 +550,9 @@ do { fprintf (asm_out_file, "\tdef\t"); \
...
@@ -577,7 +550,9 @@ do { fprintf (asm_out_file, "\tdef\t"); \
#define PUT_SDB_ENDEF fputs("\tendef\n", asm_out_file)
#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_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_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) \
#define PUT_SDB_TAG(a) \
do { fprintf (asm_out_file, "\ttag\t"); \
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