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

📄 sparc.h

📁 gcc编译工具没有什么特别
💻 H
📖 第 1 页 / 共 5 页
字号:
   program.   Do not define this macro if it does not need to do anything.  */#define EXTRA_SPECS \  { "cpp_cpu",		CPP_CPU_SPEC },		\  { "cpp_cpu_default",	CPP_CPU_DEFAULT_SPEC },	\  { "cpp_arch32",	CPP_ARCH32_SPEC },	\  { "cpp_arch64",	CPP_ARCH64_SPEC },	\  { "cpp_arch_default",	CPP_ARCH_DEFAULT_SPEC },\  { "cpp_arch",		CPP_ARCH_SPEC },	\  { "cpp_endian",	CPP_ENDIAN_SPEC },	\  { "cpp_subtarget",	CPP_SUBTARGET_SPEC },	\  { "asm_cpu",		ASM_CPU_SPEC },		\  { "asm_cpu_default",	ASM_CPU_DEFAULT_SPEC },	\  { "asm_arch32",	ASM_ARCH32_SPEC },	\  { "asm_arch64",	ASM_ARCH64_SPEC },	\  { "asm_arch_default",	ASM_ARCH_DEFAULT_SPEC },\  { "asm_arch",		ASM_ARCH_SPEC },	\  SUBTARGET_EXTRA_SPECS#define SUBTARGET_EXTRA_SPECS#ifdef SPARC_BI_ARCH#define NO_BUILTIN_PTRDIFF_TYPE#define NO_BUILTIN_SIZE_TYPE#endif#define PTRDIFF_TYPE (TARGET_ARCH64 ? "long int" : "int")#define SIZE_TYPE (TARGET_ARCH64 ? "long unsigned int" : "unsigned int")/* ??? This should be 32 bits for v9 but what can we do?  */#define WCHAR_TYPE "short unsigned int"#define WCHAR_TYPE_SIZE 16#define MAX_WCHAR_TYPE_SIZE 16/* Show we can debug even without a frame pointer.  */#define CAN_DEBUG_WITHOUT_FP/* To make profiling work with -f{pic,PIC}, we need to emit the profiling   code into the rtl.  Also, if we are profiling, we cannot eliminate   the frame pointer (because the return address will get smashed).  */void sparc_override_options ();#define OVERRIDE_OPTIONS \  do {									\    if (profile_flag || profile_block_flag || profile_arc_flag)		\      {									\	if (flag_pic)							\	  {								\	    const char *pic_string = (flag_pic == 1) ? "-fpic" : "-fPIC";\	    warning ("%s and profiling conflict: disabling %s",		\		     pic_string, pic_string);				\	    flag_pic = 0;						\	  }								\	flag_omit_frame_pointer = 0;					\      }									\    sparc_override_options ();						\    SUBTARGET_OVERRIDE_OPTIONS;						\  } while (0)/* This is meant to be redefined in the host dependent files.  */#define SUBTARGET_OVERRIDE_OPTIONS/* These compiler options take an argument.  We ignore -target for now.  */#define WORD_SWITCH_TAKES_ARG(STR)				\ (DEFAULT_WORD_SWITCH_TAKES_ARG (STR)				\  || !strcmp (STR, "target") || !strcmp (STR, "assert"))/* Print subsidiary information on the compiler version in use.  */#define TARGET_VERSION fprintf (stderr, " (sparc)");/* Generate DBX debugging information.  */#define DBX_DEBUGGING_INFO/* Run-time compilation parameters selecting different hardware subsets.  */extern int target_flags;/* Nonzero if we should generate code to use the fpu.  */#define MASK_FPU 1#define TARGET_FPU (target_flags & MASK_FPU)/* Nonzero if we should use FUNCTION_EPILOGUE.  Otherwise, we   use fast return insns, but lose some generality.  */#define MASK_EPILOGUE 2#define TARGET_EPILOGUE (target_flags & MASK_EPILOGUE)/* Nonzero if we should assume that double pointers might be unaligned.   This can happen when linking gcc compiled code with other compilers,   because the ABI only guarantees 4 byte alignment.  */#define MASK_UNALIGNED_DOUBLES 4#define TARGET_UNALIGNED_DOUBLES (target_flags & MASK_UNALIGNED_DOUBLES)/* Nonzero means that we should generate code for a v8 sparc.  */#define MASK_V8 0x8#define TARGET_V8 (target_flags & MASK_V8)/* Nonzero means that we should generate code for a sparclite.   This enables the sparclite specific instructions, but does not affect   whether FPU instructions are emitted.  */#define MASK_SPARCLITE 0x10#define TARGET_SPARCLITE (target_flags & MASK_SPARCLITE)/* Nonzero if we're compiling for the sparclet.  */#define MASK_SPARCLET 0x20#define TARGET_SPARCLET (target_flags & MASK_SPARCLET)/* Nonzero if we're compiling for v9 sparc.   Note that v9's can run in 32 bit mode so this doesn't necessarily mean   the word size is 64.  */#define MASK_V9 0x40#define TARGET_V9 (target_flags & MASK_V9)/* Non-zero to generate code that uses the instructions deprecated in   the v9 architecture.  This option only applies to v9 systems.  *//* ??? This isn't user selectable yet.  It's used to enable such insns   on 32 bit v9 systems and for the moment they're permanently disabled   on 64 bit v9 systems.  */#define MASK_DEPRECATED_V8_INSNS 0x80#define TARGET_DEPRECATED_V8_INSNS (target_flags & MASK_DEPRECATED_V8_INSNS)/* Mask of all CPU selection flags.  */#define MASK_ISA \(MASK_V8 + MASK_SPARCLITE + MASK_SPARCLET + MASK_V9 + MASK_DEPRECATED_V8_INSNS)/* Non-zero means don't pass `-assert pure-text' to the linker.  */#define MASK_IMPURE_TEXT 0x100#define TARGET_IMPURE_TEXT (target_flags & MASK_IMPURE_TEXT)/* Nonzero means that we should generate code using a flat register window   model, i.e. no save/restore instructions are generated, which is   compatible with normal sparc code.   The frame pointer is %i7 instead of %fp.  */#define MASK_FLAT 0x200#define TARGET_FLAT (target_flags & MASK_FLAT)/* Nonzero means use the registers that the Sparc ABI reserves for   application software.  This must be the default to coincide with the   setting in FIXED_REGISTERS.  */#define MASK_APP_REGS 0x400#define TARGET_APP_REGS (target_flags & MASK_APP_REGS)/* Option to select how quad word floating point is implemented.   When TARGET_HARD_QUAD is true, we use the hardware quad instructions.   Otherwise, we use the SPARC ABI quad library functions.  */#define MASK_HARD_QUAD 0x800#define TARGET_HARD_QUAD (target_flags & MASK_HARD_QUAD)/* Non-zero on little-endian machines.  *//* ??? Little endian support currently only exists for sparclet-aout and   sparc64-elf configurations.  May eventually want to expand the support   to all targets, but for now it's kept local to only those two.  */#define MASK_LITTLE_ENDIAN 0x1000#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN)/* 0x2000, 0x4000 are unused *//* Nonzero if pointers are 64 bits.   At the moment it must follow architecture size flag.  */#define MASK_PTR64 0x8000#define TARGET_PTR64 (target_flags & MASK_PTR64)/* Nonzero if generating code to run in a 64 bit environment.   This is intended to only be used by TARGET_ARCH{32,64} as they are the   mechanism used to control compile time or run time selection.  */#define MASK_64BIT 0x10000#define TARGET_64BIT (target_flags & MASK_64BIT)/* 0x20000,0x40000 unused *//* Non-zero means use a stack bias of 2047.  Stack offsets are obtained by   adding 2047 to %sp.  This option is for v9 only and is the default.  */#define MASK_STACK_BIAS 0x80000#define TARGET_STACK_BIAS (target_flags & MASK_STACK_BIAS)/* Non-zero means %g0 is a normal register.   We still clobber it as necessary, but we can't rely on it always having   a zero value.   We don't bother to support this in true 64 bit mode.  */#define MASK_LIVE_G0 0x100000#define TARGET_LIVE_G0 (target_flags & MASK_LIVE_G0)/* Non-zero means the cpu has broken `save' and `restore' insns, only   the trivial versions work (save %g0,%g0,%g0; restore %g0,%g0,%g0).   We assume the environment will properly handle or otherwise avoid   trouble associated with an interrupt occurring after the `save' or trap   occurring during it.  */#define MASK_BROKEN_SAVERESTORE 0x200000#define TARGET_BROKEN_SAVERESTORE (target_flags & MASK_BROKEN_SAVERESTORE)/* Non-zero means -m{,no-}fpu was passed on the command line.  */#define MASK_FPU_SET 0x400000#define TARGET_FPU_SET (target_flags & MASK_FPU_SET)/* Use the UltraSPARC Visual Instruction Set extensions.  */#define MASK_VIS 0x1000000          #define TARGET_VIS (target_flags & MASK_VIS)/* Compile for Solaris V8+.  32 bit Solaris preserves the high bits of   the current out and global registers.  Linux saves the high bits on   context switches but not signals.  */#define MASK_V8PLUS 0x2000000                 #define TARGET_V8PLUS (target_flags & MASK_V8PLUS)                            /* TARGET_HARD_MUL: Use hardware multiply instructions but not %y.   TARGET_HARD_MUL32: Use hardware multiply instructions with rd %y   to get high 32 bits.  False in V8+ or V9 because multiply stores   a 64 bit result in a register.  */#define TARGET_HARD_MUL32				\  ((TARGET_V8 || TARGET_SPARCLITE			\    || TARGET_SPARCLET || TARGET_DEPRECATED_V8_INSNS)	\   && ! TARGET_V8PLUS)#define TARGET_HARD_MUL					\  (TARGET_V8 || TARGET_SPARCLITE || TARGET_SPARCLET	\   || TARGET_DEPRECATED_V8_INSNS || TARGET_V8PLUS)                        /* Macro to define tables used to set the flags.   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.  */#define TARGET_SWITCHES  \  { {"fpu", MASK_FPU | MASK_FPU_SET,			"Use hardware fp" },		\    {"no-fpu", -MASK_FPU,				"Do not use hardware fp" },	\    {"no-fpu", MASK_FPU_SET,				"Do not use hardware fp" },	\    {"hard-float", MASK_FPU | MASK_FPU_SET,		"Use hardware fp" },		\    {"soft-float", -MASK_FPU,				"Do not use hardware fp" },	\    {"soft-float", MASK_FPU_SET,			"Do not use hardware fp" },	\    {"epilogue", MASK_EPILOGUE,				"Use FUNCTION_EPILOGUE" },	\    {"no-epilogue", -MASK_EPILOGUE,			"Do not use FUNCTION_EPILOGUE" }, 	\    {"unaligned-doubles", MASK_UNALIGNED_DOUBLES,	"Assume possible double misalignment" },\    {"no-unaligned-doubles", -MASK_UNALIGNED_DOUBLES,	"Assume all doubles are aligned" }, \    {"impure-text", MASK_IMPURE_TEXT,			"Pass -assert pure-text to linker" }, \    {"no-impure-text", -MASK_IMPURE_TEXT,		"Do not pass -assert pure-text to linker" }, \    {"flat", MASK_FLAT,					"Use flat register window model" }, \    {"no-flat", -MASK_FLAT,				"Do not use flat register window model" }, \    {"app-regs", MASK_APP_REGS,				"Use ABI reserved registers" },	\    {"no-app-regs", -MASK_APP_REGS,			"Do not use ABI reserved registers" }, \    {"hard-quad-float", MASK_HARD_QUAD,			"Use hardware quad fp instructions" }, \    {"soft-quad-float", -MASK_HARD_QUAD,		"Do not use hardware quad fp instructions" }, \    {"v8plus", MASK_V8PLUS,				"Compile for v8plus ABI" },	\    {"no-v8plus", -MASK_V8PLUS,				"Do not compile for v8plus ABI" }, \    {"vis", MASK_VIS,					"Utilize Visual Instruction Set" }, \    {"no-vis", -MASK_VIS,				"Do not utilize Visual Instruction Set" }, \    /* ??? These are deprecated, coerced to -mcpu=.  Delete in 2.9.  */ \    {"cypress", 0,					"Optimize for Cypress processors" }, \    {"sparclite", 0,					"Optimize for SparcLite processors" }, \    {"f930", 0,						"Optimize for F930 processors" }, \    {"f934", 0,						"Optimize for F934 processors" }, \    {"v8", 0,						"Use V8 Sparc ISA" }, \    {"supersparc", 0,					"Optimize for SuperSparc processors" }, \    /* End of deprecated options.  */	\    {"ptr64", MASK_PTR64,				"Pointers are 64-bit" }, \    {"ptr32", -MASK_PTR64,				"Pointers are 32-bit" }, \    {"32", -MASK_64BIT,					"Use 32-bit ABI" }, \    {"64", MASK_64BIT,					"Use 64-bit ABI" }, \    {"stack-bias", MASK_STACK_BIAS,			"Use stack bias" }, \    {"no-stack-bias", -MASK_STACK_BIAS,			"Do not use stack bias" }, \    SUBTARGET_SWITCHES			\    { "", TARGET_DEFAULT, ""}}/* MASK_APP_REGS must always be the default because that's what   FIXED_REGISTERS is set to and -ffixed- is processed before   CONDITIONAL_REGISTER_USAGE is called (where we process -mno-app-regs).  */#define TARGET_DEFAULT (MASK_APP_REGS + MASK_EPILOGUE + MASK_FPU)/* This is meant to be redefined in target specific files.  */#define SUBTARGET_SWITCHES/* Processor type.   These must match the values for the cpu attribute in sparc.md.  */enum processor_type {  PROCESSOR_V7,  PROCESSOR_CYPRESS,  PROCESSOR_V8,  PROCESSOR_SUPERSPARC,  PROCESSOR_SPARCLITE,  PROCESSOR_F930,  PROCESSOR_F934,  PROCESSOR_HYPERSPARC,  PROCESSOR_SPARCLITE86X,  PROCESSOR_SPARCLET,  PROCESSOR_TSC701,  PROCESSOR_V9,  PROCESSOR_ULTRASPARC};/* This is set from -m{cpu,tune}=xxx.  */extern enum processor_type sparc_cpu;/* Recast the cpu class to be the cpu attribute.   Every file includes us, but not every file includes insn-attr.h.  */#define sparc_cpu_attr ((enum attr_cpu) sparc_cpu)/* 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 } }  */#define TARGET_OPTIONS \{							\  { "cpu=",  &sparc_select[1].string, "Use features of and schedule code for given CPU" }, \  { "tune=", &sparc_select[2].string, "Schedule code for given CPU" }, \  { "cmodel=", &sparc_cmodel_string, "Use given Sparc code model" }, \  { "align-loops=",	&sparc_align_loops_string, "Loop code aligned to this power of 2" }, \  { "align-jumps=",	&sparc_align_jumps_string, "Jump targets are aligned to this power of 2" }, \  { "align-functions=",	&sparc_align_funcs_string, "Function starts are aligned to this power of 2" }, \  SUBTARGET_OPTIONS 					\}/* This is meant to be redefined in target specific files.  */#define SUBTARGET_OPTIONS/* sparc_select[0] is reserved for the default cpu.  */struct sparc_cpu_select{  const char *string;  const char *name;  int set_tune_p;  int set_arch_p;};

⌨️ 快捷键说明

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