Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(259)

Unified Diff: gcc/gcc/config/score/score.c

Issue 3050029: [gcc] GCC 4.5.0=>4.5.1 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/nacl-toolchain.git
Patch Set: Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gcc/gcc/config/s390/t-linux ('k') | gcc/gcc/config/score/score3.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gcc/gcc/config/score/score.c
diff --git a/gcc/gcc/config/score/score.c b/gcc/gcc/config/score/score.c
index e088764770889c4dde8dd4717ef1e3ebf173553e..4324d653e1ec33de035747cbab353b48d0acd244 100644
--- a/gcc/gcc/config/score/score.c
+++ b/gcc/gcc/config/score/score.c
@@ -1,5 +1,5 @@
/* Output routines for Sunplus S+CORE processor
- Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
Contributed by Sunnorth.
This file is part of GCC.
@@ -68,6 +68,9 @@
#undef TARGET_HANDLE_OPTION
#define TARGET_HANDLE_OPTION score_handle_option
+#undef TARGET_LEGITIMIZE_ADDRESS
+#define TARGET_LEGITIMIZE_ADDRESS score_legitimize_address
+
#undef TARGET_SCHED_ISSUE_RATE
#define TARGET_SCHED_ISSUE_RATE score_issue_rate
@@ -86,11 +89,8 @@
#undef TARGET_ASM_OUTPUT_MI_THUNK
#define TARGET_ASM_OUTPUT_MI_THUNK score_output_mi_thunk
-#undef TARGET_PROMOTE_FUNCTION_ARGS
-#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_tree_true
-
-#undef TARGET_PROMOTE_FUNCTION_RETURN
-#define TARGET_PROMOTE_FUNCTION_RETURN hook_bool_tree_true
+#undef TARGET_PROMOTE_FUNCTION_MODE
+#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote
#undef TARGET_PROMOTE_PROTOTYPES
#define TARGET_PROMOTE_PROTOTYPES hook_bool_tree_true
@@ -113,8 +113,18 @@
#undef TARGET_ADDRESS_COST
#define TARGET_ADDRESS_COST score_address_cost
+#undef TARGET_LEGITIMATE_ADDRESS_P
+#define TARGET_LEGITIMATE_ADDRESS_P score_legitimate_address_p
+
+#undef TARGET_CAN_ELIMINATE
+#define TARGET_CAN_ELIMINATE score_can_eliminate
+
+#undef TARGET_ASM_TRAMPOLINE_TEMPLATE
+#define TARGET_ASM_TRAMPOLINE_TEMPLATE score_asm_trampoline_template
+#undef TARGET_TRAMPOLINE_INIT
+#define TARGET_TRAMPOLINE_INIT score_trampoline_init
+
struct extern_list *extern_head = 0;
-rtx cmp_op0, cmp_op1;
/* default 0 = NO_REGS */
enum reg_class score_char_to_class[256];
@@ -424,6 +434,16 @@ score_hard_regno_mode_ok (unsigned int regno, enum machine_mode mode)
gcc_unreachable ();
}
+/* We can always eliminate to the hard frame pointer. We can eliminate
+ to the stack pointer unless a frame pointer is needed. */
+
+static bool
+score_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to)
+{
+ return (to == HARD_FRAME_POINTER_REGNUM
+ || (to == STACK_POINTER_REGNUM && !frame_pointer_needed));
+}
+
/* Implement INITIAL_ELIMINATION_OFFSET. FROM is either the frame
pointer or argument pointer. TO is either the stack pointer or
hard frame pointer. */
@@ -504,14 +524,27 @@ score_function_value (tree valtype, tree func ATTRIBUTE_UNUSED,
gcc_unreachable ();
}
-/* Implement INITIALIZE_TRAMPOLINE macro. */
-void
-score_initialize_trampoline (rtx ADDR, rtx FUNC, rtx CHAIN)
+/* Implement TARGET_ASM_TRAMPOLINE_TEMPLATE. */
+static void
+score_asm_trampoline_template (FILE *f)
{
if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D)
- return score7_initialize_trampoline (ADDR, FUNC, CHAIN);
+ return score7_asm_trampoline_template (f);
else if (TARGET_SCORE3)
- return score3_initialize_trampoline (ADDR, FUNC, CHAIN);
+ return score3_asm_trampoline_template (f);
+
+ gcc_unreachable ();
+}
+
+/* Implement TARGET_TRAMPOLINE_INIT. */
+static void
+score_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
+{
+ /* ??? These two routines are identical. */
+ if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D)
+ return score7_trampoline_init (m_tramp, fndecl, chain_value);
+ else if (TARGET_SCORE3)
+ return score3_trampoline_init (m_tramp, fndecl, chain_value);
gcc_unreachable ();
}
@@ -528,28 +561,29 @@ score_regno_mode_ok_for_base_p (int regno, int strict)
gcc_unreachable ();
}
-/* Implement GO_IF_LEGITIMATE_ADDRESS macro. */
-int
-score_address_p (enum machine_mode mode, rtx x, int strict)
+/* Implement TARGET_LEGITIMIZE_ADDRESS_P. */
+bool
+score_legitimate_address_p (enum machine_mode mode, rtx x, bool strict)
{
if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D)
- return score7_address_p (mode, x, strict);
+ return score7_legitimate_address_p (mode, x, strict);
else if (TARGET_SCORE3)
- return score3_address_p (mode, x, strict);
+ return score3_legitimate_address_p (mode, x, strict);
gcc_unreachable ();
}
-/* This function is used to implement LEGITIMIZE_ADDRESS. If *XLOC can
+/* This function is used to implement LEGITIMIZE_ADDRESS. If X can
be legitimized in a way that the generic machinery might not expect,
- put the new address in *XLOC and return true. */
-int
-score_legitimize_address (rtx *xloc)
+ return the new address, else return X. */
+static rtx
+score_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
+ enum machine_mode mode ATTRIBUTE_UNUSED)
{
if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D)
- return score7_legitimize_address (xloc);
+ return score7_legitimize_address (x);
else if (TARGET_SCORE3)
- return score3_legitimize_address (xloc);
+ return score3_legitimize_address (x);
gcc_unreachable ();
}
@@ -694,17 +728,6 @@ score_epilogue (int sibcall_p)
gcc_unreachable ();
}
-void
-score_gen_cmp (enum machine_mode mode)
-{
- if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D)
- return score7_gen_cmp (mode);
- else if (TARGET_SCORE3)
- return score3_gen_cmp (mode);
-
- gcc_unreachable ();
-}
-
/* Call and sibcall pattern all need call this function. */
void
score_call (rtx *ops, bool sib)
@@ -1114,7 +1137,7 @@ score_block_move_loop (rtx dst, rtx src, HOST_WIDE_INT length)
HOST_WIDE_INT loop_mov_bytes;
HOST_WIDE_INT iteration = 0;
HOST_WIDE_INT head_length = 0, leftover;
- rtx label, src_reg, dst_reg, final_dst;
+ rtx label, src_reg, dst_reg, final_dst, test;
bool gen_loop_head = (src_align < BITS_PER_WORD
|| dst_align < BITS_PER_WORD);
@@ -1154,8 +1177,8 @@ score_block_move_loop (rtx dst, rtx src, HOST_WIDE_INT length)
score_block_move_loop_body (dst_reg, dst_align,
src_reg, src_align, loop_mov_bytes);
- emit_insn (gen_cmpsi (dst_reg, final_dst));
- emit_jump_insn (gen_bne (label));
+ test = gen_rtx_NE (VOIDmode, dst_reg, final_dst);
+ emit_jump_insn (gen_cbranchsi4 (test, dst_reg, final_dst, label));
score_block_move_loop_foot (dst_reg, dst_align,
src_reg, src_align, leftover);
« no previous file with comments | « gcc/gcc/config/s390/t-linux ('k') | gcc/gcc/config/score/score3.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698