📄 mt.h
字号:
/* Target Definitions for MorphoRISC1 Copyright (C) 2005 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) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */extern struct rtx_def * mt_ucmpsi3_libcall;enum processor_type{ PROCESSOR_MS1_64_001, PROCESSOR_MS1_16_002, PROCESSOR_MS1_16_003, PROCESSOR_MS2};enum epilogue_type{ EH_EPILOGUE, NORMAL_EPILOGUE};extern enum processor_type mt_cpu;/* A C string constant that tells the GCC driver program options to pass to the assembler. */#undef ASM_SPEC#define ASM_SPEC "%{march=*} %{!march=*: -march=ms1-16-002}"/* A string to pass to at the end of the command given to the linker. */#undef LIB_SPEC#define LIB_SPEC "--start-group -lc -lsim --end-group \%{msim: ; \march=ms1-64-001:-T 64-001.ld%s; \march=ms1-16-002:-T 16-002.ld%s; \march=ms1-16-003:-T 16-003.ld%s; \march=ms2:-T ms2.ld%s; \ :-T 16-002.ld}"/* A string to pass at the very beginning of the command given to the linker. */#undef STARTFILE_SPEC#define STARTFILE_SPEC "%{msim:crt0.o%s;\march=ms1-64-001:%{!mno-crt0:crt0-64-001.o%s} startup-64-001.o%s; \march=ms1-16-002:%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s; \march=ms1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s; \march=ms2:%{!mno-crt0:crt0-ms2.o%s} startup-ms2.o%s; \ :%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s} \crti.o%s crtbegin.o%s"/* A string to pass at the end of the command given to the linker. */#undef ENDFILE_SPEC#define ENDFILE_SPEC "%{msim:exit.o%s; \march=ms1-64-001:exit-64-001.o%s; \march=ms1-16-002:exit-16-002.o%s; \march=ms1-16-003:exit-16-003.o%s; \march=ms2:exit-ms2.o%s; \ :exit-16-002.o%s} \ crtend.o%s crtn.o%s"/* Run-time target specifications. */#define TARGET_CPU_CPP_BUILTINS() \ do \ { \ builtin_define_with_int_value ("__mt__", mt_cpu); \ builtin_assert ("machine=mt"); \ } \ while (0)#define TARGET_MS1_64_001 (mt_cpu == PROCESSOR_MS1_64_001)#define TARGET_MS1_16_002 (mt_cpu == PROCESSOR_MS1_16_002)#define TARGET_MS1_16_003 (mt_cpu == PROCESSOR_MS1_16_003)#define TARGET_MS2 (mt_cpu == PROCESSOR_MS2)#define TARGET_VERSION fprintf (stderr, " (mt)");#define OVERRIDE_OPTIONS mt_override_options ()#define CAN_DEBUG_WITHOUT_FP 1/* Storage Layout. */#define BITS_BIG_ENDIAN 0#define BYTES_BIG_ENDIAN 1#define WORDS_BIG_ENDIAN 1#define UNITS_PER_WORD 4/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and which has the specified mode and signedness is to be stored in a register. This macro is only called when TYPE is a scalar type. On most RISC machines, which only have operations that operate on a full register, define this macro to set M to `word_mode' if M is an integer mode narrower than `BITS_PER_WORD'. In most cases, only integer modes should be widened because wider-precision floating-point operations are usually more expensive than their narrower counterparts. For most machines, the macro definition does not change UNSIGNEDP. However, some machines, have instructions that preferentially handle either signed or unsigned quantities of certain modes. For example, on the DEC Alpha, 32-bit loads from memory and 32-bit add instructions sign-extend the result to 64 bits. On such machines, set UNSIGNEDP according to which kind of extension is more efficient. Do not define this macro if it would never modify MODE. */#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ do \ { \ if (GET_MODE_CLASS (MODE) == MODE_INT \ && GET_MODE_SIZE (MODE) < 4) \ (MODE) = SImode; \ } \ while (0)/* Normal alignment required for function parameters on the stack, in bits. All stack parameters receive at least this much alignment regardless of data type. On most machines, this is the same as the size of an integer. */#define PARM_BOUNDARY 32/* Define this macro to the minimum alignment enforced by hardware for the stack pointer on this machine. The definition is a C expression for the desired alignment (measured in bits). This value is used as a default if PREFERRED_STACK_BOUNDARY is not defined. On most machines, this should be the same as PARM_BOUNDARY. */#define STACK_BOUNDARY 32/* Alignment required for a function entry point, in bits. */#define FUNCTION_BOUNDARY 32/* Biggest alignment that any data type can require on this machine, in bits. */#define BIGGEST_ALIGNMENT 32/* If defined, a C expression to compute the alignment for a variable in the static store. TYPE is the data type, and ALIGN is the alignment that the object would ordinarily have. The value of this macro is used instead of that alignment to align the object. If this macro is not defined, then ALIGN is used. */#define DATA_ALIGNMENT(TYPE, ALIGN) \ (TREE_CODE (TYPE) == ARRAY_TYPE \ && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))/* If defined, a C expression to compute the alignment given to a constant that is being placed in memory. CONSTANT is the constant and ALIGN is the alignment that the object would ordinarily have. The value of this macro is used instead of that alignment to align the object. If this macro is not defined, then ALIGN is used. The typical use of this macro is to increase alignment for string constants to be word aligned so that `strcpy' calls that copy constants can be done inline. */#define CONSTANT_ALIGNMENT(EXP, ALIGN) \ (TREE_CODE (EXP) == STRING_CST \ && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))/* Number of bits which any structure or union's size must be a multiple of. Each structure or union's size is rounded up to a multiple of this. If you do not define this macro, the default is the same as `BITS_PER_UNIT'. */#define STRUCTURE_SIZE_BOUNDARY 32/* Define this macro to be the value 1 if instructions will fail to work if given data not on the nominal alignment. If instructions will merely go slower in that case, define this macro as 0. */#define STRICT_ALIGNMENT 1/* Define this if you wish to imitate the way many other C compilers handle alignment of bitfields and the structures that contain them. */#define PCC_BITFIELD_TYPE_MATTERS 1/* Layout of Source Language Data Types. */#define INT_TYPE_SIZE 32#define SHORT_TYPE_SIZE 16#define LONG_TYPE_SIZE 32#define LONG_LONG_TYPE_SIZE 64#define CHAR_TYPE_SIZE 8#define FLOAT_TYPE_SIZE 32#define DOUBLE_TYPE_SIZE 64#define LONG_DOUBLE_TYPE_SIZE 64#define DEFAULT_SIGNED_CHAR 1/* Register Basics. *//* General purpose registers. */#define GPR_FIRST 0 /* First gpr */#define GPR_LAST 15 /* Last possible gpr */#define GPR_R0 0 /* Always 0 */#define GPR_R7 7 /* Used as a scratch register */#define GPR_R8 8 /* Used as a scratch register */#define GPR_R9 9 /* Used as a scratch register */#define GPR_R10 10 /* Used as a scratch register */#define GPR_R11 11 /* Used as a scratch register */#define GPR_FP 12 /* Frame pointer */#define GPR_SP 13 /* Stack pointer */#define GPR_LINK 14 /* Saved return address as seen by the caller */#define GPR_INTERRUPT_LINK 15 /* hold return addres for interrupts *//* Argument register that is eliminated in favor of the frame and/or stack pointer. Also add register to point to where the return address is stored. */#define SPECIAL_REG_FIRST (GPR_LAST + 1)#define SPECIAL_REG_LAST (SPECIAL_REG_FIRST)#define ARG_POINTER_REGNUM (SPECIAL_REG_FIRST + 0)#define SPECIAL_REG_P(R) ((R) == SPECIAL_REG_FIRST)/* The first/last register that can contain the arguments to a function. */#define FIRST_ARG_REGNUM 1#define LAST_ARG_REGNUM 4/* The register used to hold functions return value */#define RETVAL_REGNUM 11#define FIRST_PSEUDO_REGISTER (GPR_FIRST + 17)#define IS_PSEUDO_P(R) (REGNO (R) >= FIRST_PSEUDO_REGISTER)/* R0 always has the value 0 R10 static link R12 FP pointer to active frame R13 SP pointer to top of stack R14 RA return address R15 IRA interrupt return address. */#define FIXED_REGISTERS { 1, 0, 0, 0, 0, 0, 0, 0, \ 0, 0, 0, 0, 1, 1, 1, 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. */#define CALL_USED_REGISTERS { 1, 1, 1, 1, 1, 0, 0, 1, \ 1, 1, 1, 1, 1, 1, 1, 1, \ 1 \ }/* How Values Fit in Registers. */#define HARD_REGNO_NREGS(REGNO, MODE) \ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)#define HARD_REGNO_MODE_OK(REGNO, MODE) 1/* A C expression that is nonzero if a value of mode MODE1 is accessible in mode MODE2 without copying. */#define MODES_TIEABLE_P(MODE1, MODE2) 1/* Register Classes. */enum reg_class{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -