📄 stormy16.h
字号:
/* Xstormy16 cpu description. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Red Hat, Inc.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING. If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA. *//* Driver configuration *//* Defined in svr4.h. *//* #define SWITCH_TAKES_ARG(CHAR) *//* Defined in svr4.h. *//* #define WORD_SWITCH_TAKES_ARG(NAME) *//* Defined in svr4.h. */#undef ASM_SPEC#define ASM_SPEC ""/* Defined in svr4.h. *//* #define ASM_FINAL_SPEC "" *//* Defined in svr4.h. *//* #define LINK_SPEC "" *//* 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 appropriate libraries. - If neither is specified, everything is built as for the sim, but no I/O support is assumed.*/#undef LIB_SPEC#define LIB_SPEC "-( -lc %{msim:-lsim}%{!msim:%{!T*:-lnosys}} -)"/* Defined in svr4.h. */#undef STARTFILE_SPEC#define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s"/* Defined in svr4.h. */#undef ENDFILE_SPEC#define ENDFILE_SPEC "crtend.o%s crtn.o%s"/* Defined in svr4.h for host compilers. *//* #define MD_EXEC_PREFIX "" *//* Defined in svr4.h for host compilers. *//* #define MD_STARTFILE_PREFIX "" *//* Run-time target specifications */#define CPP_PREDEFINES "-Dxstormy16 -Amachine=xstormy16"/* 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/* Storage Layout */#define BITS_BIG_ENDIAN 1#define BYTES_BIG_ENDIAN 0#define WORDS_BIG_ENDIAN 0#define UNITS_PER_WORD 2#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \do { \ if (GET_MODE_CLASS (MODE) == MODE_INT \ && GET_MODE_SIZE (MODE) < 2) \ (MODE) = HImode; \} while (0)#define PROMOTE_FUNCTION_ARGS 1#define PROMOTE_FUNCTION_RETURN 1#define PARM_BOUNDARY 16#define STACK_BOUNDARY 16#define FUNCTION_BOUNDARY 16#define BIGGEST_ALIGNMENT 16/* Defined in svr4.h. *//* #define MAX_OFILE_ALIGNMENT */#define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))#define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))#define STRICT_ALIGNMENT 1/* Defined in svr4.h. */#define PCC_BITFIELD_TYPE_MATTERS 1/* Layout of Source Language Data Types */#define INT_TYPE_SIZE 16#define SHORT_TYPE_SIZE 16#define LONG_TYPE_SIZE 32#define LONG_LONG_TYPE_SIZE 64#define FLOAT_TYPE_SIZE 32#define DOUBLE_TYPE_SIZE 64#define LONG_DOUBLE_TYPE_SIZE 64#define DEFAULT_SIGNED_CHAR 0/* Defined in svr4.h. */#define SIZE_TYPE "unsigned int"/* Defined in svr4.h. */#define PTRDIFF_TYPE "int"/* Defined in svr4.h, to "long int". *//* #define WCHAR_TYPE "long int" *//* Defined in svr4.h. */#undef WCHAR_TYPE_SIZE#define WCHAR_TYPE_SIZE 32/* Define this macro if the type of Objective-C selectors should be `int'. If this macro is not defined, then selectors should have the type `struct objc_selector *'. *//* #define OBJC_INT_SELECTORS *//* Register Basics *//* Number of hardware registers known to the compiler. They receive numbers 0 through `FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo register's number really is assigned the number `FIRST_PSEUDO_REGISTER'. */#define FIRST_PSEUDO_REGISTER 19/* An initializer that says which registers are used for fixed purposes all throughout the compiled code and are therefore not available for general allocation. These would include the stack pointer, the frame pointer (except on machines where that can be used as a general register when no frame pointer is needed), the program counter on machines where that is considered one of the addressable registers, and any other numbered register with a standard use. This information is expressed as a sequence of numbers, separated by commas and surrounded by braces. The Nth number is 1 if register N is fixed, 0 otherwise. The table initialized from this macro, and the table initialized by the following one, may be overridden at run time either automatically, by the actions of the macro `CONDITIONAL_REGISTER_USAGE', or by the user with the command options `-ffixed-REG', `-fcall-used-REG' and `-fcall-saved-REG'. */#define FIXED_REGISTERS \ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1 }/* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered (in general) by function calls as well as for fixed registers. This macro therefore identifies the registers that are not available for general allocation of values that must live across function calls. If a register has 0 in `CALL_USED_REGISTERS', the compiler automatically saves it on function entry and restores it on function exit, if the register is used within the function. */#define CALL_USED_REGISTERS \ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1 }/* Zero or more C statements that may conditionally modify two variables `fixed_regs' and `call_used_regs' (both of type `char []') after they have been initialized from the two preceding macros. This is necessary in case the fixed or call-clobbered registers depend on target flags. You need not define this macro if it has no work to do. If the usage of an entire class of registers depends on the target flags, you may indicate this to GCC by using this macro to modify `fixed_regs' and `call_used_regs' to 1 for each of the registers in the classes which should not be used by GCC. Also define the macro `REG_CLASS_FROM_LETTER' to return `NO_REGS' if it is called with a letter for a class that shouldn't be used. (However, if this class is not included in `GENERAL_REGS' and all of the insn patterns whose constraints permit this class are controlled by target switches, then GCC will automatically avoid using these registers when the target switches are opposed to them.) *//* #define CONDITIONAL_REGISTER_USAGE *//* If this macro is defined and has a nonzero value, it means that `setjmp' and related functions fail to save the registers, or that `longjmp' fails to restore them. To compensate, the compiler avoids putting variables in registers in functions that use `setjmp'. *//* #define NON_SAVING_SETJMP *//* Define this macro if the target machine has register windows. This C expression returns the register number as seen by the called function corresponding to the register number OUT as seen by the calling function. Return OUT if register number OUT is not an outbound register. *//* #define INCOMING_REGNO(OUT) *//* Define this macro if the target machine has register windows. This C expression returns the register number as seen by the calling function corresponding to the register number IN as seen by the called function. Return IN if register number IN is not an inbound register. *//* #define OUTGOING_REGNO(IN) *//* Order of allocation of registers *//* If defined, an initializer for a vector of integers, containing the numbers of hard registers in the order in which GNU CC should prefer to use them (from most preferred to least). If this macro is not defined, registers are used lowest numbered first (all else being equal). One use of this macro is on machines where the highest numbered registers must always be saved and the save-multiple-registers instruction supports only sequences of consecutive registers. On such machines, define `REG_ALLOC_ORDER' to be an initializer that lists the highest numbered allocatable register first. */#define REG_ALLOC_ORDER { 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 10, 11, 12, 13, 14, 15, 16 }/* A C statement (sans semicolon) to choose the order in which to allocate hard registers for pseudo-registers local to a basic block. Store the desired register order in the array `reg_alloc_order'. Element 0 should be the register to allocate first; element 1, the next register; and so on. The macro body should not assume anything about the contents of `reg_alloc_order' before execution of the macro. On most machines, it is not necessary to define this macro. *//* #define ORDER_REGS_FOR_LOCAL_ALLOC *//* How Values Fit in Registers *//* A C expression for the number of consecutive hard registers, starting at register number REGNO, required to hold a value of mode MODE. On a machine where all registers are exactly one word, a suitable definition of this macro is #define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -