OSDN Git Service

* config/stormy16/stormy16.md: Remove extraneous spaces and
[pf3gnuchains/gcc-fork.git] / gcc / config / stormy16 / stormy16.h
index 726ef4b..2a73381 100644 (file)
@@ -1,13 +1,13 @@
 /* Xstormy16 cpu description.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007,
+   2008  Free Software Foundation, Inc.
    Contributed by Red Hat, Inc.
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GCC is distributed in the hope that it will be useful,
@@ -16,9 +16,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 \f
 /* Driver configuration */
@@ -58,15 +57,9 @@ Boston, MA 02111-1307, USA.  */
 #define TARGET_CPU_CPP_BUILTINS() do { \
   builtin_define_std ("xstormy16");    \
   builtin_assert ("machine=xstormy16");        \
+  builtin_assert ("cpu=xstormy16");     \
 } while (0)
 
-/* This declaration should be present.  */
-extern int target_flags;
-
-#define TARGET_SWITCHES                                        \
-  {{ "sim", 0, "Provide libraries for the simulator" },        \
-   { "", 0, "" }}
-
 #define TARGET_VERSION fprintf (stderr, " (xstormy16 cpu core)");
 
 #define CAN_DEBUG_WITHOUT_FP
@@ -198,13 +191,17 @@ enum reg_class
   R8_REGS,
   ICALL_REGS,
   GENERAL_REGS,
-  CARRY_REGS,
   ALL_REGS,
   LIM_REG_CLASSES
 };
 
 #define N_REG_CLASSES ((int) LIM_REG_CLASSES)
 
+#define IRA_COVER_CLASSES                      \
+{                                              \
+  GENERAL_REGS, LIM_REG_CLASSES        \
+}
+
 #define REG_CLASS_NAMES                                \
 {                                              \
   "NO_REGS",                                   \
@@ -216,7 +213,6 @@ enum reg_class
   "R8_REGS",                                   \
   "ICALL_REGS",                                        \
   "GENERAL_REGS",                              \
-  "CARRY_REGS",                                        \
   "ALL_REGS"                                   \
 }
 
@@ -231,17 +227,15 @@ enum reg_class
   { 0x00100 },                                 \
   { 0x00300 },                                 \
   { 0x6FFFF },                                 \
-  { 0x10000 },                                 \
   { (1 << FIRST_PSEUDO_REGISTER) - 1 }         \
 }
 
 #define REGNO_REG_CLASS(REGNO)                         \
-  ((REGNO) == 0   ? R0_REGS                    \
-   : (REGNO) == 1 ? R1_REGS                    \
-   : (REGNO) == 2 ? R2_REGS                    \
-   : (REGNO) < 8  ? EIGHT_REGS                 \
-   : (REGNO) == 8 ? R8_REGS                    \
-   : (REGNO) == 16 ? CARRY_REGS                        \
+  (  (REGNO) ==  0 ? R0_REGS                   \
+   : (REGNO) ==  1 ? R1_REGS                   \
+   : (REGNO) ==  2 ? R2_REGS                   \
+   : (REGNO) <   8 ? EIGHT_REGS                        \
+   : (REGNO) ==  8 ? R8_REGS                   \
    : (REGNO) <= 18 ? GENERAL_REGS              \
    : ALL_REGS)
 
@@ -266,7 +260,6 @@ enum reg_class
   : (CHAR) == 'd' ? R8_REGS                    \
   : (CHAR) == 'e' ? EIGHT_REGS                 \
   : (CHAR) == 't' ? TWO_REGS                   \
-  : (CHAR) == 'y' ? CARRY_REGS                 \
   : (CHAR) == 'z' ? ICALL_REGS                 \
   : NO_REGS)
 
@@ -343,7 +336,7 @@ enum reg_class
    because we don't have any pre-increment ones.  */
 #define STACK_PUSH_CODE POST_INC
 
-/* #define FRAME_GROWS_DOWNWARD */
+#define FRAME_GROWS_DOWNWARD 0
 
 #define ARGS_GROW_DOWNWARD 1
 
@@ -359,20 +352,17 @@ 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)
 
 \f
 /* Register That Address the Stack Frame.  */
 
-#define STACK_POINTER_REGNUM 15
-
-#define FRAME_POINTER_REGNUM 17
-
+#define STATIC_CHAIN_REGNUM     1
 #define HARD_FRAME_POINTER_REGNUM 13
-
-#define ARG_POINTER_REGNUM 18
-
-#define STATIC_CHAIN_REGNUM 1
+#define STACK_POINTER_REGNUM   15
+#define CARRY_REGNUM           16
+#define FRAME_POINTER_REGNUM   17
+#define ARG_POINTER_REGNUM     18
 
 \f
 /* Eliminating the Frame Pointer and the Arg Pointer */
@@ -416,15 +406,12 @@ enum reg_class
 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
        xstormy16_function_arg (CUM, MODE, TYPE, NAMED)
 
-#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
-
-#define FUNCTION_ARG_PASS_BY_REFERENCE(CUM, MODE, TYPE, NAMED) 0
-
 /* For this platform, the value of CUMULATIVE_ARGS is the number of words
    of arguments that have been passed in registers so far.  */
 #define CUMULATIVE_ARGS int
 
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) (CUM) = 0
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+  (CUM) = 0
 
 #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)                   \
   ((CUM) = xstormy16_function_arg_advance (CUM, MODE, TYPE, NAMED))
