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

📄 arm.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 5 页
字号:
   problems in GLD which doesn't understand that armv5t code is   interworking clean.  */extern int arm_cpp_interwork;#ifndef TARGET_DEFAULT#define TARGET_DEFAULT  (MASK_APCS_FRAME)#endif/* The frame pointer register used in gcc has nothing to do with debugging;   that is controlled by the APCS-FRAME option.  */#define CAN_DEBUG_WITHOUT_FP#define OVERRIDE_OPTIONS  arm_override_options ()/* Nonzero if PIC code requires explicit qualifiers to generate   PLT and GOT relocs rather than the assembler doing so implicitly.   Subtargets can override these if required.  */#ifndef NEED_GOT_RELOC#define NEED_GOT_RELOC	0#endif#ifndef NEED_PLT_RELOC#define NEED_PLT_RELOC	0#endif/* Nonzero if we need to refer to the GOT with a PC-relative   offset.  In other words, generate   .word	_GLOBAL_OFFSET_TABLE_ - [. - (.Lxx + 8)]   rather than   .word	_GLOBAL_OFFSET_TABLE_ - (.Lxx + 8)   The default is true, which matches NetBSD.  Subtargets can   override this if required.  */#ifndef GOT_PCREL#define GOT_PCREL   1#endif/* Target machine storage Layout.  *//* 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.  *//* It is far faster to zero extend chars than to sign extend them */#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)	\  if (GET_MODE_CLASS (MODE) == MODE_INT		\      && GET_MODE_SIZE (MODE) < 4)      	\    {						\      if (MODE == QImode)			\	UNSIGNEDP = 1;				\      else if (MODE == HImode)			\	UNSIGNEDP = 1;				\      (MODE) = SImode;				\    }#define PROMOTE_FUNCTION_MODE(MODE, UNSIGNEDP, TYPE)	\  if ((GET_MODE_CLASS (MODE) == MODE_INT		\       || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT)    \      && GET_MODE_SIZE (MODE) < 4)                      \    (MODE) = SImode;				        \/* Define this if most significant bit is lowest numbered   in instructions that operate on numbered bit-fields.  */#define BITS_BIG_ENDIAN  0/* Define this if most significant byte of a word is the lowest numbered.   Most ARM processors are run in little endian mode, so that is the default.   If you want to have it run-time selectable, change the definition in a   cover file to be TARGET_BIG_ENDIAN.  */#define BYTES_BIG_ENDIAN  (TARGET_BIG_END != 0)/* Define this if most significant word of a multiword number is the lowest   numbered.   This is always false, even when in big-endian mode.  */#define WORDS_BIG_ENDIAN  (BYTES_BIG_ENDIAN && ! TARGET_LITTLE_WORDS)/* LIBGCC2_WORDS_BIG_ENDIAN has to be a constant, so we define this based   on processor pre-defineds when compiling libgcc2.c.  */#if defined(__ARMEB__) && !defined(__ARMWEL__)#define LIBGCC2_WORDS_BIG_ENDIAN 1#else#define LIBGCC2_WORDS_BIG_ENDIAN 0#endif/* Define this if most significant word of doubles is the lowest numbered.   The rules are different based on whether or not we use FPA-format,   VFP-format or some other floating point co-processor's format doubles.  */#define FLOAT_WORDS_BIG_ENDIAN (arm_float_words_big_endian ())#define UNITS_PER_WORD	4/* True if natural alignment is used for doubleword types.  */#define ARM_DOUBLEWORD_ALIGN	TARGET_AAPCS_BASED#define DOUBLEWORD_ALIGNMENT 64#define PARM_BOUNDARY  	32#define STACK_BOUNDARY  (ARM_DOUBLEWORD_ALIGN ? DOUBLEWORD_ALIGNMENT : 32)#define PREFERRED_STACK_BOUNDARY \    (arm_abi == ARM_ABI_ATPCS ? 64 : STACK_BOUNDARY)#define FUNCTION_BOUNDARY  32/* The lowest bit is used to indicate Thumb-mode functions, so the   vbit must go into the delta field of pointers to member   functions.  */#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_delta#define EMPTY_FIELD_BOUNDARY  32#define BIGGEST_ALIGNMENT (ARM_DOUBLEWORD_ALIGN ? DOUBLEWORD_ALIGNMENT : 32)/* XXX 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#define BIGGEST_FIELD_ALIGNMENT 64#endif/* Make strings word-aligned so strcpy from constants will be faster.  */#define CONSTANT_ALIGNMENT_FACTOR (TARGET_THUMB || ! arm_tune_xscale ? 1 : 2)#define CONSTANT_ALIGNMENT(EXP, ALIGN)				\   ((TREE_CODE (EXP) == STRING_CST				\     && (ALIGN) < BITS_PER_WORD * CONSTANT_ALIGNMENT_FACTOR)	\    ? BITS_PER_WORD * CONSTANT_ALIGNMENT_FACTOR : (ALIGN))/* Setting STRUCTURE_SIZE_BOUNDARY to 32 produces more efficient code, but the   value set in previous versions of this toolchain was 8, which produces more   compact structures.  The command line option -mstructure_size_boundary=<n>   can be used to change this value.  For compatibility with the ARM SDK   however the value should be left at 32.  ARM SDT Reference Manual (ARM DUI   0020D) page 2-20 says "Structures are aligned on word boundaries".   The AAPCS specifies a value of 8.  */#define STRUCTURE_SIZE_BOUNDARY arm_structure_size_boundaryextern int arm_structure_size_boundary;/* This is the value used to initialize arm_structure_size_boundary.  If a   particular arm target wants to change the default value it should change   the definition of this macro, not STRUCTURE_SIZE_BOUNDARY.  See netbsd.h   for an example of this.  */#ifndef DEFAULT_STRUCTURE_SIZE_BOUNDARY#define DEFAULT_STRUCTURE_SIZE_BOUNDARY 32#endif/* Nonzero if move instructions will actually fail to work   when given unaligned data.  */#define STRICT_ALIGNMENT 1/* wchar_t is unsigned under the AAPCS.  */#ifndef WCHAR_TYPE#define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "int")#define WCHAR_TYPE_SIZE BITS_PER_WORD#endif#ifndef SIZE_TYPE#define SIZE_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long unsigned int")#endif#ifndef PTRDIFF_TYPE#define PTRDIFF_TYPE (TARGET_AAPCS_BASED ? "int" : "long int")#endif/* AAPCS requires that structure alignment is affected by bitfields.  */#ifndef PCC_BITFIELD_TYPE_MATTERS#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED#endif/* Standard register usage.  *//* Register allocation in ARM Procedure Call Standard (as used on RISCiX):   (S - saved over call).	r0	   *	argument word/integer result	r1-r3		argument word	r4-r8	     S	register variable	r9	     S	(rfp) register variable (real frame pointer)	r10  	   F S	(sl) stack limit (used by -mapcs-stack-check)	r11 	   F S	(fp) argument pointer	r12		(ip) temp workspace	r13  	   F S	(sp) lower end of current stack frame	r14		(lr) link address/workspace	r15	   F	(pc) program counter	f0		floating point result	f1-f3		floating point scratch	f4-f7	     S	floating point variable	cc		This is NOT a real register, but is used internally	                to represent things that use or set the condition			codes.	sfp             This isn't either.  It is used during rtl generation	                since the offset between the frame pointer and the			auto's isn't known until after register allocation.	afp		Nor this, we only need this because of non-local	                goto.  Without it fp appears to be used and the			elimination code won't get rid of sfp.  It tracks			fp exactly at all times.   *: See CONDITIONAL_REGISTER_USAGE  *//*  	mvf0		Cirrus floating point result	mvf1-mvf3	Cirrus floating point scratch	mvf4-mvf15   S	Cirrus floating point variable.  *//*	s0-s15		VFP scratch (aka d0-d7).	s16-s31	      S	VFP variable (aka d8-d15).	vfpcc		Not a real register.  Represents the VFP condition			code flags.  *//* The stack backtrace structure is as follows:  fp points to here:  |  save code pointer  |      [fp]                      |  return link value  |      [fp, #-4]                      |  return sp value    |      [fp, #-8]                      |  return fp value    |      [fp, #-12]                     [|  saved r10 value    |]                     [|  saved r9 value     |]                     [|  saved r8 value     |]                     [|  saved r7 value     |]                     [|  saved r6 value     |]                     [|  saved r5 value     |]                     [|  saved r4 value     |]                     [|  saved r3 value     |]                     [|  saved r2 value     |]                     [|  saved r1 value     |]                     [|  saved r0 value     |]                     [|  saved f7 value     |]     three words                     [|  saved f6 value     |]     three words                     [|  saved f5 value     |]     three words                     [|  saved f4 value     |]     three words  r0-r3 are not normally saved in a C function.  *//* 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,1,0,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,1,1,1,1,1,	\  1,1,1,1,1,1,1,1,	\  1,1,1,1,		\  1,1,1,1,1,1,1,1,	\  1,1,1,1,1,1,1,1,	\  1,1,1,1,1,1,1,1,	\  1,1,1,1,1,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.   The CC is not preserved over function calls on the ARM 6, so it is   easier to assume this for all.  SFP is preserved, since FP is.  */#define CALL_USED_REGISTERS  \{                            \  1,1,1,1,0,0,0,0,	     \  0,0,0,0,1,1,1,1,	     \  1,1,1,1,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,1,1,1,1,1,	     \  1,1,1,1,1,1,1,1,	     \  1,1,1,1,		     \  1,1,1,1,1,1,1,1,	     \  1,1,1,1,1,1,1,1,	     \  1,1,1,1,1,1,1,1,	     \  1,1,1,1,1,1,1,1,	     \  1			     \}#ifndef SUBTARGET_CONDITIONAL_REGISTER_USAGE#define SUBTARGET_CONDITIONAL_REGISTER_USAGE#endif#define CONDITIONAL_REGISTER_USAGE				\{								\  int regno;							\								\  if (TARGET_SOFT_FLOAT || TARGET_THUMB || !TARGET_FPA)		\    {								\      for (regno = FIRST_FPA_REGNUM;				\	   regno <= LAST_FPA_REGNUM; ++regno)			\	fixed_regs[regno] = call_used_regs[regno] = 1;		\    }								\								\  if (TARGET_THUMB && optimize_size)				\    {								\      /* When optimizing for size, it's better not to use	\	 the HI regs, because of the overhead of stacking 	\	 them.  */						\      for (regno = FIRST_HI_REGNUM;				\	   regno <= LAST_HI_REGNUM; ++regno)			\	fixed_regs[regno] = call_used_regs[regno] = 1;		\    }								\								\  /* The link register can be clobbered by any branch insn,	\     but we have no way to track that at present, so mark	\     it as unavailable.  */					\  if (TARGET_THUMB)						\    fixed_regs[LR_REGNUM] = call_used_regs[LR_REGNUM] = 1;	\								\  if (TARGET_ARM && TARGET_HARD_FLOAT)				\    {								\      if (TARGET_MAVERICK)					\	{							\	  for (regno = FIRST_FPA_REGNUM;			\	       regno <= LAST_FPA_REGNUM; ++ regno)		\	    fixed_regs[regno] = call_used_regs[regno] = 1;	\	  for (regno = FIRST_CIRRUS_FP_REGNUM;			\	       regno <= LAST_CIRRUS_FP_REGNUM; ++ regno)	\	    {							\	      fixed_regs[regno] = 0;				\	      call_used_regs[regno] = regno < FIRST_CIRRUS_FP_REGNUM + 4; \	    }							\	}							\      if (TARGET_VFP)						\	{							\	  for (regno = FIRST_VFP_REGNUM;			\	       regno <= LAST_VFP_REGNUM; ++ regno)		\	    {							\	      fixed_regs[regno] = 0;				\	      call_used_regs[regno] = regno < FIRST_VFP_REGNUM + 16; \	    }							\	}							\    }								\								\

⌨️ 快捷键说明

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