mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 06:06:40 +08:00
vax.c (vax_output_function_prologue): Use REGISTER_PREFIX.
2002-06-21 Matt Thomas <matt@3am-software.com> * config/vax/vax.c (vax_output_function_prologue): Use REGISTER_PREFIX. Fix some indentation. * config/vax/vax.h (FUNCTION_PROFILER): Use reg_names[]. (VAX_ISTREAM_SYNC): Define. (INITIALIZE_TRAMPOLINE): Use VAX_ISTREAM_SYNC. Move the i-stream sync to the end. (REGISTER_PREFIX): Define as "". (ASM_OUTPUT_MI_THUNK): Use REGISTER_PREFIX. From-SVN: r54894
This commit is contained in:
parent
1c655a0dcc
commit
2336109344
@ -1,3 +1,14 @@
|
||||
2002-06-21 Matt Thomas <matt@3am-software.com>
|
||||
|
||||
* config/vax/vax.c (vax_output_function_prologue): Use
|
||||
REGISTER_PREFIX. Fix some indentation.
|
||||
* config/vax/vax.h (FUNCTION_PROFILER): Use reg_names[].
|
||||
(VAX_ISTREAM_SYNC): Define.
|
||||
(INITIALIZE_TRAMPOLINE): Use VAX_ISTREAM_SYNC. Move the
|
||||
i-stream sync to the end.
|
||||
(REGISTER_PREFIX): Define as "".
|
||||
(ASM_OUTPUT_MI_THUNK): Use REGISTER_PREFIX.
|
||||
|
||||
2002-06-21 Jason Thorpe <thorpej@wasabisystems.com>
|
||||
|
||||
* config.gcc (ns32k-*-netbsd*): Remove from list of obsolete
|
||||
|
@ -120,14 +120,16 @@ vax_output_function_prologue (file, size)
|
||||
}
|
||||
|
||||
if (is_main)
|
||||
fprintf (file, "\t%s\n\t%s\n", "clrl -(sp)", "jsb _C$MAIN_ARGS");
|
||||
fprintf (file, "\tclrl -(%ssp)\n\tjsb _C$MAIN_ARGS\n",
|
||||
REGISTER_PREFIX);
|
||||
}
|
||||
|
||||
size -= STARTING_FRAME_OFFSET;
|
||||
if (size >= 64)
|
||||
fprintf (file, "\tmovab %d(sp),sp\n", -size);
|
||||
else if (size)
|
||||
fprintf (file, "\tsubl2 $%d,sp\n", size);
|
||||
size -= STARTING_FRAME_OFFSET;
|
||||
if (size >= 64)
|
||||
fprintf (file, "\tmovab %d(%ssp),%ssp\n", -size, REGISTER_PREFIX,
|
||||
REGISTER_PREFIX);
|
||||
else if (size)
|
||||
fprintf (file, "\tsubl2 $%d,%ssp\n", size, REGISTER_PREFIX);
|
||||
}
|
||||
|
||||
/* This is like nonimmediate_operand with a restriction on the type of MEM. */
|
||||
|
@ -456,7 +456,8 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
|
||||
for profiling a function entry. */
|
||||
|
||||
#define FUNCTION_PROFILER(FILE, LABELNO) \
|
||||
fprintf (FILE, "\tmovab LP%d,r0\n\tjsb mcount\n", (LABELNO));
|
||||
fprintf (FILE, "\tmovab LP%d,%s\n\tjsb mcount\n", (LABELNO), \
|
||||
reg_names[0]);
|
||||
|
||||
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
|
||||
the stack pointer does not matter. The value is tested only in
|
||||
@ -501,17 +502,19 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
|
||||
FNADDR is an RTX for the address of the function's pure code.
|
||||
CXT is an RTX for the static chain value for the function. */
|
||||
|
||||
/* Allow this be overriden with the correct register prefixes. */
|
||||
#define VAX_ISTREAM_SYNC "movpsl -(sp)\n\tpushal 1(pc)\n\trei"
|
||||
|
||||
/* We copy the register-mask from the function's pure code
|
||||
to the start of the trampoline. */
|
||||
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
|
||||
{ \
|
||||
emit_insn (gen_rtx_ASM_INPUT (VOIDmode, \
|
||||
"movpsl -(sp)\n\tpushal 1(pc)\n\trei")); \
|
||||
emit_move_insn (gen_rtx_MEM (HImode, TRAMP), \
|
||||
gen_rtx_MEM (HImode, FNADDR)); \
|
||||
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 4)), CXT);\
|
||||
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 4)), CXT); \
|
||||
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 11)), \
|
||||
plus_constant (FNADDR, 2)); \
|
||||
emit_insn (gen_rtx_ASM_INPUT (VOIDmode, VAX_ISTREAM_SYNC)); \
|
||||
}
|
||||
|
||||
/* Byte offset of return address in a stack frame. The "saved PC" field
|
||||
@ -1015,8 +1018,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
|
||||
#define DATA_SECTION_ASM_OP "\t.data"
|
||||
|
||||
/* How to refer to registers in assembler output.
|
||||
This sequence is indexed by compiler's hard-register-number (see above). */
|
||||
This sequence is indexed by compiler's hard-register-number (see above).
|
||||
The register names will be prefixed by REGISTER_PREFIX, if any. */
|
||||
|
||||
#define REGISTER_PREFIX ""
|
||||
#define REGISTER_NAMES \
|
||||
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
|
||||
"r9", "r10", "r11", "ap", "fp", "sp", "pc"}
|
||||
@ -1143,13 +1148,13 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
|
||||
addl2 $DELTA, 4(ap) #adjust first argument
|
||||
jmp FUNCTION+2 #jump beyond FUNCTION's entry mask
|
||||
*/
|
||||
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
|
||||
do { \
|
||||
fprintf (FILE, "\t.word 0x0ffc\n"); \
|
||||
fprintf (FILE, "\taddl2 $%d,4(ap)\n", DELTA); \
|
||||
fprintf (FILE, "\tjmp "); \
|
||||
assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
|
||||
fprintf (FILE, "+2\n"); \
|
||||
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
|
||||
do { \
|
||||
fprintf (FILE, "\t.word 0x0ffc\n"); \
|
||||
fprintf (FILE, "\taddl2 $%d,4(%sap)\n", DELTA, REGISTER_PREFIX); \
|
||||
fprintf (FILE, "\tjmp "); \
|
||||
assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
|
||||
fprintf (FILE, "+2\n"); \
|
||||
} while (0)
|
||||
|
||||
/* Print an instruction operand X on file FILE.
|
||||
|
Loading…
Reference in New Issue
Block a user