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

📄 rs6000.h

📁 gcc编译工具没有什么特别
💻 H
📖 第 1 页 / 共 5 页
字号:
   This is a list in braces of pairs in braces,   each pair being { "NAME", VALUE }   where VALUE is the bits to set or minus the bits to clear.   An empty string NAME is used to identify the default VALUE.  *//* This is meant to be redefined in the host dependent files */#ifndef SUBTARGET_SWITCHES#define SUBTARGET_SWITCHES#endif#define TARGET_SWITCHES							\ {{"power",		MASK_POWER  | MASK_MULTIPLE | MASK_STRING},	\  {"power2",		(MASK_POWER | MASK_MULTIPLE | MASK_STRING	\			 | MASK_POWER2)},				\  {"no-power2",		- MASK_POWER2},					\  {"no-power",		- (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE	\			   | MASK_STRING)},				\  {"powerpc",		MASK_POWERPC},					\  {"no-powerpc",	- (MASK_POWERPC | MASK_PPC_GPOPT		\			   | MASK_PPC_GFXOPT | MASK_POWERPC64)},	\  {"powerpc-gpopt",	MASK_POWERPC | MASK_PPC_GPOPT},			\  {"no-powerpc-gpopt",	- MASK_PPC_GPOPT},				\  {"powerpc-gfxopt",	MASK_POWERPC | MASK_PPC_GFXOPT},		\  {"no-powerpc-gfxopt",	- MASK_PPC_GFXOPT},				\  {"powerpc64",		MASK_POWERPC64},				\  {"no-powerpc64",	- MASK_POWERPC64},				\  {"new-mnemonics",	MASK_NEW_MNEMONICS},				\  {"old-mnemonics",	-MASK_NEW_MNEMONICS},				\  {"full-toc",		- (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC	\			   | MASK_MINIMAL_TOC)},			\  {"fp-in-toc",		- MASK_NO_FP_IN_TOC},				\  {"no-fp-in-toc",	MASK_NO_FP_IN_TOC},				\  {"sum-in-toc",	- MASK_NO_SUM_IN_TOC},				\  {"no-sum-in-toc",	MASK_NO_SUM_IN_TOC},				\  {"minimal-toc",	MASK_MINIMAL_TOC},				\  {"minimal-toc",	- (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC)},	\  {"no-minimal-toc",	- MASK_MINIMAL_TOC},				\  {"hard-float",	- MASK_SOFT_FLOAT},				\  {"soft-float",	MASK_SOFT_FLOAT},				\  {"multiple",		MASK_MULTIPLE | MASK_MULTIPLE_SET},		\  {"no-multiple",	- MASK_MULTIPLE},				\  {"no-multiple",	MASK_MULTIPLE_SET},				\  {"string",		MASK_STRING | MASK_STRING_SET},			\  {"no-string",		- MASK_STRING},					\  {"no-string",		MASK_STRING_SET},				\  {"update",		- MASK_NO_UPDATE},				\  {"no-update",		MASK_NO_UPDATE},				\  {"fused-madd",	- MASK_NO_FUSED_MADD},				\  {"no-fused-madd",	MASK_NO_FUSED_MADD},				\  SUBTARGET_SWITCHES							\  {"",			TARGET_DEFAULT}}#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)/* Processor type.  Order must match cpu attribute in MD file.  */enum processor_type {   PROCESSOR_RIOS1,   PROCESSOR_RIOS2,   PROCESSOR_MPCCORE,   PROCESSOR_PPC403,   PROCESSOR_PPC601,   PROCESSOR_PPC603,   PROCESSOR_PPC604,   PROCESSOR_PPC604e,   PROCESSOR_PPC620,   PROCESSOR_PPC750};extern enum processor_type rs6000_cpu;/* Recast the processor type to the cpu attribute.  */#define rs6000_cpu_attr ((enum attr_cpu)rs6000_cpu)/* Define generic processor types based upon current deployment.  */#define PROCESSOR_COMMON  PROCESSOR_PPC601#define PROCESSOR_POWER   PROCESSOR_RIOS1#define PROCESSOR_POWERPC PROCESSOR_PPC604/* Define the default processor.  This is overridden by other tm.h files.  */#define PROCESSOR_DEFAULT PROCESSOR_RIOS1/* Specify the dialect of assembler to use.  New mnemonics is dialect one   and the old mnemonics are dialect zero.  */#define ASSEMBLER_DIALECT TARGET_NEW_MNEMONICS ? 1 : 0/* This macro is similar to `TARGET_SWITCHES' but defines names of   command options that have values.  Its definition is an   initializer with a subgrouping for each command option.   Each subgrouping contains a string constant, that defines the   fixed part of the option name, and the address of a variable.   The variable, type `char *', is set to the variable part of the   given option if the fixed part matches.  The actual option name   is made by appending `-m' to the specified name.   Here is an example which defines `-mshort-data-NUMBER'.  If the   given option is `-mshort-data-512', the variable `m88k_short_data'   will be set to the string `"512"'.	extern char *m88k_short_data;	#define TARGET_OPTIONS { { "short-data-", &m88k_short_data } }  *//* This is meant to be overridden in target specific files.  */#ifndef SUBTARGET_OPTIONS#define	SUBTARGET_OPTIONS#endif#define TARGET_OPTIONS				\{						\   {"cpu=",  &rs6000_select[1].string},		\   {"tune=", &rs6000_select[2].string},		\   {"debug-", &rs6000_debug_name},		\   {"debug=", &rs6000_debug_name},		\   SUBTARGET_OPTIONS				\}/* rs6000_select[0] is reserved for the default cpu defined via --with-cpu */struct rs6000_cpu_select{  const char *string;  const char *name;  int set_tune_p;  int set_arch_p;};extern struct rs6000_cpu_select rs6000_select[];/* Debug support */extern const char *rs6000_debug_name;		/* Name for -mdebug-xxxx option */extern int rs6000_debug_stack;		/* debug stack applications */extern int rs6000_debug_arg;		/* debug argument handling */#define	TARGET_DEBUG_STACK	rs6000_debug_stack#define	TARGET_DEBUG_ARG	rs6000_debug_arg/* Sometimes certain combinations of command options do not make sense   on a particular target machine.  You can define a macro   `OVERRIDE_OPTIONS' to take account of this.  This macro, if   defined, is executed once just after all the command options have   been parsed.   Don't use this macro to turn on various extra optimizations for   `-O'.  That is what `OPTIMIZATION_OPTIONS' is for.   On the RS/6000 this is used to define the target cpu type.  */#define OVERRIDE_OPTIONS rs6000_override_options (TARGET_CPU_DEFAULT)/* Define this to change the optimizations performed by default.  */#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) optimization_options(LEVEL,SIZE)/* Show we can debug even without a frame pointer.  */#define CAN_DEBUG_WITHOUT_FP/* target machine storage layout *//* Define to support cross compilation to an RS6000 target.  */#define REAL_ARITHMETIC/* Define this macro if it is advisable to hold scalars in registers   in a wider mode than that declared by the program.  In such cases,   the value is constrained to be within the bounds of the declared   type, but kept valid in the wider mode.  The signedness of the   extension may differ from that of the type.  */#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)	\  if (GET_MODE_CLASS (MODE) == MODE_INT		\      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \    (MODE) = (! TARGET_POWERPC64 ? SImode : DImode);/* Define this if function arguments should also be promoted using the above   procedure.  */#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. *//* That is true on RS/6000. */#define BITS_BIG_ENDIAN 1/* Define this if most significant byte of a word is the lowest numbered.  *//* That is true on RS/6000.  */#define BYTES_BIG_ENDIAN 1/* Define this if most significant word of a multiword number is lowest   numbered.   For RS/6000 we can decide arbitrarily since there are no machine   instructions for them.  Might as well be consistent with bits and bytes. */#define WORDS_BIG_ENDIAN 1/* 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 (! TARGET_POWERPC64 ? 32 : 64)#define MAX_BITS_PER_WORD 64/* Width of a word, in units (bytes).  */#define UNITS_PER_WORD (! TARGET_POWERPC64 ? 4 : 8)#define MIN_UNITS_PER_WORD 4#define UNITS_PER_FP_WORD 8/* Type used for ptrdiff_t, as a string used in a declaration.  */#define PTRDIFF_TYPE "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)#define MAX_LONG_TYPE_SIZE 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 `char' on the   target machine.  If you don't define this, the default is one   quarter of a word.  (If this would be less than one storage unit,   it is rounded up to one unit.)  */#define CHAR_TYPE_SIZE BITS_PER_UNIT/* 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 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 ? 64 : 128)/* Allocation boundary (in *bits*) for the code of a function.  */#define FUNCTION_BOUNDARY 32/* No data type wants to be aligned rounder than this.  */#define BIGGEST_ALIGNMENT 64/* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints.  */#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \  (TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \	      ? get_inner_array_type (FIELD) \	      : TREE_TYPE (FIELD)) == DFmode \   ? MIN ((COMPUTED), 32) : (COMPUTED))/* 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/* A bitfield declared as `int' forces `int' alignment for the struct.  */#define PCC_BITFIELD_TYPE_MATTERS 1/* AIX increases natural record alignment to doubleword if the first   field is an FP double while the FP fields remain word aligned.  */#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED)	\  ((TREE_CODE (STRUCT) == RECORD_TYPE			\    || TREE_CODE (STRUCT) == UNION_TYPE			\    || TREE_CODE (STRUCT) == QUAL_UNION_TYPE)		\   && TYPE_FIELDS (STRUCT) != 0				\   && DECL_MODE (TYPE_FIELDS (STRUCT)) == DFmode	\   ? MAX (MAX ((COMPUTED), (SPECIFIED)), BIGGEST_ALIGNMENT) \   : MAX ((COMPUTED), (SPECIFIED)))/* Make strings word-aligned so strcpy from constants will be faster.  */#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.  */#define DATA_ALIGNMENT(TYPE, ALIGN)		\  (TREE_CODE (TYPE) == ARRAY_TYPE		\   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode	\   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))/* Non-zero if move instructions will actually fail to work   when given unaligned data.  */#define STRICT_ALIGNMENT 0/* 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.   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.  */

⌨️ 快捷键说明

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