📄 i386.h
字号:
builtin_define ("__tune_pentiumpro__"); \ switch (last_tune_char) \ { \ case '3': \ builtin_define ("__tune_pentium3__"); \ /* FALLTHRU */ \ case '2': \ builtin_define ("__tune_pentium2__"); \ break; \ } \ } \ else if (TARGET_K6) \ { \ builtin_define ("__tune_k6__"); \ if (last_tune_char == '2') \ builtin_define ("__tune_k6_2__"); \ else if (last_tune_char == '3') \ builtin_define ("__tune_k6_3__"); \ } \ else if (TARGET_ATHLON) \ { \ builtin_define ("__tune_athlon__"); \ /* Only plain "athlon" lacks SSE. */ \ if (last_tune_char != 'n') \ builtin_define ("__tune_athlon_sse__"); \ } \ else if (TARGET_K8) \ builtin_define ("__tune_k8__"); \ else if (TARGET_PENTIUM4) \ builtin_define ("__tune_pentium4__"); \ else if (TARGET_NOCONA) \ builtin_define ("__tune_nocona__"); \ \ if (TARGET_MMX) \ builtin_define ("__MMX__"); \ if (TARGET_3DNOW) \ builtin_define ("__3dNOW__"); \ if (TARGET_3DNOW_A) \ builtin_define ("__3dNOW_A__"); \ if (TARGET_SSE) \ builtin_define ("__SSE__"); \ if (TARGET_SSE2) \ builtin_define ("__SSE2__"); \ if (TARGET_SSE3) \ builtin_define ("__SSE3__"); \ /* APPLE LOCAL begin mni 4424835 */ \ if (TARGET_MNI) \ builtin_define ("__MNI__"); \ /* APPLE LOCAL end mni */ \ if (TARGET_SSE_MATH && TARGET_SSE) \ builtin_define ("__SSE_MATH__"); \ if (TARGET_SSE_MATH && TARGET_SSE2) \ builtin_define ("__SSE2_MATH__"); \ \ /* Built-ins based on -march=. */ \ if (ix86_arch == PROCESSOR_I486) \ { \ builtin_define ("__i486"); \ builtin_define ("__i486__"); \ } \ else if (ix86_arch == PROCESSOR_PENTIUM) \ { \ builtin_define ("__i586"); \ builtin_define ("__i586__"); \ builtin_define ("__pentium"); \ builtin_define ("__pentium__"); \ if (last_arch_char == 'x') \ builtin_define ("__pentium_mmx__"); \ } \ else if (ix86_arch == PROCESSOR_PENTIUMPRO) \ { \ builtin_define ("__i686"); \ builtin_define ("__i686__"); \ builtin_define ("__pentiumpro"); \ builtin_define ("__pentiumpro__"); \ } \ else if (ix86_arch == PROCESSOR_K6) \ { \ \ builtin_define ("__k6"); \ builtin_define ("__k6__"); \ if (last_arch_char == '2') \ builtin_define ("__k6_2__"); \ else if (last_arch_char == '3') \ builtin_define ("__k6_3__"); \ } \ else if (ix86_arch == PROCESSOR_ATHLON) \ { \ builtin_define ("__athlon"); \ builtin_define ("__athlon__"); \ /* Only plain "athlon" lacks SSE. */ \ if (last_arch_char != 'n') \ builtin_define ("__athlon_sse__"); \ } \ else if (ix86_arch == PROCESSOR_K8) \ { \ builtin_define ("__k8"); \ builtin_define ("__k8__"); \ } \ else if (ix86_arch == PROCESSOR_PENTIUM4) \ { \ builtin_define ("__pentium4"); \ builtin_define ("__pentium4__"); \ } \ else if (ix86_arch == PROCESSOR_NOCONA) \ { \ builtin_define ("__nocona"); \ builtin_define ("__nocona__"); \ } \ } \ while (0)#define TARGET_CPU_DEFAULT_i386 0#define TARGET_CPU_DEFAULT_i486 1#define TARGET_CPU_DEFAULT_pentium 2#define TARGET_CPU_DEFAULT_pentium_mmx 3#define TARGET_CPU_DEFAULT_pentiumpro 4#define TARGET_CPU_DEFAULT_pentium2 5#define TARGET_CPU_DEFAULT_pentium3 6#define TARGET_CPU_DEFAULT_pentium4 7#define TARGET_CPU_DEFAULT_k6 8#define TARGET_CPU_DEFAULT_k6_2 9#define TARGET_CPU_DEFAULT_k6_3 10#define TARGET_CPU_DEFAULT_athlon 11#define TARGET_CPU_DEFAULT_athlon_sse 12#define TARGET_CPU_DEFAULT_k8 13#define TARGET_CPU_DEFAULT_pentium_m 14#define TARGET_CPU_DEFAULT_prescott 15#define TARGET_CPU_DEFAULT_nocona 16/* APPLE LOCAL begin mainline 2006-04-19 4434601 */#define TARGET_CPU_DEFAULT_generic 17#define TARGET_CPU_DEFAULT_NAMES {"i386", "i486", "pentium", "pentium-mmx",\ "pentiumpro", "pentium2", "pentium3", \ "pentium4", "k6", "k6-2", "k6-3",\ "athlon", "athlon-4", "k8", \ "pentium-m", "prescott", "nocona", \ "generic"}/* APPLE LOCAL end mainline 2006-04-19 4434601 */#ifndef CC1_SPEC#define CC1_SPEC "%(cc1_cpu) "#endif/* This macro defines names of additional specifications to put in the specs that can be used in various specifications like CC1_SPEC. Its definition is an initializer with a subgrouping for each command option. Each subgrouping contains a string constant, that defines the specification name, and a string constant that used by the GCC driver program. Do not define this macro if it does not need to do anything. */#ifndef SUBTARGET_EXTRA_SPECS#define SUBTARGET_EXTRA_SPECS#endif#define EXTRA_SPECS \ { "cc1_cpu", CC1_CPU_SPEC }, \ SUBTARGET_EXTRA_SPECS/* target machine storage layout */#define LONG_DOUBLE_TYPE_SIZE 80/* Set the value of FLT_EVAL_METHOD in float.h. When using only the FPU, assume that the fpcw is set to extended precision; when using only SSE, rounding is correct; when using both SSE and the FPU, the rounding precision is indeterminate, since either may be chosen apparently at random. */#define TARGET_FLT_EVAL_METHOD \ (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 0 : 2)#define SHORT_TYPE_SIZE 16#define INT_TYPE_SIZE 32#define FLOAT_TYPE_SIZE 32#define LONG_TYPE_SIZE BITS_PER_WORD#define DOUBLE_TYPE_SIZE 64#define LONG_LONG_TYPE_SIZE 64#if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT#define MAX_BITS_PER_WORD 64#else#define MAX_BITS_PER_WORD 32#endif/* Define this if most significant byte of a word is the lowest numbered. *//* That is true on the 80386. */#define BITS_BIG_ENDIAN 0/* Define this if most significant byte of a word is the lowest numbered. *//* That is not true on the 80386. */#define BYTES_BIG_ENDIAN 0/* Define this if most significant word of a multiword number is the lowest numbered. *//* Not true for 80386 */#define WORDS_BIG_ENDIAN 0/* Width of a word, in units (bytes). */#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)#ifdef IN_LIBGCC2#define MIN_UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)#else#define MIN_UNITS_PER_WORD 4#endif/* Allocation boundary (in *bits*) for storing arguments in argument list. */#define PARM_BOUNDARY BITS_PER_WORD/* Boundary (in *bits*) on which stack pointer should be aligned. *//* APPLE LOCAL begin compiler should obey -mpreferred-stack-boundary (radar 3232990) *//* prefer * #define STACK_BOUNDARY ((ix86_preferred_stack_boundary > 128) ? 128 : ix86_preferred_stack_boundary) *//* We're going to extremes to yield a result of indeterminite signedness here; this macro will be expanded in signed and unsigned contexts, and mixed signedness induces fatal warnings. Radar 3941684. */#define STACK_BOUNDARY ((ix86_preferred_stack_boundary >= 128) ? 128 : \ (ix86_preferred_stack_boundary == 64) ? 64 : 32)/* APPLE LOCAL end compiler should obey -mpreferred-stack-boundary (radar 3232990) *//* Boundary (in *bits*) on which the stack pointer prefers to be aligned; the compiler cannot rely on having this alignment. */#define PREFERRED_STACK_BOUNDARY ix86_preferred_stack_boundary/* As of July 2001, many runtimes to not align the stack properly when entering main. This causes expand_main_function to forcibly align the stack, which results in aligned frames for functions called from main, though it does nothing for the alignment of main itself. */#define FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN \ (ix86_preferred_stack_boundary > STACK_BOUNDARY && !TARGET_64BIT)/* Minimum allocation boundary for the code of a function. */#define FUNCTION_BOUNDARY 8/* C++ stores the virtual bit in the lowest bit of function pointers. */#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_pfn/* Alignment of field after `int : 0' in a structure. */#define EMPTY_FIELD_BOUNDARY BITS_PER_WORD/* Minimum size in bits of the largest boundary to which any and all fundamental data types supported by the hardware might need to be aligned. No data type wants to be aligned rounder than this. Pentium+ prefers DFmode values to be aligned to 64 bit boundary and Pentium Pro XFmode values at 128 bit boundaries. */#define BIGGEST_ALIGNMENT 128/* Decide whether a variable of mode MODE should be 128 bit aligned. */#define ALIGN_MODE_128(MODE) \ ((MODE) == XFmode || (MODE) == TFmode || SSE_REG_MODE_P (MODE))/* The published ABIs say that doubles should be aligned on word boundaries, so lower the alignment for structure fields unless -malign-double is set. *//* ??? Blah -- this macro is used directly by libobjc. Since it supports no vector modes, cut out the complexity and fall back on BIGGEST_FIELD_ALIGNMENT. */#ifdef IN_TARGET_LIBS#ifdef __x86_64__#define BIGGEST_FIELD_ALIGNMENT 128#else#define BIGGEST_FIELD_ALIGNMENT 32#endif#else/* APPLE LOCAL Macintosh alignment */#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED, FIRST_FIELD_P) \ x86_field_alignment (FIELD, COMPUTED)#endif/* If defined, a C expression to compute the alignment given to a constant that is being placed in memory. EXP 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) ix86_constant_alignment ((EXP), (ALIGN))/* If defined, a C expression to compute the alignment for a static variable. 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. One use of this macro is to increase alignment of medium-size data to make it all fit in fewer cache lines. Another is to cause character arrays to be word-aligned so that `strcpy' calls that copy constants to character arrays can be done inline. */#define DATA_ALIGNMENT(TYPE, ALIGN) ix86_data_alignment ((TYPE), (ALIGN))/* If defined, a C expression to compute the alignment for a local variable. 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. One use of this macro is to increase alignment of medium-size data to make it all fit in fewer cache lines. */#define LOCAL_ALIGNMENT(TYPE, ALIGN) ix86_local_alignment ((TYPE), (ALIGN))/* If defined, a C expression that gives the alignment boundary, in bits, of an argument with the specified mode and type. If it is not defined, `PARM_BOUNDARY' is used for all arguments. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -