aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2008-12-02 06:35:06 -0500
committerNick Clifton <nickc@gcc.gnu.org>2008-12-02 11:35:06 +0000
commitb72bbbcb08f999e3216f1a9bf3f82d7e72eb7123 (patch)
treeaa52c3c0716f7cab3e28477618abe3b96e592892 /gcc
parent95e5f0ce004baee612104311868171e748dfc43c (diff)
downloadgcc-b72bbbcb08f999e3216f1a9bf3f82d7e72eb7123.zip
gcc-b72bbbcb08f999e3216f1a9bf3f82d7e72eb7123.tar.gz
gcc-b72bbbcb08f999e3216f1a9bf3f82d7e72eb7123.tar.bz2
stormy16.h (INCOMING_FRAME_SP_OFFSET): Negate.
* config/stormy16/stormy16.h (INCOMING_FRAME_SP_OFFSET): Negate. (DWARF_CIE_DATA_ALIGNMENT): Define. * config/stormy16/stormy16.c (xstormy16_compute_stack_layout): Invert add/sub for INCOMING_FRAME_SP_OFFSET. (xstormy16_expand_prologue): Likewise. (xstormy16_expand_builtin_va_start): Likewise. (xstormy16_gimplify_va_arg_expr): Likewise. From-SVN: r142350
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/stormy16/stormy16.c72
-rw-r--r--gcc/config/stormy16/stormy16.h5
-rw-r--r--gcc/config/stormy16/stormy16.md16
4 files changed, 45 insertions, 59 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 928a0aa..56cfc1b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2008-12-02 DJ Delorie <dj@redhat.com>
+
+ * config/stormy16/stormy16.h (INCOMING_FRAME_SP_OFFSET): Negate.
+ (DWARF_CIE_DATA_ALIGNMENT): Define.
+
+ * config/stormy16/stormy16.c (xstormy16_compute_stack_layout):
+ Invert add/sub for INCOMING_FRAME_SP_OFFSET.
+ (xstormy16_expand_prologue): Likewise.
+ (xstormy16_expand_builtin_va_start): Likewise.
+ (xstormy16_gimplify_va_arg_expr): Likewise.
+
2008-12-02 Jakub Jelinek <jakub@redhat.com>
PR middle-end/38343
diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c
index 713ae40..24c10ea 100644
--- a/gcc/config/stormy16/stormy16.c
+++ b/gcc/config/stormy16/stormy16.c
@@ -214,7 +214,7 @@ xstormy16_emit_cbranch (enum rtx_code code, rtx loc)
gen_rtx_IF_THEN_ELSE (VOIDmode, condition_rtx,
loc_ref, pc_rtx));
- cy_clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+ cy_clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, CARRY_REGNUM));
if (mode == HImode)
vec = gen_rtvec (2, branch, cy_clobber);
@@ -895,7 +895,7 @@ xstormy16_expand_move (enum machine_mode mode, rtx dest, rtx src)
rtx dest_reg = XEXP (pmv, 0);
rtx dest_mod = XEXP (pmv, 1);
rtx set = gen_rtx_SET (Pmode, dest_reg, dest_mod);
- rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+ rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, CARRY_REGNUM));
dest = gen_rtx_MEM (mode, dest_reg);
emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
@@ -906,7 +906,7 @@ xstormy16_expand_move (enum machine_mode mode, rtx dest, rtx src)
rtx src_reg = XEXP (pmv, 0);
rtx src_mod = XEXP (pmv, 1);
rtx set = gen_rtx_SET (Pmode, src_reg, src_mod);
- rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+ rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, CARRY_REGNUM));
src = gen_rtx_MEM (mode, src_reg);
emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
@@ -1002,17 +1002,17 @@ xstormy16_compute_stack_layout (void)
if (crtl->args.size <= 2048 && crtl->args.size != -1)
{
- if (layout.frame_size + INCOMING_FRAME_SP_OFFSET
+ if (layout.frame_size - INCOMING_FRAME_SP_OFFSET
+ crtl->args.size <= 2048)
- layout.fp_minus_ap = layout.frame_size + INCOMING_FRAME_SP_OFFSET;
+ layout.fp_minus_ap = layout.frame_size - INCOMING_FRAME_SP_OFFSET;
else
layout.fp_minus_ap = 2048 - crtl->args.size;
}
else
layout.fp_minus_ap = (layout.stdarg_save_size
+ layout.register_save_size
- + INCOMING_FRAME_SP_OFFSET);
- layout.sp_minus_fp = (layout.frame_size + INCOMING_FRAME_SP_OFFSET
+ - INCOMING_FRAME_SP_OFFSET);
+ layout.sp_minus_fp = (layout.frame_size - INCOMING_FRAME_SP_OFFSET
- layout.fp_minus_ap);
layout.first_local_minus_ap = layout.sp_minus_fp - layout.locals_size;
return layout;
@@ -1030,11 +1030,11 @@ xstormy16_initial_elimination_offset (int from, int to)
if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
result = layout.sp_minus_fp - layout.locals_size;
else if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- result = -layout.locals_size;
+ result = - layout.locals_size;
else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
- result = -layout.fp_minus_ap;
+ result = - layout.fp_minus_ap;
else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- result = -(layout.sp_minus_fp + layout.fp_minus_ap);
+ result = - (layout.sp_minus_fp + layout.fp_minus_ap);
else
gcc_unreachable ();
@@ -1047,7 +1047,7 @@ emit_addhi3_postreload (rtx dest, rtx src0, rtx src1)
rtx set, clobber, insn;
set = gen_rtx_SET (VOIDmode, dest, gen_rtx_PLUS (HImode, src0, src1));
- clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+ clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, CARRY_REGNUM));
insn = emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
return insn;
}
@@ -1134,7 +1134,10 @@ xstormy16_expand_prologue (void)
/* It's just possible that the SP here might be what we need for
the new FP... */
if (frame_pointer_needed && layout.sp_minus_fp == layout.locals_size)
- emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+ {
+ insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
/* Allocate space for local variables. */
if (layout.locals_size)
@@ -1148,11 +1151,15 @@ xstormy16_expand_prologue (void)
if (frame_pointer_needed && layout.sp_minus_fp != layout.locals_size)
{
insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
+ RTX_FRAME_RELATED_P (insn) = 1;
if (layout.sp_minus_fp)
- emit_addhi3_postreload (hard_frame_pointer_rtx,
- hard_frame_pointer_rtx,
- GEN_INT (-layout.sp_minus_fp));
+ {
+ insn = emit_addhi3_postreload (hard_frame_pointer_rtx,
+ hard_frame_pointer_rtx,
+ GEN_INT (- layout.sp_minus_fp));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ }
}
}
@@ -1191,36 +1198,19 @@ xstormy16_expand_epilogue (void)
if (frame_pointer_needed && layout.sp_minus_fp == layout.locals_size)
emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx);
else
- {
- insn = emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
- GEN_INT (- layout.locals_size));
- RTX_FRAME_RELATED_P (insn) = 1;
- }
+ emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
+ GEN_INT (- layout.locals_size));
}
/* Restore any call-saved registers. */
for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
if (REG_NEEDS_SAVE (regno, ifun))
- {
- rtx dwarf;
-
- insn = emit_move_insn (gen_rtx_REG (HImode, regno), mem_pop_rtx);
- RTX_FRAME_RELATED_P (insn) = 1;
- dwarf = gen_rtx_SET (Pmode, stack_pointer_rtx,
- plus_constant (stack_pointer_rtx,
- -GET_MODE_SIZE (Pmode)));
- REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
- dwarf,
- REG_NOTES (insn));
- }
+ emit_move_insn (gen_rtx_REG (HImode, regno), mem_pop_rtx);
/* Pop the stack for the stdarg save area. */
if (layout.stdarg_save_size)
- {
- insn = emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
- GEN_INT (- layout.stdarg_save_size));
- RTX_FRAME_RELATED_P (insn) = 1;
- }
+ emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
+ GEN_INT (- layout.stdarg_save_size));
/* Return. */
if (ifun)
@@ -1342,7 +1332,7 @@ xstormy16_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
NULL_TREE);
t = make_tree (TREE_TYPE (base), virtual_incoming_args_rtx);
- u = build_int_cst (NULL_TREE, INCOMING_FRAME_SP_OFFSET);
+ u = build_int_cst (NULL_TREE, - INCOMING_FRAME_SP_OFFSET);
u = fold_convert (TREE_TYPE (count), u);
t = build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), t, u);
t = build2 (MODIFY_EXPR, TREE_TYPE (base), base, t);
@@ -1430,7 +1420,7 @@ xstormy16_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
}
t = size_int (NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD
- - INCOMING_FRAME_SP_OFFSET);
+ + INCOMING_FRAME_SP_OFFSET);
t = fold_convert (TREE_TYPE (count), t);
t = build2 (MINUS_EXPR, TREE_TYPE (count), count_tmp, t);
t = build2 (PLUS_EXPR, TREE_TYPE (count), t,
@@ -2007,10 +1997,10 @@ xstormy16_expand_arith (enum machine_mode mode, enum rtx_code code,
rtx branch, sub, clobber, sub_1;
sub_1 = gen_rtx_MINUS (HImode, w_src0,
- gen_rtx_ZERO_EXTEND (HImode, gen_rtx_REG (BImode, 16)));
+ gen_rtx_ZERO_EXTEND (HImode, gen_rtx_REG (BImode, CARRY_REGNUM)));
sub = gen_rtx_SET (VOIDmode, w_dest,
gen_rtx_MINUS (HImode, sub_1, w_src1));
- clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+ clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, CARRY_REGNUM));
branch = gen_rtx_SET (VOIDmode, pc_rtx,
gen_rtx_IF_THEN_ELSE (VOIDmode,
gen_rtx_EQ (HImode,
diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h
index 973726e..2a73381 100644
--- a/gcc/config/stormy16/stormy16.h
+++ b/gcc/config/stormy16/stormy16.h
@@ -352,7 +352,7 @@ enum reg_class
#define INCOMING_RETURN_ADDR_RTX \
gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (-4)))
-#define INCOMING_FRAME_SP_OFFSET (xstormy16_interrupt_function_p () ? 6 : 4)
+#define INCOMING_FRAME_SP_OFFSET (xstormy16_interrupt_function_p () ? -6 : -4)
/* Register That Address the Stack Frame. */
@@ -730,7 +730,8 @@ do { \
/* Assembler Commands for Exception Regions. */
-#define DWARF2_UNWIND_INFO 0
+#define DWARF2_UNWIND_INFO 0
+#define DWARF_CIE_DATA_ALIGNMENT 1
/* Don't use __builtin_setjmp for unwinding, since it's tricky to get
at the high 16 bits of an address. */
diff --git a/gcc/config/stormy16/stormy16.md b/gcc/config/stormy16/stormy16.md
index c16a8c3..b42245b 100644
--- a/gcc/config/stormy16/stormy16.md
+++ b/gcc/config/stormy16/stormy16.md
@@ -332,22 +332,6 @@
add %0,%2"
[(set_attr "length" "2,2,0,2,2,2,2,4")])
-;; ; Reload can generate addition operations. The SECONDARY_RELOAD_CLASS
-;; ; macro causes it to allocate the carry register; this pattern
-;; ; shows it how to place the register in RTL to make the addition work.
-;; (define_expand "reload_inhi"
-;; [(parallel [(set (match_operand:HI 0 "register_operand" "=r")
-;; (match_operand:HI 1 "xstormy16_carry_plus_operand" ""))
-;; (clobber (reg:BI CARRY_REG))])]
-;; ""
-;; "if (! rtx_equal_p (operands[0], XEXP (operands[1], 0)))
-;; {
-;; emit_insn (gen_rtx_SET (VOIDmode, operands[0], XEXP (operands[1], 0)));
-;; operands[1] = gen_rtx_PLUS (GET_MODE (operands[1]), operands[0],
-;; XEXP (operands[1], 1));
-;; }
-;; ")
-
(define_insn "addchi4"
[(set (match_operand:HI 0 "register_operand" "=T,r,r")
(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")