📄 mips.h
字号:
#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 (mips_isa < 4) \ { \ 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 "%{mcpu=*} %{m4650} %{mmad:-m4650} %{m3900} %{v}"/* 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. */#define ASM_SPEC "\%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \%{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 "\%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \%{bestGnum} %{shared} %{non_shared} \%(linker_endian_spec)"#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/* CC1_SPEC is the set of arguments to pass to the compiler proper. */#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} \%{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 }\%{m4650:-mcpu=r4650} \%{m3900:-mips1 -mcpu=r3900 -mfp32 -mgp32} \%{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) "#endif/* Preprocessor specs. *//* SUBTARGET_CPP_SIZE_SPEC defines SIZE_TYPE and PTRDIFF_TYPE. It may be overridden by subtargets. */#ifndef SUBTARGET_CPP_SIZE_SPEC#define SUBTARGET_CPP_SIZE_SPEC "\%{mlong64:%{!mips1:%{!mips2:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int}}} \%{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int}"#endif/* SUBTARGET_CPP_SPEC is passed to the preprocessor. It may be overridden by subtargets. */#ifndef SUBTARGET_CPP_SPEC#define SUBTARGET_CPP_SPEC ""#endif/* If we're using 64bit longs, then we have to define __LONG_MAX__ correctly. Similarly for 64bit ints and __INT_MAX__. */#ifndef LONG_MAX_SPEC#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_LONG64)#define LONG_MAX_SPEC "%{!mlong32:-D__LONG_MAX__=9223372036854775807L}"#else#define LONG_MAX_SPEC "%{mlong64:-D__LONG_MAX__=9223372036854775807L}"#endif#endif/* CPP_SPEC is the set of arguments to pass to the preprocessor. */#ifndef CPP_SPEC#define CPP_SPEC "\%{.cc: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \%{.cxx: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \%{.C: -D__LANGUAGE_C_PLUS_PLUS -D_LANGUAGE_C_PLUS_PLUS} \%{.m: -D__LANGUAGE_OBJECTIVE_C -D_LANGUAGE_OBJECTIVE_C -D__LANGUAGE_C -D_LANGUAGE_C} \%{.S: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \%{.s: -D__LANGUAGE_ASSEMBLY -D_LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \%{!.S: %{!.s: %{!.cc: %{!.cxx: %{!.C: %{!.m: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}}}}}} \%(subtarget_cpp_size_spec) \%{mips3:-U__mips -D__mips=3 -D__mips64} \%{mips4:-U__mips -D__mips=4 -D__mips64} \%{mgp32:-U__mips64} %{mgp64:-D__mips64} \%{msingle-float:%{!msoft-float:-D__mips_single_float}} \%{m4650:%{!msoft-float:-D__mips_single_float}} \%{msoft-float:-D__mips_soft_float} \%{mabi=eabi:-D__mips_eabi} \%{mips16:%{!mno-mips16:-D__mips16}} \%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}} \%(long_max_spec) \%(subtarget_cpp_spec) "#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 GNU CC driver program. Do not define this macro if it does not need to do anything. */#define EXTRA_SPECS \ { "subtarget_cc1_spec", SUBTARGET_CC1_SPEC }, \ { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, \ { "subtarget_cpp_size_spec", SUBTARGET_CPP_SIZE_SPEC }, \ { "long_max_spec", LONG_MAX_SPEC }, \ { "mips_as_asm_spec", MIPS_AS_ASM_SPEC }, \ { "gas_asm_spec", GAS_ASM_SPEC }, \ { "target_asm_spec", TARGET_ASM_SPEC }, \ { "subtarget_mips_as_asm_spec", SUBTARGET_MIPS_AS_ASM_SPEC }, \ { "subtarget_asm_optimizing_spec", SUBTARGET_ASM_OPTIMIZING_SPEC }, \ { "subtarget_asm_debugging_spec", SUBTARGET_ASM_DEBUGGING_SPEC }, \ { "subtarget_asm_spec", SUBTARGET_ASM_SPEC }, \ { "linker_endian_spec", LINKER_ENDIAN_SPEC }, \ SUBTARGET_EXTRA_SPECS#ifndef SUBTARGET_EXTRA_SPECS#define SUBTARGET_EXTRA_SPECS#endif/* If defined, this macro is an additional prefix to try after `STANDARD_EXEC_PREFIX'. */#ifndef MD_EXEC_PREFIX#define MD_EXEC_PREFIX "/usr/lib/cmplrs/cc/"#endif#ifndef MD_STARTFILE_PREFIX#define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/"#endif/* Print subsidiary information on the compiler version in use. */#define MIPS_VERSION "[AL 1.1, MM 40]"#ifndef MACHINE_TYPE#define MACHINE_TYPE "BSD Mips"#endif#ifndef TARGET_VERSION_INTERNAL#define TARGET_VERSION_INTERNAL(STREAM) \ fprintf (STREAM, " %s %s", MIPS_VERSION, MACHINE_TYPE)#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -