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

📄 rs6000.h

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 H
📖 第 1 页 / 共 5 页
字号:
#define PTRDIFF_TYPE "int"/* Type used for size_t, as a string used in a declaration.  */#define SIZE_TYPE "long unsigned int"/* Type used for wchar_t, as a string used in a declaration.  */#define WCHAR_TYPE "short unsigned int"/* Width of wchar_t in bits.  */#define WCHAR_TYPE_SIZE 16/* A C expression for the size in bits of the type `short' on the   target machine.  If you don't define this, the default is half a   word.  (If this would be less than one storage unit, it is   rounded up to one unit.)  */#define SHORT_TYPE_SIZE 16/* A C expression for the size in bits of the type `int' on the   target machine.  If you don't define this, the default is one   word.  */#define INT_TYPE_SIZE 32/* A C expression for the size in bits of the type `long' on the   target machine.  If you don't define this, the default is one   word.  */#define LONG_TYPE_SIZE (TARGET_32BIT ? 32 : 64)/* A C expression for the size in bits of the type `long long' on the   target machine.  If you don't define this, the default is two   words.  */#define LONG_LONG_TYPE_SIZE 64/* A C expression for the size in bits of the type `float' on the   target machine.  If you don't define this, the default is one   word.  */#define FLOAT_TYPE_SIZE 32/* A C expression for the size in bits of the type `double' on the   target machine.  If you don't define this, the default is two   words.  */#define DOUBLE_TYPE_SIZE 64/* A C expression for the size in bits of the type `long double' on   the target machine.  If you don't define this, the default is two   words.  */#define LONG_DOUBLE_TYPE_SIZE rs6000_long_double_type_size/* Define this to set long double type size to use in libgcc2.c, which can   not depend on target_flags.  */#ifdef __LONG_DOUBLE_128__#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128#else#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64#endif/* Work around rs6000_long_double_type_size dependency in ada/targtyps.c.  */#define WIDEST_HARDWARE_FP_SIZE 64/* Width in bits of a pointer.   See also the macro `Pmode' defined below.  */#define POINTER_SIZE (TARGET_32BIT ? 32 : 64)/* Allocation boundary (in *bits*) for storing arguments in argument list.  */#define PARM_BOUNDARY (TARGET_32BIT ? 32 : 64)/* Boundary (in *bits*) on which stack pointer should be aligned.  */#define STACK_BOUNDARY \  ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)/* Allocation boundary (in *bits*) for the code of a function.  */#define FUNCTION_BOUNDARY 32/* APPLE LOCAL begin Macintosh alignment *//* Constants for alignment macros below.  */#define RS6000_DOUBLE_ALIGNMENT 64#define RS6000_LONGLONG_ALIGNMENT 64#define RS6000_VECTOR_ALIGNMENT 128/* APPLE LOCAL end Macintosh alignment *//* No data type wants to be aligned rounder than this.  */#define BIGGEST_ALIGNMENT 128/* A C expression to compute the alignment for a variables in the   local store.  TYPE is the data type, and ALIGN is the alignment   that the object would ordinarily have.  */#define LOCAL_ALIGNMENT(TYPE, ALIGN)				\  ((TARGET_ALTIVEC && TREE_CODE (TYPE) == VECTOR_TYPE) ? 128 :	\    (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 : \    (TARGET_SPE && TREE_CODE (TYPE) == VECTOR_TYPE) ? 64 : ALIGN)/* Alignment of field after `int : 0' in a structure.  */#define EMPTY_FIELD_BOUNDARY 32/* Every structure's size must be a multiple of this.  */#define STRUCTURE_SIZE_BOUNDARY 8/* Return 1 if a structure or array containing FIELD should be   accessed using `BLKMODE'.   For the SPE, simd types are V2SI, and gcc can be tempted to put the   entire thing in a DI and use subregs to access the internals.   store_bit_field() will force (subreg:DI (reg:V2SI x))'s to the   back-end.  Because a single GPR can hold a V2SI, but not a DI, the   best thing to do is set structs to BLKmode and avoid Severe Tire   Damage.   On e500 v2, DF and DI modes suffer from the same anomaly.  DF can   fit into 1, whereas DI still needs two.  */#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \  ((TARGET_SPE && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE) \   || (TARGET_E500_DOUBLE && (MODE) == DFmode))/* A bit-field declared as `int' forces `int' alignment for the struct.  */#define PCC_BITFIELD_TYPE_MATTERS 1/* Make strings word-aligned so strcpy from constants will be faster.   Make vector constants quadword aligned.  */#define CONSTANT_ALIGNMENT(EXP, ALIGN)                           \  (TREE_CODE (EXP) == STRING_CST	                         \   && (ALIGN) < BITS_PER_WORD                                    \   ? BITS_PER_WORD                                               \   : (ALIGN))/* Make arrays of chars word-aligned for the same reasons.   Align vectors to 128 bits.  Align SPE vectors and E500 v2 doubles to   64 bits.  */#define DATA_ALIGNMENT(TYPE, ALIGN)		\  (TREE_CODE (TYPE) == VECTOR_TYPE ? (TARGET_SPE_ABI ? 64 : 128)	\   : (TARGET_E500_DOUBLE && TYPE_MODE (TYPE) == DFmode) ? 64 \   : TREE_CODE (TYPE) == ARRAY_TYPE		\   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode	\   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))/* Nonzero if move instructions will actually fail to work   when given unaligned data.  */#define STRICT_ALIGNMENT 0/* Define this macro to be the value 1 if unaligned accesses have a cost   many times greater than aligned accesses, for example if they are   emulated in a trap handler.  */#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN)				\  (STRICT_ALIGNMENT							\   || (((MODE) == SFmode || (MODE) == DFmode || (MODE) == TFmode	\	|| (MODE) == DImode)						\       && (ALIGN) < 32))/* 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.   RS/6000 has 32 fixed-point registers, 32 floating-point registers,   an MQ register, a count register, a link register, and 8 condition   register fields, which we view here as separate registers.  AltiVec   adds 32 vector registers and a VRsave register.   In addition, the difference between the frame and argument pointers is   a function of the number of registers saved, so we need to have a   register for AP that will later be eliminated in favor of SP or FP.   This is a normal register, but it is fixed.   We also create a pseudo register for float/int conversions, that will   really represent the memory location used.  It is represented here as   a register, in order to work around problems in allocating stack storage   in inline functions.  */#define FIRST_PSEUDO_REGISTER 113/* This must be included for pre gcc 3.0 glibc compatibility.  */#define PRE_GCC3_DWARF_FRAME_REGISTERS 77/* Add 32 dwarf columns for synthetic SPE registers.  */#define DWARF_FRAME_REGISTERS (FIRST_PSEUDO_REGISTER + 32)/* The SPE has an additional 32 synthetic registers, with DWARF debug   info numbering for these registers starting at 1200.  While eh_frame   register numbering need not be the same as the debug info numbering,   we choose to number these regs for eh_frame at 1200 too.  This allows   future versions of the rs6000 backend to add hard registers and   continue to use the gcc hard register numbering for eh_frame.  If the   extra SPE registers in eh_frame were numbered starting from the   current value of FIRST_PSEUDO_REGISTER, then if FIRST_PSEUDO_REGISTER   changed we'd need to introduce a mapping in DWARF_FRAME_REGNUM to   avoid invalidating older SPE eh_frame info.   We must map them here to avoid huge unwinder tables mostly consisting   of unused space.  */#define DWARF_REG_TO_UNWIND_COLUMN(r) \  ((r) > 1200 ? ((r) - 1200 + FIRST_PSEUDO_REGISTER) : (r))/* Use gcc hard register numbering for eh_frame.  */#define DWARF_FRAME_REGNUM(REGNO) (REGNO)/* 1 for registers that have pervasive standard uses   and are not available for the register allocator.   On RS/6000, r1 is used for the stack.  On Darwin, r2 is available   as a local register; for all other OS's r2 is the TOC pointer.   cr5 is not supposed to be used.   On System V implementations, r13 is fixed and not available for use.  */#define FIXED_REGISTERS  \  {0, 1, FIXED_R2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FIXED_R13, 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, 0, 0, 0, \   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \   0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1,	   \   /* AltiVec 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, 0, 0, 0, \   1, 1						   \   , 1, 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, 1, 1, 1, 1, FIXED_R13, 0, 0, \   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \   1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,	   \   /* AltiVec 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, 0, 0, 0, \   1, 1						   \   , 1, 1                                          \}/* Like `CALL_USED_REGISTERS' except this macro doesn't require that   the entire set of `FIXED_REGISTERS' be included.   (`CALL_USED_REGISTERS' must be a superset of `FIXED_REGISTERS').   This macro is optional.  If not specified, it defaults to the value   of `CALL_USED_REGISTERS'.  */#define CALL_REALLY_USED_REGISTERS  \  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, FIXED_R13, 0, 0, \   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \   1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,	   \   /* AltiVec 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, 0, 0, 0, \   0, 0						   \   , 0, 0                                          \}#define MQ_REGNO     64#define CR0_REGNO    68#define CR1_REGNO    69#define CR2_REGNO    70#define CR3_REGNO    71#define CR4_REGNO    72#define MAX_CR_REGNO 75#define XER_REGNO    76#define FIRST_ALTIVEC_REGNO	77#define LAST_ALTIVEC_REGNO	108#define TOTAL_ALTIVEC_REGS	(LAST_ALTIVEC_REGNO - FIRST_ALTIVEC_REGNO + 1)#define VRSAVE_REGNO		109#define VSCR_REGNO		110#define SPE_ACC_REGNO		111#define SPEFSCR_REGNO		112#define FIRST_SAVED_ALTIVEC_REGNO (FIRST_ALTIVEC_REGNO+20)#define FIRST_SAVED_FP_REGNO    (14+32)#define FIRST_SAVED_GP_REGNO 13/* 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:	fp0		(not saved or used for anything)	fp13 - fp2	(not saved; incoming fp arg registers)	fp1		(not saved; return value) 	fp31 - fp14	(saved; order given to save least number)	cr7, cr6	(not saved or special)	cr1		(not saved, but used for FP operations)	cr0		(not saved, but used for arithmetic operations)	cr4, cr3, cr2	(saved)        r0		(not saved; cannot be base reg)	r9		(not saved; best for TImode)	r11, r10, r8-r4	(not saved; highest used first to make less conflict)	r3     		(not saved; return value register)	r31 - r13	(saved; order given to save least number)	r12		(not saved; if used for DImode or DFmode would use r13)	mq		(not saved; best to use it if we can)	ctr		(not saved; when we have the choice ctr is better)	lr		(saved)        cr5, r1, r2, ap, xer, vrsave, vscr (fixed)	spe_acc, spefscr (fixed)	AltiVec registers:	v0 - v1         (not saved or used for anything)	v13 - v3        (not saved; incoming vector arg registers)	v2              (not saved; incoming vector arg reg; return value)	v19 - v14       (not saved or used for anything)	v31 - v20       (saved; order given to save least number)*/#if FIXED_R2 == 1#define MAYBE_R2_AVAILABLE#define MAYBE_R2_FIXED 2,#else#define MAYBE_R2_AVAILABLE 2,#define MAYBE_R2_FIXED#endif#define REG_ALLOC_ORDER					\  {32, 							\   45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34,	\   33,							\   63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,	\   50, 49, 48, 47, 46, 					\   75, 74, 69, 68, 72, 71, 70,				\   0, MAYBE_R2_AVAILABLE				\   9, 11, 10, 8, 7, 6, 5, 4,				\   3,							\   31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19,	\   18, 17, 16, 15, 14, 13, 12,				\   64, 66, 65, 						\   73, 1, MAYBE_R2_FIXED 67, 76,			\   /* AltiVec registers.  */				\   77, 78,						\   90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80,		\   79,							\   96, 95, 94, 93, 92, 91,				\   108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98,	\   97, 109, 110						\   , 111, 112                                              \}/* True if register is floating-point.  */#define FP_REGNO_P(N) ((N) >= 32 && (N) <= 63)/* True if register is a condition register.  */

⌨️ 快捷键说明

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