From b6aa31c56a6255282d71d5dd2df2c05f66d8a374 Mon Sep 17 00:00:00 2001 From: Jason Thorpe Date: Tue, 1 Oct 2002 22:24:02 +0000 Subject: [PATCH] Oops, this file missed in previous checkin. 2002-10-01 Matt Thomas Jason Thorpe * 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 * 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 --- gcc/config/vax/vax.h | 66 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index f4d74ac7707..c0db2175e81 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -288,16 +288,28 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; #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. This macro defines what the ranges are. C is the letter, and VALUE is a constant value. 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) \ - ((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) /* 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 }; 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) \ @@ -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, 11)), \ 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 @@ -787,6 +796,10 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; jumps to the default label instead. */ #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 DEFAULT_SIGNED_CHAR 1 @@ -1062,19 +1075,39 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; It need not be very fast code. */ #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. (The VAX does not use such vectors, but we must define this macro anyway.) */ -#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ - fprintf (FILE, "\t.long L%d\n", VALUE) +#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, 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. */ -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - fprintf (FILE, "\t.word L%d-L%d\n", VALUE, REL) +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, 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 that says to advance the location counter @@ -1152,10 +1185,12 @@ VAX operand formatting codes: which is not a 64-bit minus one. */ #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ - ((CODE) == '#') + ((CODE) == '#' || (CODE) == '|') #define PRINT_OPERAND(FILE, X, CODE) \ { if (CODE == '#') fputc (ASM_DOUBLE_CHAR, FILE); \ + else if (CODE == '|') \ + fputs (REGISTER_PREFIX, FILE); \ else if (CODE == 'C') \ fputs (rev_cond_name (X), FILE); \ else if (CODE == 'D' && GET_CODE (X) == CONST_INT && INTVAL (X) < 0) \ @@ -1198,3 +1233,8 @@ VAX operand formatting codes: #define 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) -- 2.30.2