@@ -471,21 +458,6 @@ enum reg_class
    contains a '%s' sequence, this will be replaced by the name of the function.  */
 /* #define TARGET_CANNOT_INLINE_P(FN_DECL) xstormy16_cannot_inline_p (FN_DECL) */
 \f
-/* Implementing the Varargs Macros.  */
-
-/* Implement the stdarg/varargs va_start macro.  STDARG_P is nonzero if this
-   is stdarg.h instead of varargs.h.  VALIST is the tree of the va_list
-   variable to initialize.  NEXTARG is the machine independent notion of the
-   'next' argument after the variable arguments.  If not defined, a standard
-   implementation will be defined that works for arguments passed on the stack.  */
-#define EXPAND_BUILTIN_VA_START(VALIST, NEXTARG) \
-  xstormy16_expand_builtin_va_start (VALIST, NEXTARG)
-
-/* Implement the stdarg/varargs va_arg macro.  VALIST is the variable of type
-   va_list as a tree, TYPE is the type passed to va_arg.  */
-#define EXPAND_BUILTIN_VA_ARG(VALIST, TYPE) \
-  xstormy16_expand_builtin_va_arg (VALIST, TYPE)
-\f
 /* Trampolines for Nested Functions.  */
 
 #define TRAMPOLINE_SIZE 8
@@ -496,10 +468,6 @@ enum reg_class
   xstormy16_initialize_trampoline (ADDR, FNADDR, STATIC_CHAIN)
 
 \f
-/* Implicit Calls to Library Routines */
-
-#define TARGET_MEM_FUNCTIONS
-
 /* Define this macro to override the type used by the library routines to pick
    up arguments of type `float'.  (By default, they use a union of `float' and
    `int'.)
@@ -593,8 +561,6 @@ do {                                                        \
 
 #define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
 
-#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN)
-
 /* On this chip, this is true if the address is valid with an offset
    of 0 but not of 6, because in that case it cannot be used as an
    address for DImode or DFmode, or if the address is a post-increment
@@ -613,14 +579,12 @@ do {                                                      \
 
 #define MEMORY_MOVE_COST(M,C,I) (5 + memory_move_secondary_cost (M, C, I))
 
-#define BRANCH_COST 5
+#define BRANCH_COST(speed_p, predictable_p) 5
 
 #define SLOW_BYTE_ACCESS 0
 
 #define NO_FUNCTION_CSE
 
-#define NO_RECURSIVE_FUNCTION_CSE
-
 \f
 /* Dividing the output into sections.  */
 
@@ -641,8 +605,9 @@ do {                                                        \
 #define CTORS_SECTION_ASM_OP   "\t.section\t.ctors,\"a\""
 #define DTORS_SECTION_ASM_OP   "\t.section\t.dtors,\"a\""
 
-#define JUMP_TABLES_IN_TEXT_SECTION 1
+#define TARGET_ASM_INIT_SECTIONS xstormy16_asm_init_sections
 
+#define JUMP_TABLES_IN_TEXT_SECTION 1
 \f
 /* The Overall Framework of an Assembler File.  */
 
@@ -654,17 +619,24 @@ do {                                                      \
 \f
 /* Output of Data.  */
 
-#define IS_ASM_LOGICAL_LINE_SEPARATOR(C) ((C) == '|')
+#define IS_ASM_LOGICAL_LINE_SEPARATOR(C, STR) ((C) == '|')
+
+#define ASM_OUTPUT_ALIGNED_DECL_COMMON(STREAM, DECL, NAME, SIZE, ALIGNMENT) \
+  xstormy16_asm_output_aligned_common (STREAM, DECL, NAME, SIZE, ALIGNMENT, 1)
+#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(STREAM, DECL, NAME, SIZE, ALIGNMENT) \
+  xstormy16_asm_output_aligned_common (STREAM, DECL, NAME, SIZE, ALIGNMENT, 0)
 
 \f
 /* Output and Generation of Labels.  */
+#define SYMBOL_FLAG_XSTORMY16_BELOW100 (SYMBOL_FLAG_MACH_DEP << 0)
 
 #define ASM_OUTPUT_SYMBOL_REF(STREAM, SYMBOL)                          \
   do {                                                                 \
+    const char *rn = XSTR (SYMBOL, 0);                                 \
     if (SYMBOL_REF_FUNCTION_P (SYMBOL))                                        \
-      ASM_OUTPUT_LABEL_REF ((STREAM), XSTR (SYMBOL, 0));               \
+      ASM_OUTPUT_LABEL_REF ((STREAM), rn);                             \
     else                                                               \
-      assemble_name (STREAM, XSTR (SYMBOL, 0));                                \
+      assemble_name (STREAM, rn);                                      \
   } while (0)
 
 #define ASM_OUTPUT_LABEL_REF(STREAM, NAME)     \
@@ -758,7 +730,8 @@ do  {                                               \
 \f
 /* 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.  */
@@ -794,13 +767,6 @@ do  {                                              \
 \f
 /* Miscellaneous Parameters.  */
 
-#define PREDICATE_CODES                                        \
-  {"shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT }},   \
-  {"equality_operator", {EQ, NE }},                    \
-  {"inequality_operator", {GE, GT, LE, LT, GEU, GTU, LEU, LTU }}, \
-  {"xstormy16_ineqsi_operator", {LT, GE, LTU, GEU }}, \
-  {"nonimmediate_nonstack_operand", {REG, MEM}},
-
 #define CASE_VECTOR_MODE SImode
 
 #define WORD_REGISTER_OPERATIONS