OSDN Git Service

* config/stormy16/stormy16.md: Remove extraneous spaces and
[pf3gnuchains/gcc-fork.git] / gcc / config / stormy16 / stormy16.h
index 4decdeb..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 */
@@ -61,13 +60,6 @@ Boston, MA 02111-1307, USA.  */
   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
@@ -199,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",                                   \
@@ -217,7 +213,6 @@ enum reg_class
   "R8_REGS",                                   \
   "ICALL_REGS",                                        \
   "GENERAL_REGS",                              \
-  "CARRY_REGS",                                        \
   "ALL_REGS"                                   \
 }
 
@@ -232,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)
 
@@ -267,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)
 
@@ -344,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
 
@@ -360,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 */
@@ -469,16 +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)
-\f
 /* Trampolines for Nested Functions.  */
 
 #define TRAMPOLINE_SIZE 8
@@ -600,7 +579,7 @@ 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
 
@@ -625,29 +604,10 @@ do {                                                      \
 #undef DTORS_SECTION_ASM_OP
 #define CTORS_SECTION_ASM_OP   "\t.section\t.ctors,\"a\""
 #define DTORS_SECTION_ASM_OP   "\t.section\t.dtors,\"a\""
-#define EXTRA_SECTIONS in_bss100
-
-/* We define the function body in a separate macro so that if we ever
-   add another section, we can just add an entry to
-   EXTRA_SECTION_FUNCTIONS without making it difficult to read.  It is
-   not used anywhere else.  */
-#define XSTORMY16_SECTION_FUNCTION(name, in, string, bits)                       \
-  void                                                                           \
-  name ()                                                                        \
-  {                                                                              \
-    if (in_section != in)                                                        \
-      {                                                                          \
-       fprintf (asm_out_file, "\t.section %s,\"aw\",@%sbits\n", string, bits);   \
-       in_section = in;                                                          \
-      }                                                                                  \
-  }
-
-#undef  EXTRA_SECTION_FUNCTIONS
-#define EXTRA_SECTION_FUNCTIONS                \
-  XSTORMY16_SECTION_FUNCTION (bss100_section, in_bss100, ".bss_below100", "no")
 
-#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.  */
 
@@ -659,21 +619,20 @@ 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)
+  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)
+  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 (rn[0] == '@' && rn[2] == '.')                                  \
-      rn += 3;                                                         \
     if (SYMBOL_REF_FUNCTION_P (SYMBOL))                                        \
       ASM_OUTPUT_LABEL_REF ((STREAM), rn);                             \
     else                                                               \
@@ -687,9 +646,6 @@ do  {                                               \
   fputc (')', STREAM);                         \
 } while (0)
 
-#define ASM_OUTPUT_LABELREF(STREAM, NAME)      \
-  asm_fprintf ((STREAM), "%U%s", xstormy16_strip_name_encoding (NAME));
-
 /* Globalizing directive for a label.  */
 #define GLOBAL_ASM_OP "\t.globl "
 
@@ -774,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.  */
@@ -810,18 +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 }}, \
-  {"xstormy16_below100_operand", {MEM }}, \
-  {"xstormy16_below100_or_register", {MEM, REG, SUBREG }}, \
-  {"xstormy16_splittable_below100_or_register", {MEM, REG, SUBREG }}, \
-  {"xstormy16_onebit_clr_operand", {CONST_INT }}, \
-  {"xstormy16_onebit_set_operand", {CONST_INT }}, \
-  {"nonimmediate_nonstack_operand", {REG, MEM, SUBREG }},
-
 #define CASE_VECTOR_MODE SImode
 
 #define WORD_REGISTER_OPERATIONS