Commit b6aa31c5 by Jason Thorpe

Oops, this file missed in previous checkin.

2002-10-01  Matt Thomas  <matt@3am-software.com>
            Jason Thorpe  <thorpej@wasabisystems.com>

* config.gcc (vax-*-netbsdelf*): Enable configuration.
* config/elfos.h (PCC_BITFIELD_TYPE_MATTERS): Define only
if not already defined.
* config/vax/elf.h: New file.
* config/vax/netbsd-elf.h: New file.
* config/vax/vax.c: Include "debug.h".
(vax_output_function_prologue): Add dwarf2 support.  Use
MAIN_NAME_P when checking for VMS_TARGET stack adjust.
* config/vax/vax.h (CONST_OK_FOR_LETTER_P): Add cases for
'J' [0..63], 'K' [-128..127], 'L' [-32768..32767],
'M' [0..255], 'N' [0..65535], and, 'O' [-63..-1].
(VAX_ISTREAM_SYNC): Remove.
(INITIALIZE_TRAMPOLINE): Use gen_sync_istream.
(JUMP_TABLES_IN_TEXT_SECTION): Define.
(ASM_OUTPUT_REG_POP): Use reg_names for the stack pointer.
(ASM_OUTPUT_ADDR_VEC_ELT): Use ASM_GENERATE_INTERNAL_LABEL
and assemble_name.
(ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
(PRINT_OPERAND_PUNCT_VALID_P): Accept '|'.
(PRINT_OPERAND): Output REGISTER_PREFIX for '|'.
(INCOMING_RETURN_ADDR_RTX): Define.
* config/vax/vax.md (VUNSPEC_BLOCKAGE)
(VUNSPEC_SYNC_ISTREAM): Define.
(blockage): Use VUNSPEC_BLOCKAGE.
(sync_istream): New insn.


2002-10-01  Richard Henderson  <rth@redhat.com>

* config/vax/vax.md (call_pop, *call_pop, call_value_pop)
(*call_value_pop, call, call_value): Add dwarf2 EH support.
(*call): New insn.

From-SVN: r57711
parent a1d1a0f9
...@@ -288,16 +288,28 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; ...@@ -288,16 +288,28 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
#define REG_CLASS_FROM_LETTER(C) NO_REGS #define REG_CLASS_FROM_LETTER(C) NO_REGS
/* The letters I, J, K, L and M in a register constraint string /* The letters I, J, K, L, M, N, and O in a register constraint string
can be used to stand for particular ranges of immediate operands. can be used to stand for particular ranges of immediate operands.
This macro defines what the ranges are. This macro defines what the ranges are.
C is the letter, and VALUE is a constant value. C is the letter, and VALUE is a constant value.
Return 1 if VALUE is in the range specified by C. Return 1 if VALUE is in the range specified by C.
`I' is the constant zero. */ `I' is the constant zero.
`J' is a value between 0 .. 63 (inclusive)
`K' is a value between -128 and 127 (inclusive)
'L' is a value between -32768 and 32767 (inclusive)
`M' is a value between 0 and 255 (inclusive)
'N' is a value between 0 and 65535 (inclusive)
`O' is a value between -63 and -1 (inclusive) */
#define CONST_OK_FOR_LETTER_P(VALUE, C) \ #define CONST_OK_FOR_LETTER_P(VALUE, C) \
((C) == 'I' ? (VALUE) == 0 \ ( (C) == 'I' ? (VALUE) == 0 \
: (C) == 'J' ? 0 <= (VALUE) && (VALUE) < 64 \
: (C) == 'O' ? -63 <= (VALUE) && (VALUE) < 0 \
: (C) == 'K' ? -128 <= (VALUE) && (VALUE) < 128 \
: (C) == 'M' ? 0 <= (VALUE) && (VALUE) < 256 \
: (C) == 'L' ? -32768 <= (VALUE) && (VALUE) < 32768 \
: (C) == 'N' ? 0 <= (VALUE) && (VALUE) < 65536 \
: 0) : 0)
/* Similar, but for floating constants, and defining letters G and H. /* Similar, but for floating constants, and defining letters G and H.
...@@ -505,9 +517,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; ...@@ -505,9 +517,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
FNADDR is an RTX for the address of the function's pure code. 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. */ 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 /* We copy the register-mask from the function's pure code
to the start of the trampoline. */ to the start of the trampoline. */
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
...@@ -517,7 +526,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; ...@@ -517,7 +526,7 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
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)), \ emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 11)), \
plus_constant (FNADDR, 2)); \ plus_constant (FNADDR, 2)); \
emit_insn (gen_rtx_ASM_INPUT (VOIDmode, VAX_ISTREAM_SYNC)); \ emit_insn (gen_sync_istream ()); \
} }
/* Byte offset of return address in a stack frame. The "saved PC" field /* Byte offset of return address in a stack frame. The "saved PC" field
...@@ -787,6 +796,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; ...@@ -787,6 +796,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
jumps to the default label instead. */ jumps to the default label instead. */
#define CASE_DROPS_THROUGH #define CASE_DROPS_THROUGH
/* Indicate that jump tables go in the text section. This is
necessary when compiling PIC code. */
#define JUMP_TABLES_IN_TEXT_SECTION 1
/* Define this as 1 if `char' should by default be signed; else as 0. */ /* Define this as 1 if `char' should by default be signed; else as 0. */
#define DEFAULT_SIGNED_CHAR 1 #define DEFAULT_SIGNED_CHAR 1
...@@ -1062,19 +1075,39 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; ...@@ -1062,19 +1075,39 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
It need not be very fast code. */ It need not be very fast code. */
#define ASM_OUTPUT_REG_POP(FILE,REGNO) \ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
fprintf (FILE, "\tmovl (sp)+,%s\n", reg_names[REGNO]) fprintf (FILE, "\tmovl (%s)+,%s\n", reg_names[STACK_POINTER_REGNUM], \
reg_names[REGNO])
/* This is how to output an element of a case-vector that is absolute. /* This is how to output an element of a case-vector that is absolute.
(The VAX does not use such vectors, (The VAX does not use such vectors,
but we must define this macro anyway.) */ but we must define this macro anyway.) */
#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
fprintf (FILE, "\t.long L%d\n", VALUE) do \
{ \
char label[256]; \
ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));\
fprintf (FILE, "\t.long "); \
assemble_name (FILE, label); \
fprintf (FILE, "\n"); \
} \
while (0)
/* This is how to output an element of a case-vector that is relative. */ /* This is how to output an element of a case-vector that is relative. */
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
fprintf (FILE, "\t.word L%d-L%d\n", VALUE, REL) do \
{ \
char label[256]; \
ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
fprintf (FILE, "\t.word "); \
assemble_name (FILE, label); \
ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
fprintf (FILE, "-"); \
assemble_name (FILE, label); \
fprintf (FILE, "\n"); \
} \
while (0)
/* This is how to output an assembler line /* This is how to output an assembler line
that says to advance the location counter that says to advance the location counter
...@@ -1152,10 +1185,12 @@ VAX operand formatting codes: ...@@ -1152,10 +1185,12 @@ VAX operand formatting codes:
which is not a 64-bit minus one. */ which is not a 64-bit minus one. */
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
((CODE) == '#') ((CODE) == '#' || (CODE) == '|')
#define PRINT_OPERAND(FILE, X, CODE) \ #define PRINT_OPERAND(FILE, X, CODE) \
{ if (CODE == '#') fputc (ASM_DOUBLE_CHAR, FILE); \ { if (CODE == '#') fputc (ASM_DOUBLE_CHAR, FILE); \
else if (CODE == '|') \
fputs (REGISTER_PREFIX, FILE); \
else if (CODE == 'C') \ else if (CODE == 'C') \
fputs (rev_cond_name (X), FILE); \ fputs (rev_cond_name (X), FILE); \
else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \ else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \
...@@ -1198,3 +1233,8 @@ VAX operand formatting codes: ...@@ -1198,3 +1233,8 @@ VAX operand formatting codes:
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
print_operand_address (FILE, ADDR) print_operand_address (FILE, ADDR)
/* This is a blatent lie. However, it's good enough, since we don't
actually have any code whatsoever for which this isn't overridden
by the proper FDE definition. */
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, PC_REGNUM)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment