CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: joerg Date: Tue Mar 18 23:43:41 UTC 2014 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: vax.c vax.h vax.md Log Message: Add a register definition for the Processor Status Word on VAX. Change the unwind definition to specify the CFA base via %fp before using it in the various register locations. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/gnu/dist/gcc4/gcc/config/vax/vax.c cvs rdiff -u -r1.5 -r1.6 src/gnu/dist/gcc4/gcc/config/vax/vax.h cvs rdiff -u -r1.17 -r1.18 src/gnu/dist/gcc4/gcc/config/vax/vax.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.19 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.20 --- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.19 Mon Apr 8 12:10:53 2013 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.c Tue Mar 18 23:43:40 2014 @@ -124,16 +124,22 @@ vax_output_function_prologue (FILE * fil if (dwarf2out_do_frame ()) { const char *label = dwarf2out_cfi_label (); - int offset = 0; + int offset; - for (regno = FIRST_PSEUDO_REGISTER-1; regno = 0; --regno) - if (regs_ever_live[regno] !call_used_regs[regno]) - dwarf2out_reg_save (label, regno, offset -= 4); - - dwarf2out_reg_save (label, PC_REGNUM, offset -= 4); - dwarf2out_reg_save (label, FRAME_POINTER_REGNUM, offset -= 4); - dwarf2out_reg_save (label, ARG_POINTER_REGNUM, offset -= 4); - dwarf2out_def_cfa (label, FRAME_POINTER_REGNUM, -(offset - 4)); + offset = -20; + for (regno = 0; regno FIRST_PSEUDO_REGISTER; ++regno) +if (regs_ever_live[regno] !call_used_regs[regno]) + offset -= 4; + + dwarf2out_def_cfa (label, FRAME_POINTER_REGNUM, -offset); + dwarf2out_reg_save (label, PSW_REGNUM, offset += 4); + dwarf2out_reg_save (label, ARG_POINTER_REGNUM, offset += 4); + dwarf2out_reg_save (label, FRAME_POINTER_REGNUM, offset += 4); + dwarf2out_reg_save (label, PC_REGNUM, offset += 4); + + for (regno = 0; regno FIRST_PSEUDO_REGISTER; ++regno) +if (regs_ever_live[regno] !call_used_regs[regno]) + dwarf2out_reg_save (label, regno, offset += 4); } size -= STARTING_FRAME_OFFSET; Index: src/gnu/dist/gcc4/gcc/config/vax/vax.h diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.5 src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.6 --- src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.5 Mon Apr 2 16:44:17 2007 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.h Tue Mar 18 23:43:40 2014 @@ -166,6 +166,9 @@ Boston, MA 02110-1301, USA. */ /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ +/* VAX PSW for DWARF-2 */ +#define PSW_REGNUM VAX_PSW_REGNUM + /* VAX pc is overloaded on a register. */ #define PC_REGNUM VAX_PC_REGNUM Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.18 --- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.17 Mon Apr 8 12:10:53 2013 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.md Tue Mar 18 23:43:40 2014 @@ -40,6 +40,7 @@ (VAX_FP_REGNUM 13) ; Register 13 contains the frame pointer (VAX_SP_REGNUM 14) ; Register 14 contains the stack pointer (VAX_PC_REGNUM 15) ; Register 15 contains the program counter + (VAX_PSW_REGNUM 16) ; Program Status Word ] )
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Mon Jul 16 17:39:29 UTC 2012 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: builtins.md vax.md Log Message: Fix ffssi2 again. Use a UNSPEC for the internal ffs. use (match_dup 1) since Z will be set if it is 0 just as if tst:SI was done. This can let gcc produce better code if you code appropriately. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/gnu/dist/gcc4/gcc/config/vax/builtins.md cvs rdiff -u -r1.15 -r1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/builtins.md diff -u src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3 src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.4 --- src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3 Wed Jul 11 13:34:45 2012 +++ src/gnu/dist/gcc4/gcc/config/vax/builtins.md Mon Jul 16 17:39:29 2012 @@ -25,7 +25,7 @@ { rtx label = gen_label_rtx (); - emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[1])); + emit_insn (gen_unspec_ffssi2 (operands[0], operands[1])); emit_jump_insn (gen_bne (label)); emit_insn (gen_negsi2 (operands[0], const1_rtx)); emit_label (label); @@ -33,9 +33,15 @@ DONE; }) -(define_insn ffssi2_internal +;; +;; Set cc0 to match argument 1 since if it is 0, Z will be set just as +;; if a tst:SI was performed. If we did a match_dup 0, that wouldn't be +;; right since 0 will be set to (0+32) [the position (relative to the base) +;; of a bit one position to the left of the specified field]. +;; +(define_insn unspec_ffssi2 [(set (match_operand:SI 0 nonimmediate_operand =g) -(ffs:SI (match_operand:SI 1 general_operand nrQ))) - (set (cc0) (ffs:SI (match_operand:SI 2 general_operand 1)))] +(unspec:SI [(match_operand:SI 1 general_operand nrQ)] VUNSPEC_FFS)) + (set (cc0) (match_dup 1))] ffs $0,$32,%1,%0) Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.16 --- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15 Sun Feb 5 17:34:34 2012 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.md Mon Jul 16 17:39:29 2012 @@ -34,6 +34,8 @@ [(VUNSPEC_BLOCKAGE 0) ; `blockage' insn to prevent scheduling across an ; insn in the code. (VUNSPEC_SYNC_ISTREAM 1) ; sequence of insns to sync the I-stream + (VUNSPEC_FFS 2) ; internal FFS for the expand + (VUNSPEC_FFC 3) ; internal FFC for the expand (VAX_AP_REGNUM 12) ; Register 12 contains the argument pointer (VAX_FP_REGNUM 13) ; Register 13 contains the frame pointer (VAX_SP_REGNUM 14) ; Register 14 contains the stack pointer
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: ragge Date: Wed Jul 11 13:34:45 UTC 2012 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: builtins.md Log Message: Bugfix builtin ffs, fixes PR port-vax/46677, fix from Paul Koning. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/gnu/dist/gcc4/gcc/config/vax/builtins.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/builtins.md diff -u src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.2 src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3 --- src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.2 Mon Apr 2 16:45:39 2007 +++ src/gnu/dist/gcc4/gcc/config/vax/builtins.md Wed Jul 11 13:34:45 2012 @@ -25,7 +25,7 @@ { rtx label = gen_label_rtx (); - emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[0])); + emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[1])); emit_jump_insn (gen_bne (label)); emit_insn (gen_negsi2 (operands[0], const1_rtx)); emit_label (label); @@ -36,6 +36,6 @@ (define_insn ffssi2_internal [(set (match_operand:SI 0 nonimmediate_operand =g) (ffs:SI (match_operand:SI 1 general_operand nrQ))) - (set (cc0) (match_operand:SI 2 nonimmediate_operand 0))] + (set (cc0) (ffs:SI (match_operand:SI 2 general_operand 1)))] ffs $0,$32,%1,%0)
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Sun Feb 5 17:34:34 UTC 2012 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: vax.c vax.md Log Message: Use REG_P, CONST_INT_P, and gcc_unreachable. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/gnu/dist/gcc4/gcc/config/vax/vax.c cvs rdiff -u -r1.14 -r1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.18 --- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17 Thu Feb 2 18:33:03 2012 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.c Sun Feb 5 17:34:34 2012 @@ -1097,14 +1097,14 @@ vax_output_int_move (rtx insn ATTRIBUTE_ || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC || GET_CODE (XEXP (operands[0], 0)) == POST_INC || !illegal_addsub_di_memory_operand (operands[0], DImode)) - ((GET_CODE (operands[1]) == CONST_INT + ((CONST_INT_P (operands[1]) (unsigned HOST_WIDE_INT) INTVAL (operands[1]) = 64) || GET_CODE (operands[1]) == CONST_DOUBLE)) { hi[0] = operands[0]; hi[1] = operands[1]; - split_quadword_operands(insn, SET, hi, lo, 2); + split_quadword_operands (insn, SET, hi, lo, 2); pattern_lo = vax_output_int_move (NULL, lo, SImode); pattern_hi = vax_output_int_move (NULL, hi, SImode); @@ -1549,12 +1549,12 @@ mkrtx(enum rtx_code code, enum machine_m rtx b = XEXP (base, 1); if (GET_CODE (b) == CONST) b = XEXP (b, 0); - if (GET_CODE (b) == CONST_INT) + if (CONST_INT_P (b)) { off += INTVAL (b); base = a; } - else if (GET_CODE (a) == REG GET_CODE (b) == SYMBOL_REF) + else if (REG_P (a) GET_CODE (b) == SYMBOL_REF) { if (off != 0) { @@ -1562,7 +1562,7 @@ mkrtx(enum rtx_code code, enum machine_m off = 0; } } - else if (GET_CODE (a) == REG GET_CODE (b) == PLUS) + else if (REG_P (a) GET_CODE (b) == PLUS) { off += INTVAL (XEXP (b, 1)); base = gen_rtx_PLUS (Pmode, a, plus_constant(XEXP (b, 0), off)); @@ -1570,8 +1570,8 @@ mkrtx(enum rtx_code code, enum machine_m } else { - print_rtl(stderr, base); fprintf(stderr, \n); - gcc_assert(0); + debug_rtx(base); + gcc_unreachable (); } } if (code == POST_INC) Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15 --- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14 Tue Jul 27 16:30:38 2010 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.md Sun Feb 5 17:34:34 2012 @@ -191,7 +191,7 @@ * { - if (GET_CODE (operands[1]) == CONST_INT) + if (CONST_INT_P (operands[1])) { int i = INTVAL (operands[1]); if (i == 0) @@ -212,7 +212,7 @@ * { - if (GET_CODE (operands[1]) == CONST_INT) + if (CONST_INT_P (operands[1])) { int i = INTVAL (operands[1]); if (i == 0) @@ -565,14 +565,14 @@ rtx op1 = operands[1]; /* If there is a constant argument, complement that one. */ - if (GET_CODE (operands[2]) == CONST_INT GET_CODE (op1) != CONST_INT) + if (CONST_INT_P (operands[2]) ! CONST_INT_P (op1)) { operands[1] = operands[2]; operands[2] = op1; op1 = operands[1]; } - if (GET_CODE (op1) == CONST_INT) + if (CONST_INT_P (op1)) operands[1] = GEN_INT (~INTVAL (op1)); else operands[1] = expand_unop (MODEmode, one_cmpl_optab, op1, 0, 1); @@ -658,7 +658,7 @@ { - if (GET_CODE (operands[2]) != CONST_INT) + if (! CONST_INT_P (operands[2])) operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2])); }) @@ -685,8 +685,7 @@ { if (operands[2] == const1_rtx rtx_equal_p (operands[0], operands[1])) return \addl2 %0,%0\; - if (GET_CODE (operands[1]) == REG - GET_CODE (operands[2]) == CONST_INT) + if (REG_P (operands[1]) CONST_INT_P (operands[2])) { int i = INTVAL (operands[2]); if (i == 1) @@ -760,7 +759,7 @@ { - if (GET_CODE (operands[2]) != CONST_INT) + if (! CONST_INT_P (operands[2])) operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2])); }) @@ -806,7 +805,7 @@ (match_operand:SI 3 general_operand g))] (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16) INTVAL (operands[2]) % INTVAL (operands[1]) == 0 -(GET_CODE (operands[0]) == REG +(REG_P (operands[0]) || ! mode_dependent_address_p (XEXP (operands[0], 0))) * { @@ -834,7 +833,7 @@ (match_operand:SI 3 const_int_operand n)))] (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16) INTVAL (operands[3]) % INTVAL (operands[2]) == 0 -(GET_CODE (operands[1]) == REG +(REG_P (operands[1]) || ! mode_dependent_address_p (XEXP (operands[1], 0))) * { @@ -861,7
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Thu Feb 2 13:32:18 UTC 2012 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: vax.c Log Message: Fix a bug in movmemsi in which couldn't handle sym(reg) expressions properly. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16 --- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.15 Fri Apr 20 16:30:32 2007 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.c Thu Feb 2 13:32:17 2012 @@ -1545,8 +1545,29 @@ mkrtx(enum rtx_code code, enum machine_m if (GET_CODE (base) == PLUS) { - off += INTVAL (XEXP (base, 1)); - base = XEXP (base, 0); + rtx a = XEXP (base, 0); + rtx b = XEXP (base, 1); + if (GET_CODE (b) == CONST_INT) + { + off += INTVAL (b); + base = a; + } + else if (GET_CODE (a) == REG GET_CODE (b) == SYMBOL_REF) + { + if (off != 0) + { + base = gen_rtx_PLUS (Pmode, a, plus_constant(b, off)); + off = 0; + } + } + else if (GET_CODE (a) == REG GET_CODE (b) == PLUS) + { + off += INTVAL (XEXP (b, 1)); + base = gen_rtx_PLUS (Pmode, a, plus_constant(XEXP (b, 0), off)); + off = 0; + } + else + gcc_assert(0); } if (code == POST_INC) tmp = gen_rtx_POST_INC (SImode, base);
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Thu Feb 2 18:33:04 UTC 2012 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: vax.c Log Message: Handle another case the new gcc_assert(0) caught. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17 --- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16 Thu Feb 2 13:32:17 2012 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.c Thu Feb 2 18:33:03 2012 @@ -1547,6 +1547,8 @@ mkrtx(enum rtx_code code, enum machine_m { rtx a = XEXP (base, 0); rtx b = XEXP (base, 1); + if (GET_CODE (b) == CONST) + b = XEXP (b, 0); if (GET_CODE (b) == CONST_INT) { off += INTVAL (b); @@ -1567,7 +1569,10 @@ mkrtx(enum rtx_code code, enum machine_m off = 0; } else - gcc_assert(0); +{ + print_rtl(stderr, base); fprintf(stderr, \n); + gcc_assert(0); + } } if (code == POST_INC) tmp = gen_rtx_POST_INC (SImode, base);
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Wed Dec 22 02:58:35 UTC 2010 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: elf.h Log Message: Emit DWARF relocation in its expected form To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/gnu/dist/gcc4/gcc/config/vax/elf.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/elf.h diff -u src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.3 src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.4 --- src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.3 Sat Mar 31 05:55:11 2007 +++ src/gnu/dist/gcc4/gcc/config/vax/elf.h Wed Dec 22 02:58:35 2010 @@ -107,5 +107,5 @@ fputs (integer_asm_op (SIZE, FALSE), FILE); \ fprintf (FILE, %%pcrel%d(, SIZE * 8); \ assemble_name (FILE, LABEL); \ -fputc (')', FILE); \ +fprintf (FILE, %+d), SIZE); \ } while (0)
CVS commit: src/gnu/dist/gcc4/gcc/config/vax
Module Name:src Committed By: matt Date: Tue Jul 27 16:30:38 UTC 2010 Modified Files: src/gnu/dist/gcc4/gcc/config/vax: vax.md Log Message: Don't use/rely on a constraint. Move the constraint predicate to the pattern's condition. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/gnu/dist/gcc4/gcc/config/vax/vax.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.13 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14 --- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.13 Tue Jul 27 01:13:41 2010 +++ src/gnu/dist/gcc4/gcc/config/vax/vax.md Tue Jul 27 16:30:38 2010 @@ -1129,16 +1129,17 @@ (define_insn [(set (pc) (if_then_else - (ne (zero_extract:SI (match_operand:QI 0 memory_operand Q) + (ne (zero_extract:SI (match_operand:QI 0 memory_operand g) (const_int 1) (const_int 0)) (const_int 0)) (label_ref (match_operand 1 )) (pc)))] - GET_CODE (XEXP (operands[0], 0)) != PLUS - || !REG_P (XEXP (XEXP (operands[0], 0), 0)) - || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1)) - || (INTVAL (XEXP (XEXP (operands[0], 0), 1)) 3) == 0 + ! mode_dependent_address_p (XEXP (operands[0], 0)) +(GET_CODE (XEXP (operands[0], 0)) != PLUS + || !REG_P (XEXP (XEXP (operands[0], 0), 0)) + || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1)) + || (INTVAL (XEXP (XEXP (operands[0], 0), 1)) 3) == 0) jlbs %0,%l1) (define_insn @@ -1156,16 +1157,17 @@ (define_insn [(set (pc) (if_then_else - (eq (zero_extract:SI (match_operand:QI 0 memory_operand Q) + (eq (zero_extract:SI (match_operand:QI 0 memory_operand g) (const_int 1) (const_int 0)) (const_int 0)) (label_ref (match_operand 1 )) (pc)))] - GET_CODE (XEXP (operands[0], 0)) != PLUS - || !REG_P (XEXP (XEXP (operands[0], 0), 0)) - || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1)) - || (INTVAL (XEXP (XEXP (operands[0], 0), 1)) 3) == 0 + ! mode_dependent_address_p (XEXP (operands[0], 0)) +(GET_CODE (XEXP (operands[0], 0)) != PLUS + || !REG_P (XEXP (XEXP (operands[0], 0), 0)) + || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1)) + || (INTVAL (XEXP (XEXP (operands[0], 0), 1)) 3) == 0) jlbc %0,%l1) (define_insn