Mercurial > hg > CbC > CbC_gcc
diff gcc/config/crx/crx.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
line wrap: on
line diff
--- a/gcc/config/crx/crx.c Sun Feb 07 18:28:00 2010 +0900 +++ b/gcc/config/crx/crx.c Fri Feb 12 23:39:51 2010 +0900 @@ -1,6 +1,7 @@ /* Output routines for GCC for CRX. Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of GCC. @@ -45,6 +46,7 @@ #include "optabs.h" #include "toplev.h" #include "basic-block.h" +#include "df.h" #include "target.h" #include "target-def.h" @@ -118,17 +120,6 @@ static enum machine_mode output_memory_reference_mode; /*****************************************************************************/ -/* GLOBAL VARIABLES */ -/*****************************************************************************/ - -/* Table of machine attributes. */ -const struct attribute_spec crx_attribute_table[]; - -/* Test and compare insns use these globals to generate branch insns. */ -rtx crx_compare_op0 = NULL_RTX; -rtx crx_compare_op1 = NULL_RTX; - -/*****************************************************************************/ /* TARGETM FUNCTION PROTOTYPES */ /*****************************************************************************/ @@ -137,6 +128,18 @@ int incoming ATTRIBUTE_UNUSED); static bool crx_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED); static int crx_address_cost (rtx, bool); +static bool crx_legitimate_address_p (enum machine_mode, rtx, bool); +static bool crx_can_eliminate (const int, const int); + +/*****************************************************************************/ +/* RTL VALIDITY */ +/*****************************************************************************/ + +#undef TARGET_LEGITIMATE_ADDRESS_P +#define TARGET_LEGITIMATE_ADDRESS_P crx_legitimate_address_p + +#undef TARGET_CAN_ELIMINATE +#define TARGET_CAN_ELIMINATE crx_can_eliminate /*****************************************************************************/ /* STACK LAYOUT AND CALLING CONVENTIONS */ @@ -165,7 +168,7 @@ #undef TARGET_ATTRIBUTE_TABLE #define TARGET_ATTRIBUTE_TABLE crx_attribute_table -const struct attribute_spec crx_attribute_table[] = { +static const struct attribute_spec crx_attribute_table[] = { /* ISRs have special prologue and epilogue requirements. */ {"interrupt", 0, 0, false, true, true, NULL}, {NULL, 0, 0, false, false, false, NULL} @@ -321,6 +324,14 @@ crtl->outgoing_args_size : 0); } +/* Worker function for TARGET_CAN_ELIMINATE. */ + +bool +crx_can_eliminate (const int from ATTRIBUTE_UNUSED, const int to) +{ + return (to == STACK_POINTER_REGNUM ? ! frame_pointer_needed : true); +} + /* Implements the macro INITIAL_ELIMINATION_OFFSET, return the OFFSET. */ int @@ -541,7 +552,7 @@ /* ADDRESSING MODES */ /* ---------------- */ -/* Implements the macro GO_IF_LEGITIMATE_ADDRESS defined in crx.h. +/* Implements the hook for TARGET_LEGITIMATE_ADDRESS_P defined in crx.h. * The following addressing modes are supported on CRX: * * Relocations --> const | symbol_ref | label_ref @@ -726,9 +737,9 @@ return retval; } -int +bool crx_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, - rtx addr, int strict) + rtx addr, bool strict) { enum crx_addrtype addrtype; struct crx_address address; @@ -1217,43 +1228,6 @@ return 1; } -rtx -crx_expand_compare (enum rtx_code code, enum machine_mode mode) -{ - rtx op0, op1, cc_reg, ret; - - op0 = crx_compare_op0; - op1 = crx_compare_op1; - - /* Emit the compare that writes into CC_REGNUM) */ - cc_reg = gen_rtx_REG (CCmode, CC_REGNUM); - ret = gen_rtx_COMPARE (CCmode, op0, op1); - emit_insn (gen_rtx_SET (VOIDmode, cc_reg, ret)); - /* debug_rtx (get_last_insn ()); */ - - /* Return the rtx for using the result in CC_REGNUM */ - return gen_rtx_fmt_ee (code, mode, cc_reg, const0_rtx); -} - -void -crx_expand_branch (enum rtx_code code, rtx label) -{ - rtx tmp = crx_expand_compare (code, VOIDmode); - tmp = gen_rtx_IF_THEN_ELSE (VOIDmode, tmp, - gen_rtx_LABEL_REF (VOIDmode, label), - pc_rtx); - emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, tmp)); - /* debug_rtx (get_last_insn ()); */ -} - -void -crx_expand_scond (enum rtx_code code, rtx dest) -{ - rtx tmp = crx_expand_compare (code, GET_MODE (dest)); - emit_move_insn (dest, tmp); - /* debug_rtx (get_last_insn ()); */ -} - static void mpushpop_str (char *stringbuffer, const char *mnemonic, char *mask) { @@ -1468,4 +1442,3 @@ else emit_jump_insn (gen_pop_and_popret_return (GEN_INT (sum_regs))); } -