/* Xstormy16 cpu description.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007,
- 2008, 2009, 2010 Free Software Foundation, Inc.
+ 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
This file is part of GCC.
#undef ASM_SPEC
#define ASM_SPEC ""
+#undef LINK_SPEC
+#define LINK_SPEC "%{h*} %{v:-V} \
+ %{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic}"
+
/* For xstormy16:
- If -msim is specified, everything is built and linked as for the sim.
- If -T is specified, that linker script is used, and it should provide
while (0)
#define TARGET_VERSION fprintf (stderr, " (xstormy16 cpu core)");
-
-#define CAN_DEBUG_WITHOUT_FP
\f
/* Storage Layout. */
#define PTRDIFF_TYPE "int"
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
#define N_REG_CLASSES ((int) LIM_REG_CLASSES)
-#define IRA_COVER_CLASSES \
-{ \
- GENERAL_REGS, LIM_REG_CLASSES \
-}
-
#define REG_CLASS_NAMES \
{ \
"NO_REGS", \
#define INDEX_REG_CLASS GENERAL_REGS
-/* The following letters are unavailable, due to being used as
- constraints:
- '0'..'9'
- '<', '>'
- 'E', 'F', 'G', 'H'
- 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'
- 'Q', 'R', 'S', 'T', 'U'
- 'V', 'X'
- 'g', 'i', 'm', 'n', 'o', 'p', 'r', 's'. */
-
-#define REG_CLASS_FROM_LETTER(CHAR) \
- ( (CHAR) == 'a' ? R0_REGS \
- : (CHAR) == 'b' ? R1_REGS \
- : (CHAR) == 'c' ? R2_REGS \
- : (CHAR) == 'd' ? R8_REGS \
- : (CHAR) == 'e' ? EIGHT_REGS \
- : (CHAR) == 't' ? TWO_REGS \
- : (CHAR) == 'z' ? ICALL_REGS \
- : NO_REGS)
-
#define REGNO_OK_FOR_BASE_P(NUM) 1
#define REGNO_OK_FOR_INDEX_P(NUM) REGNO_OK_FOR_BASE_P (NUM)
-#define PREFERRED_RELOAD_CLASS(X, CLASS) \
- xstormy16_preferred_reload_class (X, CLASS)
-
-#define PREFERRED_OUTPUT_RELOAD_CLASS(X, CLASS) \
- xstormy16_preferred_reload_class (X, CLASS)
-
/* This chip has the interesting property that only the first eight
registers can be moved to/from memory. */
#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \
#define CLASS_MAX_NREGS(CLASS, MODE) \
((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-#define CONST_OK_FOR_LETTER_P(VALUE, C) \
- ( (C) == 'I' ? (VALUE) >= 0 && (VALUE) <= 3 \
- : (C) == 'J' ? exact_log2 (VALUE) != -1 \
- : (C) == 'K' ? exact_log2 (~(VALUE)) != -1 \
- : (C) == 'L' ? (VALUE) >= 0 && (VALUE) <= 255 \
- : (C) == 'M' ? (VALUE) >= -255 && (VALUE) <= 0 \
- : (C) == 'N' ? (VALUE) >= -3 && (VALUE) <= 0 \
- : (C) == 'O' ? (VALUE) >= 1 && (VALUE) <= 4 \
- : (C) == 'P' ? (VALUE) >= -4 && (VALUE) <= -1 \
- : 0 )
-
-#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
-
-#define EXTRA_CONSTRAINT(VALUE, C) \
- xstormy16_extra_constraint_p (VALUE, C)
-
\f
/* Basic Stack Layout. */
+ 1) \
/ 2)
-#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
- xstormy16_function_arg (CUM, MODE, TYPE, NAMED)
-
/* 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, N_NAMED_ARGS) \
(CUM) = 0
-#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
- ((CUM) = xstormy16_function_arg_advance (CUM, MODE, TYPE, NAMED))
-
#define FUNCTION_ARG_REGNO_P(REGNO) \
((REGNO) >= FIRST_ARGUMENT_REGISTER \
&& (REGNO) < FIRST_ARGUMENT_REGISTER + NUM_ARGUMENT_REGISTERS)
/* The number of the hard register that is used to return a scalar value from a
function call. */
#define RETURN_VALUE_REGNUM FIRST_ARGUMENT_REGISTER
-
-#define FUNCTION_VALUE(VALTYPE, FUNC) \
- xstormy16_function_value (VALTYPE, FUNC)
-
-#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, RETURN_VALUE_REGNUM)
-
-#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM)
\f
/* Function Entry and Exit. */
#define MAX_REGS_PER_ADDRESS 1
-#ifdef REG_OK_STRICT
-#define REG_OK_FOR_BASE_P(X) \
- (REGNO_OK_FOR_BASE_P (REGNO (X)) && (REGNO (X) < FIRST_PSEUDO_REGISTER))
-#else
-#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
-#endif
-
-#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
-
-/* 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
- or pre-decrement address. */
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
- if (xstormy16_mode_dependent_address_p (ADDR)) \
- goto LABEL
-
#define LEGITIMATE_CONSTANT_P(X) 1
\f
/* Describing Relative Costs of Operations. */
-#define REGISTER_MOVE_COST(MODE, FROM, TO) 2
-
-#define MEMORY_MOVE_COST(M,C,I) (5 + memory_move_secondary_cost (M, C, I))
-
#define BRANCH_COST(speed_p, predictable_p) 5
#define SLOW_BYTE_ACCESS 0
{ { "r14", 14 }, \
{ "r15", 15 } }
-#define PRINT_OPERAND(STREAM, X, CODE) xstormy16_print_operand (STREAM, X, CODE)
-
-#define PRINT_OPERAND_ADDRESS(STREAM, X) xstormy16_print_operand_address (STREAM, X)
-
-/* USER_LABEL_PREFIX is defined in svr4.h. */
#define REGISTER_PREFIX ""
#define LOCAL_LABEL_PREFIX "."
#define USER_LABEL_PREFIX ""
\f
/* Macros Affecting all Debug Formats. */
-/* Defined in svr4.h. */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
#define FUNCTION_MODE HImode
#define NO_IMPLICIT_EXTERN_C
-
-#define HANDLE_SYSV_PRAGMA 1