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

📄 ia64.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 5 页
字号:
/* Definitions of target machine GNU compiler.  IA-64 version.   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006   Free Software Foundation, Inc.   Contributed by James E. Wilson <wilson@cygnus.com> and   		  David Mosberger <davidm@hpl.hp.com>.This file is part of GCC.GCC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GCC; see the file COPYING.  If not, write tothe Free Software Foundation, 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA.  *//* ??? Look at ABI group documents for list of preprocessor macros and   other features required for ABI compliance.  *//* ??? Functions containing a non-local goto target save many registers.  Why?   See for instance execute/920428-2.c.  *//* Run-time target specifications *//* Target CPU builtins.  */#define TARGET_CPU_CPP_BUILTINS()		\do {						\	builtin_assert("cpu=ia64");		\	builtin_assert("machine=ia64");		\	builtin_define("__ia64");		\	builtin_define("__ia64__");		\	builtin_define("__itanium__");		\	if (TARGET_BIG_ENDIAN)			\	  builtin_define("__BIG_ENDIAN__");	\} while (0)#ifndef SUBTARGET_EXTRA_SPECS#define SUBTARGET_EXTRA_SPECS#endif#define EXTRA_SPECS \  { "asm_extra", ASM_EXTRA_SPEC }, \  SUBTARGET_EXTRA_SPECS#define CC1_SPEC "%(cc1_cpu) "#define ASM_EXTRA_SPEC ""/* Variables which are this size or smaller are put in the sdata/sbss   sections.  */extern unsigned int ia64_section_threshold;/* If the assembler supports thread-local storage, assume that the   system does as well.  If a particular target system has an   assembler that supports TLS -- but the rest of the system does not   support TLS -- that system should explicit define TARGET_HAVE_TLS   to false in its own configuration file.  */#if !defined(TARGET_HAVE_TLS) && defined(HAVE_AS_TLS)#define TARGET_HAVE_TLS true#endif#define TARGET_TLS14		(ia64_tls_size == 14)#define TARGET_TLS22		(ia64_tls_size == 22)#define TARGET_TLS64		(ia64_tls_size == 64)#define TARGET_HPUX		0#define TARGET_HPUX_LD		0#ifndef TARGET_ILP32#define TARGET_ILP32 0#endif#ifndef HAVE_AS_LTOFFX_LDXMOV_RELOCS#define HAVE_AS_LTOFFX_LDXMOV_RELOCS 0#endif/* Values for TARGET_INLINE_FLOAT_DIV, TARGET_INLINE_INT_DIV, and   TARGET_INLINE_SQRT.  */enum ia64_inline_type{  INL_NO = 0,  INL_MIN_LAT = 1,  INL_MAX_THR = 2};/* Default target_flags if no switches are specified  */#ifndef TARGET_DEFAULT#define TARGET_DEFAULT (MASK_DWARF2_ASM)#endif#ifndef TARGET_CPU_DEFAULT#define TARGET_CPU_DEFAULT 0#endif/* Which processor to schedule for. The cpu attribute defines a list   that mirrors this list, so changes to ia64.md must be made at the   same time.  */enum processor_type{  PROCESSOR_ITANIUM,			/* Original Itanium.  */  PROCESSOR_ITANIUM2,  PROCESSOR_max};extern enum processor_type ia64_tune;/* 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.  */#define OVERRIDE_OPTIONS ia64_override_options ()/* Some machines may desire to change what optimizations are performed for   various optimization levels.  This macro, if defined, is executed once just   after the optimization level is determined and before the remainder of the   command options have been parsed.  Values set in this macro are used as the   default values for the other command line options.  *//* #define OPTIMIZATION_OPTIONS(LEVEL,SIZE) *//* Driver configuration *//* A C string constant that tells the GCC driver program options to pass to   `cc1'.  It can also specify how to translate options you give to GCC into   options for GCC to pass to the `cc1'.  */#undef CC1_SPEC#define CC1_SPEC "%{G*}"/* A C string constant that tells the GCC driver program options to pass to   `cc1plus'.  It can also specify how to translate options you give to GCC   into options for GCC to pass to the `cc1plus'.  *//* #define CC1PLUS_SPEC "" *//* Storage Layout *//* Define this macro to have the value 1 if the most significant bit in a byte   has the lowest number; otherwise define it to have the value zero.  */#define BITS_BIG_ENDIAN 0#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)/* Define this macro to have the value 1 if, in a multiword object, the most   significant word has the lowest number.  */#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)#if defined(__BIG_ENDIAN__)#define LIBGCC2_WORDS_BIG_ENDIAN 1#else#define LIBGCC2_WORDS_BIG_ENDIAN 0#endif#define UNITS_PER_WORD 8#define POINTER_SIZE (TARGET_ILP32 ? 32 : 64)/* A C expression whose value is zero if pointers that need to be extended   from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and one if   they are zero-extended and negative one if there is a ptr_extend operation.   You need not define this macro if the `POINTER_SIZE' is equal to the width   of `Pmode'.  *//* Need this for 32 bit pointers, see hpux.h for setting it.  *//* #define POINTERS_EXTEND_UNSIGNED *//* 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.  */#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)				\do									\  {									\    if (GET_MODE_CLASS (MODE) == MODE_INT				\	&& GET_MODE_SIZE (MODE) < 4)					\      (MODE) = SImode;							\  }									\while (0)#define PARM_BOUNDARY 64/* Define this macro if you wish to preserve a certain alignment for the stack   pointer.  The definition is a C expression for the desired alignment   (measured in bits).  */#define STACK_BOUNDARY 128/* Align frames on double word boundaries */#ifndef IA64_STACK_ALIGN#define IA64_STACK_ALIGN(LOC) (((LOC) + 15) & ~15)#endif#define FUNCTION_BOUNDARY 128/* Optional x86 80-bit float, quad-precision 128-bit float, and quad-word   128 bit integers all require 128 bit alignment.  */#define BIGGEST_ALIGNMENT 128/* 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.  */#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.  */#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \  (TREE_CODE (EXP) == STRING_CST	\   && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))#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.   The behavior is that the type written for a bit-field (`int', `short', or   other integer type) imposes an alignment for the entire structure, as if the   structure really did contain an ordinary field of that type.  In addition,   the bit-field is placed within the structure so that it would fit within such   a field, not crossing a boundary for it.  */#define PCC_BITFIELD_TYPE_MATTERS 1/* An integer expression for the size in bits of the largest integer machine   mode that should actually be used.  *//* Allow pairs of registers to be used, which is the intent of the default.  */#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)/* By default, the C++ compiler will use function addresses in the   vtable entries.  Setting this nonzero tells the compiler to use   function descriptors instead.  The value of this macro says how   many words wide the descriptor is (normally 2).  It is assumed   that the address of a function descriptor may be treated as a   pointer to a function.   For reasons known only to HP, the vtable entries (as opposed to   normal function descriptors) are 16 bytes wide in 32-bit mode as   well, even though the 3rd and 4th words are unused.  */#define TARGET_VTABLE_USES_DESCRIPTORS (TARGET_ILP32 ? 4 : 2)/* Due to silliness in the HPUX linker, vtable entries must be   8-byte aligned even in 32-bit mode.  Rather than create multiple   ABIs, force this restriction on everyone else too.  */#define TARGET_VTABLE_ENTRY_ALIGN  64/* Due to the above, we need extra padding for the data entries below 0   to retain the alignment of the descriptors.  */#define TARGET_VTABLE_DATA_ENTRY_DISTANCE (TARGET_ILP32 ? 2 : 1)/* Layout of Source Language Data Types */#define INT_TYPE_SIZE 32#define SHORT_TYPE_SIZE 16#define LONG_TYPE_SIZE (TARGET_ILP32 ? 32 : 64)#define LONG_LONG_TYPE_SIZE 64#define FLOAT_TYPE_SIZE 32#define DOUBLE_TYPE_SIZE 64/* long double is XFmode normally, TFmode for HPUX.  */#define LONG_DOUBLE_TYPE_SIZE (TARGET_HPUX ? 128 : 80)/* We always want the XFmode operations from libgcc2.c.  */#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 80#define DEFAULT_SIGNED_CHAR 1/* A C expression for a string describing the name of the data type to use for   size values.  The typedef name `size_t' is defined using the contents of the   string.  *//* ??? Needs to be defined for P64 code.  *//* #define SIZE_TYPE *//* A C expression for a string describing the name of the data type to use for   the result of subtracting two pointers.  The typedef name `ptrdiff_t' is   defined using the contents of the string.  See `SIZE_TYPE' above for more   information.  *//* ??? Needs to be defined for P64 code.  *//* #define PTRDIFF_TYPE *//* A C expression for a string describing the name of the data type to use for   wide characters.  The typedef name `wchar_t' is defined using the contents   of the string.  See `SIZE_TYPE' above for more information.  *//* #define WCHAR_TYPE *//* A C expression for the size in bits of the data type for wide characters.   This is used in `cpp', which cannot make use of `WCHAR_TYPE'.  *//* #define WCHAR_TYPE_SIZE *//* Register Basics *//* Number of hardware registers known to the compiler.   We have 128 general registers, 128 floating point registers,   64 predicate registers, 8 branch registers, one frame pointer,   and several "application" registers.  */#define FIRST_PSEUDO_REGISTER 334/* Ranges for the various kinds of registers.  */#define ADDL_REGNO_P(REGNO) ((unsigned HOST_WIDE_INT) (REGNO) <= 3)#define GR_REGNO_P(REGNO) ((unsigned HOST_WIDE_INT) (REGNO) <= 127)#define FR_REGNO_P(REGNO) ((REGNO) >= 128 && (REGNO) <= 255)#define FP_REGNO_P(REGNO) ((REGNO) >= 128 && (REGNO) <= 254 && (REGNO) != 159)

⌨️ 快捷键说明

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