📄 mips.h
字号:
#define ISA_HAS_DCLZ_DCLO (mips_isa == 64)/* CC1_SPEC causes -mips3 and -mips4 to set -mfp64 and -mgp64; -mips1 or -mips2 sets -mfp32 and -mgp32. This can be overridden by an explicit -mfp32, -mfp64, -mgp32 or -mgp64. -mfp64 sets MASK_FLOAT64 in target_flags, and -mgp64 sets MASK_64BIT. Setting MASK_64BIT in target_flags will cause gcc to assume that registers are 64 bits wide. int, long and void * will be 32 bit; this may be changed with -mint64 or -mlong64. The gen* programs link code that refers to MASK_64BIT. They don't actually use the information in target_flags; they just refer to it. *//* Switch Recognition by gcc.c. Add -G xx support */#undef SWITCH_TAKES_ARG#define SWITCH_TAKES_ARG(CHAR) \ (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')/* 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. On the MIPS, it is used to handle -G. We also use it to set up all of the tables referenced in the other macros. */#define OVERRIDE_OPTIONS override_options ()/* Zero or more C statements that may conditionally modify two variables `fixed_regs' and `call_used_regs' (both of type `char []') after they have been initialized from the two preceding macros. This is necessary in case the fixed or call-clobbered registers depend on target flags. You need not define this macro if it has no work to do. If the usage of an entire class of registers depends on the target flags, you may indicate this to GCC by using this macro to modify `fixed_regs' and `call_used_regs' to 1 for each of the registers in the classes which should not be used by GCC. Also define the macro `REG_CLASS_FROM_LETTER' to return `NO_REGS' if it is called with a letter for a class that shouldn't be used. (However, if this class is not included in `GENERAL_REGS' and all of the insn patterns whose constraints permit this class are controlled by target switches, then GCC will automatically avoid using these registers when the target switches are opposed to them.) */#define CONDITIONAL_REGISTER_USAGE \do \ { \ if (!TARGET_HARD_FLOAT) \ { \ int regno; \ \ for (regno = FP_REG_FIRST; regno <= FP_REG_LAST; regno++) \ fixed_regs[regno] = call_used_regs[regno] = 1; \ for (regno = ST_REG_FIRST; regno <= ST_REG_LAST; regno++) \ fixed_regs[regno] = call_used_regs[regno] = 1; \ } \ else if (! ISA_HAS_8CC) \ { \ int regno; \ \ /* We only have a single condition code register. We \ implement this by hiding all the condition code registers, \ and generating RTL that refers directly to ST_REG_FIRST. */ \ for (regno = ST_REG_FIRST; regno <= ST_REG_LAST; regno++) \ fixed_regs[regno] = call_used_regs[regno] = 1; \ } \ /* In mips16 mode, we permit the $t temporary registers to be used \ for reload. We prohibit the unused $s registers, since they \ are caller saved, and saving them via a mips16 register would \ probably waste more time than just reloading the value. */ \ if (TARGET_MIPS16) \ { \ fixed_regs[18] = call_used_regs[18] = 1; \ fixed_regs[19] = call_used_regs[19] = 1; \ fixed_regs[20] = call_used_regs[20] = 1; \ fixed_regs[21] = call_used_regs[21] = 1; \ fixed_regs[22] = call_used_regs[22] = 1; \ fixed_regs[23] = call_used_regs[23] = 1; \ fixed_regs[26] = call_used_regs[26] = 1; \ fixed_regs[27] = call_used_regs[27] = 1; \ fixed_regs[30] = call_used_regs[30] = 1; \ } \ SUBTARGET_CONDITIONAL_REGISTER_USAGE \ } \while (0)/* This is meant to be redefined in the host dependent files. */#define SUBTARGET_CONDITIONAL_REGISTER_USAGE/* Show we can debug even without a frame pointer. */#define CAN_DEBUG_WITHOUT_FP/* Complain about missing specs and predefines that should be defined in each of the target tm files to override the defaults. This is mostly a place- holder until I can get each of the files updated [mm]. */#if defined(OSF_OS) \ || defined(DECSTATION) \ || defined(SGI_TARGET) \ || defined(MIPS_NEWS) \ || defined(MIPS_SYSV) \ || defined(MIPS_SVR4) \ || defined(MIPS_BSD43)#ifndef CPP_PREDEFINES #error "Define CPP_PREDEFINES in the appropriate tm.h file"#endif#ifndef LIB_SPEC #error "Define LIB_SPEC in the appropriate tm.h file"#endif#ifndef STARTFILE_SPEC #error "Define STARTFILE_SPEC in the appropriate tm.h file"#endif#ifndef MACHINE_TYPE #error "Define MACHINE_TYPE in the appropriate tm.h file"#endif#endif/* Tell collect what flags to pass to nm. */#ifndef NM_FLAGS#define NM_FLAGS "-Bn"#endif/* Names to predefine in the preprocessor for this target machine. */#ifndef CPP_PREDEFINES#define CPP_PREDEFINES "-Dmips -Dunix -Dhost_mips -DMIPSEB -DR3000 -DSYSTYPE_BSD43 \-D_mips -D_unix -D_host_mips -D_MIPSEB -D_R3000 -D_SYSTYPE_BSD43 \-Asystem=unix -Asystem=bsd -Acpu=mips -Amachine=mips"#endif/* Assembler specs. *//* MIPS_AS_ASM_SPEC is passed when using the MIPS assembler rather than gas. */#define MIPS_AS_ASM_SPEC "\%{!.s:-nocpp} %{.s: %{cpp} %{nocpp}} \%{pipe: %e-pipe is not supported} \%{K} %(subtarget_mips_as_asm_spec)"/* SUBTARGET_MIPS_AS_ASM_SPEC is passed when using the MIPS assembler rather than gas. It may be overridden by subtargets. */#ifndef SUBTARGET_MIPS_AS_ASM_SPEC#define SUBTARGET_MIPS_AS_ASM_SPEC "%{v}"#endif/* GAS_ASM_SPEC is passed when using gas, rather than the MIPS assembler. */#define GAS_ASM_SPEC "%{march=*} %{mtune=*} %{mcpu=*} %{m4650} %{mmad:-m4650} %{m3900} %{v} %{mgp32} %{mgp64} %(abi_gas_asm_spec) %{mabi=32:%{!mips*:-mips1}}"extern int mips_abi;#ifndef MIPS_ABI_DEFAULT#define MIPS_ABI_DEFAULT ABI_32#endif#ifndef ABI_GAS_ASM_SPEC#define ABI_GAS_ASM_SPEC ""#endif/* TARGET_ASM_SPEC is used to select either MIPS_AS_ASM_SPEC or GAS_ASM_SPEC as the default, depending upon the value of TARGET_DEFAULT. */#if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GAS) != 0/* GAS */#define TARGET_ASM_SPEC "\%{mmips-as: %(mips_as_asm_spec)} \%{!mmips-as: %(gas_asm_spec)}"#else /* not GAS */#define TARGET_ASM_SPEC "\%{!mgas: %(mips_as_asm_spec)} \%{mgas: %(gas_asm_spec)}"#endif /* not GAS *//* SUBTARGET_ASM_OPTIMIZING_SPEC handles passing optimization options to the assembler. It may be overridden by subtargets. */#ifndef SUBTARGET_ASM_OPTIMIZING_SPEC#define SUBTARGET_ASM_OPTIMIZING_SPEC "\%{noasmopt:-O0} \%{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}}"#endif/* SUBTARGET_ASM_DEBUGGING_SPEC handles passing debugging options to the assembler. It may be overridden by subtargets. */#ifndef SUBTARGET_ASM_DEBUGGING_SPEC#define SUBTARGET_ASM_DEBUGGING_SPEC "\%{g} %{g0} %{g1} %{g2} %{g3} \%{ggdb:-g} %{ggdb0:-g0} %{ggdb1:-g1} %{ggdb2:-g2} %{ggdb3:-g3} \%{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \%{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \%{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3}"#endif/* SUBTARGET_ASM_SPEC is always passed to the assembler. It may be overridden by subtargets. */#ifndef SUBTARGET_ASM_SPEC#define SUBTARGET_ASM_SPEC ""#endif/* ASM_SPEC is the set of arguments to pass to the assembler. */#undef ASM_SPEC#define ASM_SPEC "\%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64}\%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \%(subtarget_asm_optimizing_spec) \%(subtarget_asm_debugging_spec) \%{membedded-pic} \%{mabi=32:-32}%{mabi=o32:-32}%{mabi=n32:-n32}%{mabi=64:-64}%{mabi=n64:-64} \%(target_asm_spec) \%(subtarget_asm_spec)"/* Specify to run a post-processor, mips-tfile after the assembler has run to stuff the mips debug information into the object file. This is needed because the $#!%^ MIPS assembler provides no way of specifying such information in the assembly file. If we are cross compiling, disable mips-tfile unless the user specifies -mmips-tfile. */#ifndef ASM_FINAL_SPEC#if ((TARGET_CPU_DEFAULT | TARGET_DEFAULT) & MASK_GAS) != 0/* GAS */#define ASM_FINAL_SPEC "\%{mmips-as: %{!mno-mips-tfile: \ \n mips-tfile %{v*: -v} \ %{K: -I %b.o~} \ %{!K: %{save-temps: -I %b.o~}} \ %{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \ %{.s:%i} %{!.s:%g.s}}}"#else/* not GAS */#define ASM_FINAL_SPEC "\%{!mgas: %{!mno-mips-tfile: \ \n mips-tfile %{v*: -v} \ %{K: -I %b.o~} \ %{!K: %{save-temps: -I %b.o~}} \ %{c:%W{o*}%{!o*:-o %b.o}}%{!c:-o %U.o} \ %{.s:%i} %{!.s:%g.s}}}"#endif#endif /* ASM_FINAL_SPEC *//* Redefinition of libraries used. Mips doesn't support normal UNIX style profiling via calling _mcount. It does offer profiling that samples the PC, so do what we can... */#ifndef LIB_SPEC#define LIB_SPEC "%{pg:-lprof1} %{p:-lprof1} -lc"#endif/* Extra switches sometimes passed to the linker. *//* ??? The bestGnum will never be passed to the linker, because the gcc driver will interpret it as a -b option. */#ifndef LINK_SPEC#define LINK_SPEC "\%(endian_spec) \%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \%{bestGnum} %{shared} %{non_shared}"#endif /* LINK_SPEC defined *//* Specs for the compiler proper *//* SUBTARGET_CC1_SPEC is passed to the compiler proper. It may be overridden by subtargets. */#ifndef SUBTARGET_CC1_SPEC#define SUBTARGET_CC1_SPEC ""#endif/* Deal with historic options. */#ifndef CC1_CPU_SPEC#define CC1_CPU_SPEC "\%{!mcpu*: \%{m3900:-march=r3900 -mips1 -mfp32 -mgp32 \%n`-m3900' is deprecated. Use `-march=r3900' instead.\n} \%{m4650:-march=r4650 -mmad -msingle-float \%n`-m4650' is deprecated. Use `-march=r4650' instead.\n}}"#endif/* CC1_SPEC is the set of arguments to pass to the compiler proper. *//* Note, we will need to adjust the following if we ever find a MIPS variant that has 32-bit GPRs and 64-bit FPRs as well as fix all of the reload bugs that show up in this case. */#ifndef CC1_SPEC#define CC1_SPEC "\%{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \%{mips1:-mfp32 -mgp32} %{mips2:-mfp32 -mgp32}\%{mips3:%{!msingle-float:%{!m4650:-mfp64}} -mgp64} \%{mips4:%{!msingle-float:%{!m4650:-mfp64}} -mgp64} \%{mips32:-mfp32 -mgp32} \%{mips64:%{!msingle-float:%{!m4650:-mfp64}} -mgp64} \%{mfp64:%{msingle-float:%emay not use both -mfp64 and -msingle-float}} \%{mfp64:%{m4650:%emay not use both -mfp64 and -m4650}} \%{mint64|mlong64|mlong32:-mexplicit-type-size }\%{mgp32: %{mfp64:%emay not use both -mgp32 and -mfp64} %{!mfp32: -mfp32}} \%{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}} \%{pic-none: -mno-half-pic} \%{pic-lib: -mhalf-pic} \%{pic-extern: -mhalf-pic} \%{pic-calls: -mhalf-pic} \%{save-temps: } \%(subtarget_cc1_spec) \%(cc1_cpu_spec)"#endif/* Preprocessor specs. *//* SUBTARGET_CPP_SIZE_SPEC defines SIZE_TYPE and PTRDIFF_TYPE. It may be overridden by subtargets. */#ifndef SUBTARGET_CPP_SIZE_SPEC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -