⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alpha.h

📁 GCC编译器源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
#define PROMOTE_FUNCTION_ARGS/* Likewise, if the function return value is promoted.  */#define PROMOTE_FUNCTION_RETURN/* Define this if most significant bit is lowest numbered   in instructions that operate on numbered bit-fields.   There are no such instructions on the Alpha, but the documentation   is little endian.  */#define BITS_BIG_ENDIAN 0/* Define this if most significant byte of a word is the lowest numbered.   This is false on the Alpha.  */#define BYTES_BIG_ENDIAN 0/* Define this if most significant word of a multiword number is lowest   numbered.   For Alpha we can decide arbitrarily since there are no machine instructions   for them.  Might as well be consistent with bytes. */#define WORDS_BIG_ENDIAN 0/* number of bits in an addressable storage unit */#define BITS_PER_UNIT 8/* Width in bits of a "word", which is the contents of a machine register.   Note that this is not necessarily the width of data type `int';   if using 16-bit ints on a 68000, this would still be 32.   But on a machine with 16-bit registers, this would be 16.  */#define BITS_PER_WORD 64/* Width of a word, in units (bytes).  */#define UNITS_PER_WORD 8/* Width in bits of a pointer.   See also the macro `Pmode' defined below.  */#define POINTER_SIZE 64/* Allocation boundary (in *bits*) for storing arguments in argument list.  */#define PARM_BOUNDARY 64/* Boundary (in *bits*) on which stack pointer should be aligned.  */#define STACK_BOUNDARY 64/* Allocation boundary (in *bits*) for the code of a function.  */#define FUNCTION_BOUNDARY 64/* Alignment of field after `int : 0' in a structure.  */#define EMPTY_FIELD_BOUNDARY 64/* Every structure's size must be a multiple of this.  */#define STRUCTURE_SIZE_BOUNDARY 8/* A bitfield declared as `int' forces `int' alignment for the struct.  */#define PCC_BITFIELD_TYPE_MATTERS 1/* Align loop starts for optimal branching.     ??? Kludge this and the next macro for the moment by not doing anything if   we don't optimize and also if we are writing ECOFF symbols to work around   a bug in DEC's assembler. */#define ASM_OUTPUT_LOOP_ALIGN(FILE) \  if (optimize > 0 && write_symbols != SDB_DEBUG)  \    ASM_OUTPUT_ALIGN (FILE, 5)/* This is how to align an instruction for optimal branching.   On Alpha we'll get better performance by aligning on a quadword   boundary.  */#define ASM_OUTPUT_ALIGN_CODE(FILE)	\  if (optimize > 0 && write_symbols != SDB_DEBUG) \    ASM_OUTPUT_ALIGN ((FILE), 4)/* No data type wants to be aligned rounder than this.  */#define BIGGEST_ALIGNMENT 64/* For atomic access to objects, must have at least 32-bit alignment   unless the machine has byte operations.  */#define MINIMUM_ATOMIC_ALIGNMENT (TARGET_BWX ? 8 : 32)/* Align all constants and variables to at least a word boundary so   we can pick up pieces of them faster.  */#define CONSTANT_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)#define DATA_ALIGNMENT(EXP, ALIGN) MAX ((ALIGN), BITS_PER_WORD)/* Set this non-zero if move instructions will actually fail to work   when given unaligned data.   Since we get an error message when we do one, call them invalid.  */#define STRICT_ALIGNMENT 1/* Set this non-zero if unaligned move instructions are extremely slow.   On the Alpha, they trap.  */#define SLOW_UNALIGNED_ACCESS 1/* Standard register usage.  *//* Number of actual hardware registers.   The hardware registers are assigned numbers for the compiler   from 0 to just below FIRST_PSEUDO_REGISTER.   All registers that the compiler knows about must be given numbers,   even those that are not normally considered general registers.   We define all 32 integer registers, even though $31 is always zero,   and all 32 floating-point registers, even though $f31 is also   always zero.  We do not bother defining the FP status register and   there are no other registers.    Since $31 is always zero, we will use register number 31 as the   argument pointer.  It will never appear in the generated code   because we will always be eliminating it in favor of the stack   pointer or hardware frame pointer.   Likewise, we use $f31 for the frame pointer, which will always   be eliminated in favor of the hardware frame pointer or the   stack pointer.  */#define FIRST_PSEUDO_REGISTER 64/* 1 for registers that have pervasive standard uses   and are not available for the register allocator.  */#define FIXED_REGISTERS  \ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, \  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }/* 1 for registers not available across function calls.   These must include the FIXED_REGISTERS and also any   registers that can be used without being saved.   The latter must include the registers where values are returned   and the register where structure-value addresses are passed.   Aside from that, you can include as many other registers as you like.  */#define CALL_USED_REGISTERS  \ {1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, \  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, \  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, \  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }/* List the order in which to allocate registers.  Each register must be   listed once, even those in FIXED_REGISTERS.   We allocate in the following order:   $f1			(nonsaved floating-point register)   $f10-$f15		(likewise)   $f22-$f30		(likewise)   $f21-$f16		(likewise, but input args)   $f0			(nonsaved, but return value)   $f2-$f9		(saved floating-point registers)   $1-$8		(nonsaved integer registers)   $22-$25		(likewise)   $28			(likewise)   $0			(likewise, but return value)   $21-$16		(likewise, but input args)   $27			(procedure value in OSF, nonsaved in NT)   $9-$14		(saved integer registers)   $26			(return PC)   $15			(frame pointer)   $29			(global pointer)   $30, $31, $f31	(stack pointer and always zero/ap & fp)  */#define REG_ALLOC_ORDER		\  {33,					\   42, 43, 44, 45, 46, 47,		\   54, 55, 56, 57, 58, 59, 60, 61, 62,	\   53, 52, 51, 50, 49, 48,		\   32,					\   34, 35, 36, 37, 38, 39, 40, 41,	\   1, 2, 3, 4, 5, 6, 7, 8,		\   22, 23, 24, 25,			\   28,					\   0,					\   21, 20, 19, 18, 17, 16,		\   27,					\   9, 10, 11, 12, 13, 14,		\   26,					\   15,					\   29,					\   30, 31, 63 }/* Return number of consecutive hard regs needed starting at reg REGNO   to hold something of mode MODE.   This is ordinarily the length in words of a value of mode MODE   but can be less for certain modes in special long registers.  */#define HARD_REGNO_NREGS(REGNO, MODE)   \  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.   On Alpha, the integer registers can hold any mode.  The floating-point   registers can hold 32-bit and 64-bit integers as well, but not 16-bit   or 8-bit values.  If we only allowed the larger integers into FP registers,   we'd have to say that QImode and SImode aren't tiable, which is a   pain.  So say all registers can hold everything and see how that works.  */#define HARD_REGNO_MODE_OK(REGNO, MODE) 1/* Value is 1 if it is a good idea to tie two pseudo registers   when one has mode MODE1 and one has mode MODE2.   If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,   for any hard reg, then this must be 0 for correct output.  */#define MODES_TIEABLE_P(MODE1, MODE2) 1/* Specify the registers used for certain standard purposes.   The values of these macros are register numbers.  *//* Alpha pc isn't overloaded on a register that the compiler knows about.  *//* #define PC_REGNUM  *//* Register to use for pushing function arguments.  */#define STACK_POINTER_REGNUM 30/* Base register for access to local variables of the function.  */#define HARD_FRAME_POINTER_REGNUM 15/* Value should be nonzero if functions must have frame pointers.   Zero means the frame pointer need not be set up (and parms   may be accessed via the stack pointer) in functions that seem suitable.   This is computed in `reload', in reload1.c.  */#define FRAME_POINTER_REQUIRED 0/* Base register for access to arguments of the function.  */#define ARG_POINTER_REGNUM 31/* Base register for access to local variables of function.  */#define FRAME_POINTER_REGNUM 63/* Register in which static-chain is passed to a function.    For the Alpha, this is based on an example; the calling sequence   doesn't seem to specify this.  */#define STATIC_CHAIN_REGNUM 1/* Register in which address to store a structure value   arrives in the function.  On the Alpha, the address is passed   as a hidden argument.  */#define STRUCT_VALUE 0/* Define the classes of registers for register constraints in the   machine description.  Also define ranges of constants.   One of the classes must always be named ALL_REGS and include all hard regs.   If there is more than one class, another class must be named NO_REGS   and contain no registers.   The name GENERAL_REGS must be the name of a class (or an alias for   another name such as ALL_REGS).  This is the class of registers   that is allowed by "g" or "r" in a register constraint.   Also, registers outside this class are allocated only when   instructions express preferences for them.   The classes must be numbered in nondecreasing order; that is,   a larger-numbered class must never be contained completely   in a smaller-numbered class.   For any two classes, it is very desirable that there be another   class that represents their union.  */   enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS,		 LIM_REG_CLASSES };#define N_REG_CLASSES (int) LIM_REG_CLASSES/* Give names of register classes as strings for dump file.   */#define REG_CLASS_NAMES				\ {"NO_REGS", "GENERAL_REGS", "FLOAT_REGS", "ALL_REGS" }/* Define which registers fit in which classes.   This is an initializer for a vector of HARD_REG_SET   of length N_REG_CLASSES.  */#define REG_CLASS_CONTENTS	\  { {0, 0}, {~0, 0x80000000}, {0, 0x7fffffff}, {~0, ~0} }/* The same information, inverted:   Return the class number of the smallest class containing   reg number REGNO.  This could be a conditional expression   or could index an array.  */#define REGNO_REG_CLASS(REGNO) \ ((REGNO) >= 32 && (REGNO) <= 62 ? FLOAT_REGS : GENERAL_REGS)/* The class value for index registers, and the one for base regs.  */#define INDEX_REG_CLASS NO_REGS#define BASE_REG_CLASS GENERAL_REGS/* Get reg_class from a letter such as appears in the machine description.  */#define REG_CLASS_FROM_LETTER(C)	\ ((C) == 'f' ? FLOAT_REGS : NO_REGS)/* Define this macro to change register usage conditional on target flags.  *//* #define CONDITIONAL_REGISTER_USAGE  *//* The letters I, J, K, L, M, N, O, and P in a register constraint string   can be used to stand for particular ranges of immediate operands.   This macro defines what the ranges are.   C is the letter, and VALUE is a constant value.   Return 1 if VALUE is in the range specified by C.   For Alpha:   `I' is used for the range of constants most insns can contain.   `J' is the constant zero.   `K' is used for the constant in an LDA insn.   `L' is used for the constant in a LDAH insn.   `M' is used for the constants that can be AND'ed with using a ZAP insn.   `N' is used for complemented 8-bit constants.   `O' is used for negated 8-bit constants.   `P' is used for the constants 1, 2 and 3.  */#define CONST_OK_FOR_LETTER_P(VALUE, C)				\  ((C) == 'I' ? (unsigned HOST_WIDE_INT) (VALUE) < 0x100	\   : (C) == 'J' ? (VALUE) == 0					\   : (C) == 'K' ? (unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000	\   : (C) == 'L' ? (((VALUE) & 0xffff) == 0			\		   && (((VALUE)) >> 31 == -1 || (VALUE) >> 31 == 0) \		   && ((HOST_BITS_PER_WIDE_INT == 64		\			|| (unsigned) (VALUE) != 0x80000000U)))	\   : (C) == 'M' ? zap_mask (VALUE)				\   : (C) == 'N' ? (unsigned HOST_WIDE_INT) (~ (VALUE)) < 0x100	\   : (C) == 'O' ? (unsigned HOST_WIDE_INT) (- (VALUE)) < 0x100	\   : (C) == 'P' ? (VALUE) == 1 || (VALUE) == 2 || (VALUE) == 3	\   : 0)/* Similar, but for floating or large integer constants, and defining letters   G and H.   Here VALUE is the CONST_DOUBLE rtx itself.   For Alpha, `G' is the floating-point constant zero.  `H' is a CONST_DOUBLE   that is the operand of a ZAP insn.  */#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)  			\  ((C) == 'G' ? (GET_MODE_CLASS (GET_MODE (VALUE)) == MODE_FLOAT	\		 && (VALUE) == CONST0_RTX (GET_MODE (VALUE)))		\   : (C) == 'H' ? (GET_MODE (VALUE) == VOIDmode				\		   && zap_mask (CONST_DOUBLE_LOW (VALUE))		\

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -