Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/gpl3/gcc/dist/gcc Revert previous changes until we ...
details: https://anonhg.NetBSD.org/src/rev/7c8dd64dbebc
branches: trunk
changeset: 344349:7c8dd64dbebc
user: christos <christos%NetBSD.org@localhost>
date: Wed Mar 23 15:51:36 2016 +0000
description:
Revert previous changes until we can test them better.
diffstat:
external/gpl3/gcc/dist/gcc/config/vax/elf.h | 18 +++++-
external/gpl3/gcc/dist/gcc/config/vax/vax.c | 3 +-
external/gpl3/gcc/dist/gcc/config/vax/vax.h | 6 +-
external/gpl3/gcc/dist/gcc/config/vax/vax.md | 76 +++++++++++++++++++--------
external/gpl3/gcc/dist/gcc/except.c | 3 +-
5 files changed, 73 insertions(+), 33 deletions(-)
diffs (207 lines):
diff -r c9d38128062b -r 7c8dd64dbebc external/gpl3/gcc/dist/gcc/config/vax/elf.h
--- a/external/gpl3/gcc/dist/gcc/config/vax/elf.h Wed Mar 23 12:52:43 2016 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/vax/elf.h Wed Mar 23 15:51:36 2016 +0000
@@ -45,8 +45,18 @@
count pushed by the CALLS and before the start of the saved registers. */
#define INCOMING_FRAME_SP_OFFSET 0
-/* We use R2-R3 (call-clobbered) registers for exceptions. */
-#define EH_RETURN_DATA_REGNO(N) ((N) < 2 ? (N) + 2 : INVALID_REGNUM)
+/* Offset from the frame pointer register value to the top of the stack. */
+#define FRAME_POINTER_CFA_OFFSET(FNDECL) 0
+
+/* We use R2-R5 (call-clobbered) registers for exceptions. */
+#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N) + 2 : INVALID_REGNUM)
+
+/* Place the top of the stack for the DWARF2 EH stackadj value. */
+#define EH_RETURN_STACKADJ_RTX \
+ gen_rtx_MEM (SImode, \
+ plus_constant (Pmode, \
+ gen_rtx_REG (Pmode, FRAME_POINTER_REGNUM),\
+ -4))
/* Simple store the return handler into the call frame. */
#define EH_RETURN_HANDLER_RTX \
@@ -56,6 +66,10 @@
16))
+/* Reserve the top of the stack for exception handler stackadj value. */
+#undef STARTING_FRAME_OFFSET
+#define STARTING_FRAME_OFFSET -4
+
/* The VAX wants no space between the case instruction and the jump table. */
#undef ASM_OUTPUT_BEFORE_CASE_LABEL
#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE)
diff -r c9d38128062b -r 7c8dd64dbebc external/gpl3/gcc/dist/gcc/config/vax/vax.c
--- a/external/gpl3/gcc/dist/gcc/config/vax/vax.c Wed Mar 23 12:52:43 2016 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/vax/vax.c Wed Mar 23 15:51:36 2016 +0000
@@ -195,8 +195,7 @@
offset = 20;
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
- if ((df_regs_ever_live_p (regno) && !call_used_regs[regno])
- || (crtl->calls_eh_return && regno >= 2 && regno < 4))
+ if (df_regs_ever_live_p (regno) && !call_used_regs[regno])
{
mask |= 1 << regno;
offset += 4;
diff -r c9d38128062b -r 7c8dd64dbebc external/gpl3/gcc/dist/gcc/config/vax/vax.h
--- a/external/gpl3/gcc/dist/gcc/config/vax/vax.h Wed Mar 23 12:52:43 2016 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/vax/vax.h Wed Mar 23 15:51:36 2016 +0000
@@ -169,12 +169,12 @@
/* Base register for access to local variables of the function. */
#define FRAME_POINTER_REGNUM VAX_FP_REGNUM
+/* Offset from the frame pointer register value to the top of stack. */
+#define FRAME_POINTER_CFA_OFFSET(FNDECL) 0
+
/* Base register for access to arguments of the function. */
#define ARG_POINTER_REGNUM VAX_AP_REGNUM
-/* Offset from the argument pointer register value to the CFA. */
-#define ARG_POINTER_CFA_OFFSET(FNDECL) 0
-
/* Register in which static-chain is passed to a function. */
#define STATIC_CHAIN_REGNUM 0
diff -r c9d38128062b -r 7c8dd64dbebc external/gpl3/gcc/dist/gcc/config/vax/vax.md
--- a/external/gpl3/gcc/dist/gcc/config/vax/vax.md Wed Mar 23 12:52:43 2016 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/vax/vax.md Wed Mar 23 15:51:36 2016 +0000
@@ -18,11 +18,6 @@
;; <http://www.gnu.org/licenses/>.
-;; Note that operand 1 is total size of args, in bytes,
-;; and what the call insn wants is the number of words.
-;; It is used in the call instruction as a byte, but in the addl2 as
-;; a word. Since the only time we actually use it in the call instruction
-;; is when it is a constant, SImode (for addl2) is the proper mode.
;;- Instruction patterns. When multiple patterns apply,
;;- the first one in the file is chosen.
;;-
@@ -1314,11 +1309,6 @@
""
"decl %0\;jgequ %l1")
-;; Note that operand 1 is total size of args, in bytes,
-;; and what the call insn wants is the number of words.
-;; It is used in the call instruction as a byte, but in the addl2 as
-;; a word. Since the only time we actually use it in the call instruction
-;; is when it is a constant, SImode (for addl2) is the proper mode.
(define_expand "call_pop"
[(parallel [(call (match_operand:QI 0 "memory_operand" "")
(match_operand:SI 1 "const_int_operand" ""))
@@ -1327,17 +1317,24 @@
(match_operand:SI 3 "immediate_operand" "")))])]
""
{
- gcc_assert (INTVAL (operands[1]) <= 255 * 4);
- operands[1] = GEN_INT ((INTVAL (operands[1]) + 3) / 4);
+ gcc_assert (INTVAL (operands[3]) <= 255 * 4 && INTVAL (operands[3]) % 4 == 0);
+
+ /* Operand 1 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[1] = GEN_INT (INTVAL (operands[3]) + 4);
})
(define_insn "*call_pop"
[(call (match_operand:QI 0 "memory_operand" "m")
(match_operand:SI 1 "const_int_operand" "n"))
(set (reg:SI VAX_SP_REGNUM) (plus:SI (reg:SI VAX_SP_REGNUM)
- (match_operand:SI 2 "immediate_operand" "i")))]
+ (match_operand:SI 2 "immediate_operand" "i")))]
""
- "calls %1,%0")
+{
+ operands[1] = GEN_INT ((INTVAL (operands[1]) - 4) / 4);
+ return "calls %1,%0";
+})
(define_expand "call_value_pop"
[(parallel [(set (match_operand 0 "" "")
@@ -1348,8 +1345,12 @@
(match_operand:SI 4 "immediate_operand" "")))])]
""
{
- gcc_assert (INTVAL (operands[2]) <= 255 * 4);
- operands[2] = GEN_INT ((INTVAL (operands[2]) + 3) / 4);
+ gcc_assert (INTVAL (operands[4]) <= 255 * 4 && INTVAL (operands[4]) % 4 == 0);
+
+ /* Operand 2 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[2] = GEN_INT (INTVAL (operands[4]) + 4);
})
(define_insn "*call_value_pop"
@@ -1359,20 +1360,47 @@
(set (reg:SI VAX_SP_REGNUM) (plus:SI (reg:SI VAX_SP_REGNUM)
(match_operand:SI 3 "immediate_operand" "i")))]
""
- "calls %2,%1")
+ "*
+{
+ operands[2] = GEN_INT ((INTVAL (operands[2]) - 4) / 4);
+ return \"calls %2,%1\";
+}")
-;; Define another set of these for the case of functions with no operands.
-;; These will allow the optimizers to do a slightly better job.
-(define_insn "call"
- [(call (match_operand:QI 0 "memory_operand" "m")
- (const_int 0))]
+(define_expand "call"
+ [(call (match_operand:QI 0 "memory_operand" "")
+ (match_operand:SI 1 "const_int_operand" ""))]
+ ""
+ "
+{
+ /* Operand 1 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[1] = GEN_INT (INTVAL (operands[1]) + 4);
+}")
+
+(define_insn "*call"
+ [(call (match_operand:QI 0 "memory_operand" "m")
+ (match_operand:SI 1 "const_int_operand" ""))]
""
"calls $0,%0")
-(define_insn "call_value"
+(define_expand "call_value"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "memory_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")))]
+ ""
+ "
+{
+ /* Operand 2 is the number of bytes to be popped by DW_CFA_GNU_args_size
+ during EH unwinding. We must include the argument count pushed by
+ the calls instruction. */
+ operands[2] = GEN_INT (INTVAL (operands[2]) + 4);
+}")
+
+(define_insn "*call_value"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "memory_operand" "m")
- (const_int 0)))]
+ (match_operand:SI 2 "const_int_operand" "")))]
""
"calls $0,%1")
diff -r c9d38128062b -r 7c8dd64dbebc external/gpl3/gcc/dist/gcc/except.c
--- a/external/gpl3/gcc/dist/gcc/except.c Wed Mar 23 12:52:43 2016 +0000
+++ b/external/gpl3/gcc/dist/gcc/except.c Wed Mar 23 15:51:36 2016 +0000
@@ -2288,8 +2288,7 @@
#endif
{
#ifdef EH_RETURN_HANDLER_RTX
- rtx insn = emit_move_insn (EH_RETURN_HANDLER_RTX, crtl->eh.ehr_handler);
- RTX_FRAME_RELATED_P (insn) = 1;
+ emit_move_insn (EH_RETURN_HANDLER_RTX, crtl->eh.ehr_handler);
#else
error ("__builtin_eh_return not supported on this target");
#endif
Home |
Main Index |
Thread Index |
Old Index