📄 mips.h
字号:
#define TARGET_MIPS4000 (mips_arch == PROCESSOR_R4000)#define TARGET_MIPS4100 (mips_arch == PROCESSOR_R4100)#define TARGET_MIPS4120 (mips_arch == PROCESSOR_R4120)#define TARGET_MIPS4300 (mips_arch == PROCESSOR_R4300)#define TARGET_MIPS4KC (mips_arch == PROCESSOR_R4KC)#define TARGET_MIPS5KC (mips_arch == PROCESSOR_R5KC)#define TARGET_MIPS5400 (mips_arch == PROCESSOR_R5400)#define TARGET_MIPS5500 (mips_arch == PROCESSOR_R5500)#define TARGET_SB1 (mips_arch == PROCESSOR_SB1)#define TARGET_SR71K (mips_arch == PROCESSOR_SR71000)/* Scheduling target defines. */#define TUNE_MIPS3000 (mips_tune == PROCESSOR_R3000)#define TUNE_MIPS3900 (mips_tune == PROCESSOR_R3900)#define TUNE_MIPS4000 (mips_tune == PROCESSOR_R4000)#define TUNE_MIPS5000 (mips_tune == PROCESSOR_R5000)#define TUNE_MIPS5400 (mips_tune == PROCESSOR_R5400)#define TUNE_MIPS5500 (mips_tune == PROCESSOR_R5500)#define TUNE_MIPS6000 (mips_tune == PROCESSOR_R6000)#define TUNE_SB1 (mips_tune == PROCESSOR_SB1)#define TUNE_SR71K (mips_tune == PROCESSOR_SR71000)/* Define preprocessor macros for the -march and -mtune options. PREFIX is either _MIPS_ARCH or _MIPS_TUNE, INFO is the selected processor. If INFO's canonical name is "foo", define PREFIX to be "foo", and define an additional macro PREFIX_FOO. */#define MIPS_CPP_SET_PROCESSOR(PREFIX, INFO) \ do \ { \ char *macro, *p; \ \ macro = concat ((PREFIX), "_", (INFO)->name, NULL); \ for (p = macro; *p != 0; p++) \ *p = TOUPPER (*p); \ \ builtin_define (macro); \ builtin_define_with_value ((PREFIX), (INFO)->name, 1); \ free (macro); \ } \ while (0)/* Target CPU builtins. */#define TARGET_CPU_CPP_BUILTINS() \ do \ { \ builtin_assert ("cpu=mips"); \ builtin_define ("__mips__"); \ builtin_define ("_mips"); \ \ /* We do this here because __mips is defined below \ and so we can't use builtin_define_std. */ \ if (!flag_iso) \ builtin_define ("mips"); \ \ /* Treat _R3000 and _R4000 like register-size defines, \ which is how they've historically been used. */ \ if (TARGET_64BIT) \ { \ builtin_define ("__mips64"); \ builtin_define_std ("R4000"); \ builtin_define ("_R4000"); \ } \ else \ { \ builtin_define_std ("R3000"); \ builtin_define ("_R3000"); \ } \ if (TARGET_FLOAT64) \ builtin_define ("__mips_fpr=64"); \ else \ builtin_define ("__mips_fpr=32"); \ \ if (TARGET_MIPS16) \ builtin_define ("__mips16"); \ \ MIPS_CPP_SET_PROCESSOR ("_MIPS_ARCH", mips_arch_info); \ MIPS_CPP_SET_PROCESSOR ("_MIPS_TUNE", mips_tune_info); \ \ if (ISA_MIPS1) \ { \ builtin_define ("__mips=1"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS1"); \ } \ else if (ISA_MIPS2) \ { \ builtin_define ("__mips=2"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS2"); \ } \ else if (ISA_MIPS3) \ { \ builtin_define ("__mips=3"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS3"); \ } \ else if (ISA_MIPS4) \ { \ builtin_define ("__mips=4"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS4"); \ } \ else if (ISA_MIPS32) \ { \ builtin_define ("__mips=32"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS32"); \ } \ else if (ISA_MIPS64) \ { \ builtin_define ("__mips=64"); \ builtin_define ("_MIPS_ISA=_MIPS_ISA_MIPS64"); \ } \ \ if (TARGET_HARD_FLOAT) \ builtin_define ("__mips_hard_float"); \ else if (TARGET_SOFT_FLOAT) \ builtin_define ("__mips_soft_float"); \ \ if (TARGET_SINGLE_FLOAT) \ builtin_define ("__mips_single_float"); \ \ if (TARGET_BIG_ENDIAN) \ { \ builtin_define_std ("MIPSEB"); \ builtin_define ("_MIPSEB"); \ } \ else \ { \ builtin_define_std ("MIPSEL"); \ builtin_define ("_MIPSEL"); \ } \ \ /* Macros dependent on the C dialect. */ \ if (preprocessing_asm_p ()) \ { \ builtin_define_std ("LANGUAGE_ASSEMBLY"); \ builtin_define ("_LANGUAGE_ASSEMBLY"); \ } \ else if (c_language == clk_c) \ { \ builtin_define_std ("LANGUAGE_C"); \ builtin_define ("_LANGUAGE_C"); \ } \ else if (c_language == clk_cplusplus) \ { \ builtin_define ("_LANGUAGE_C_PLUS_PLUS"); \ builtin_define ("__LANGUAGE_C_PLUS_PLUS"); \ builtin_define ("__LANGUAGE_C_PLUS_PLUS__"); \ } \ if (flag_objc) \ { \ builtin_define ("_LANGUAGE_OBJECTIVE_C"); \ builtin_define ("__LANGUAGE_OBJECTIVE_C"); \ /* Bizzare, but needed at least for Irix. */ \ builtin_define_std ("LANGUAGE_C"); \ builtin_define ("_LANGUAGE_C"); \ } \ \ if (mips_abi == ABI_EABI) \ builtin_define ("__mips_eabi"); \ \} while (0)/* 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 \{ \ {"no-crt0", 0, \ N_("No default crt0.o") }, \ {"int64", MASK_INT64 | MASK_LONG64, \ N_("Use 64-bit int type")}, \ {"long64", MASK_LONG64, \ N_("Use 64-bit long type")}, \ {"long32", -(MASK_LONG64 | MASK_INT64), \ N_("Use 32-bit long type")}, \ {"split-addresses", MASK_SPLIT_ADDR, \ N_("Optimize lui/addiu address loads")}, \ {"no-split-addresses", -MASK_SPLIT_ADDR, \ N_("Don't optimize lui/addiu address loads")}, \ {"mips-as", -MASK_GAS, \ N_("Use MIPS as")}, \ {"gas", MASK_GAS, \ N_("Use GNU as")}, \ {"rnames", MASK_NAME_REGS, \ N_("Use symbolic register names")}, \ {"no-rnames", -MASK_NAME_REGS, \ N_("Don't use symbolic register names")}, \ {"gpOPT", MASK_GPOPT, \ N_("Use GP relative sdata/sbss sections")}, \ {"gpopt", MASK_GPOPT, \ N_("Use GP relative sdata/sbss sections")}, \ {"no-gpOPT", -MASK_GPOPT, \ N_("Don't use GP relative sdata/sbss sections")}, \ {"no-gpopt", -MASK_GPOPT, \ N_("Don't use GP relative sdata/sbss sections")}, \ {"stats", MASK_STATS, \ N_("Output compiler statistics")}, \ {"no-stats", -MASK_STATS, \ N_("Don't output compiler statistics")}, \ {"memcpy", MASK_MEMCPY, \ N_("Don't optimize block moves")}, \ {"no-memcpy", -MASK_MEMCPY, \ N_("Optimize block moves")}, \ {"mips-tfile", MASK_MIPS_TFILE, \ N_("Use mips-tfile asm postpass")}, \ {"no-mips-tfile", -MASK_MIPS_TFILE, \ N_("Don't use mips-tfile asm postpass")}, \ {"soft-float", MASK_SOFT_FLOAT, \ N_("Use software floating point")}, \ {"hard-float", -MASK_SOFT_FLOAT, \ N_("Use hardware floating point")}, \ {"fp64", MASK_FLOAT64, \ N_("Use 64-bit FP registers")}, \ {"fp32", -MASK_FLOAT64, \ N_("Use 32-bit FP registers")}, \ {"gp64", MASK_64BIT, \ N_("Use 64-bit general registers")}, \ {"gp32", -MASK_64BIT, \ N_("Use 32-bit general registers")}, \ {"abicalls", MASK_ABICALLS, \ N_("Use Irix PIC")}, \ {"no-abicalls", -MASK_ABICALLS, \ N_("Don't use Irix PIC")}, \ {"long-calls", MASK_LONG_CALLS, \ N_("Use indirect calls")}, \ {"no-long-calls", -MASK_LONG_CALLS, \ N_("Don't use indirect calls")}, \ {"embedded-pic", MASK_EMBEDDED_PIC, \ N_("Use embedded PIC")}, \ {"no-embedded-pic", -MASK_EMBEDDED_PIC, \ N_("Don't use embedded PIC")}, \ {"embedded-data", MASK_EMBEDDED_DATA, \ N_("Use ROM instead of RAM")}, \ {"no-embedded-data", -MASK_EMBEDDED_DATA, \ N_("Don't use ROM instead of RAM")}, \ {"uninit-const-in-rodata", MASK_UNINIT_CONST_IN_RODATA, \ N_("Put uninitialized constants in ROM (needs -membedded-data)")}, \ {"no-uninit-const-in-rodata", -MASK_UNINIT_CONST_IN_RODATA, \ N_("Don't put uninitialized constants in ROM")}, \ {"eb", MASK_BIG_ENDIAN, \ N_("Use big-endian byte order")}, \ {"el", -MASK_BIG_ENDIAN, \ N_("Use little-endian byte order")}, \ {"single-float", MASK_SINGLE_FLOAT, \ N_("Use single (32-bit) FP only")}, \ {"double-float", -MASK_SINGLE_FLOAT, \ N_("Don't use single (32-bit) FP only")}, \ {"mad", MASK_MAD, \ N_("Use multiply accumulate")}, \ {"no-mad", -MASK_MAD, \ N_("Don't use multiply accumulate")}, \ {"no-fused-madd", MASK_NO_FUSED_MADD, \ N_("Don't generate fused multiply/add instructions")}, \ {"fused-madd", -MASK_NO_FUSED_MADD, \ N_("Generate fused multiply/add instructions")}, \ {"fix4300", MASK_4300_MUL_FIX, \ N_("Work around early 4300 hardware bug")}, \ {"no-fix4300", -MASK_4300_MUL_FIX, \ N_("Don't work around early 4300 hardware bug")}, \ {"check-zero-division",-MASK_NO_CHECK_ZERO_DIV, \ N_("Trap on integer divide by zero")}, \ {"no-check-zero-division", MASK_NO_CHECK_ZERO_DIV, \ N_("Don't trap on integer divide by zero")}, \ {"check-range-division",MASK_CHECK_RANGE_DIV, \ N_("Trap on integer divide overflow")}, \ {"no-check-range-division",-MASK_CHECK_RANGE_DIV, \ N_("Don't trap on integer divide overflow")}, \ { "branch-likely", MASK_BRANCHLIKELY, \ N_("Use Branch Likely instructions, overriding default for arch")}, \ { "no-branch-likely", -MASK_BRANCHLIKELY, \ N_("Don't use Branch Likely instructions, overriding default for arch")}, \ {"debug", MASK_DEBUG, \ NULL}, \ {"debuga", MASK_DEBUG_A, \ NULL}, \ {"debugb", MASK_DEBUG_B, \ NULL}, \ {"debugc", MASK_DEBUG_C, \ NULL}, \ {"debugd", MASK_DEBUG_D, \ NULL}, \ {"debuge", MASK_DEBUG_E, \ NULL}, \ {"debugf", MASK_DEBUG_F, \ NULL}, \ {"debugg", MASK_DEBUG_G, \ NULL}, \ {"debugi", MASK_DEBUG_I, \ NULL}, \ {"", (TARGET_DEFAULT \ | TARGET_CPU_DEFAULT \ | TARGET_ENDIAN_DEFAULT), \ NULL}, \}/* Default target_flags if no switches are specified */#ifndef TARGET_DEFAULT#define TARGET_DEFAULT 0#endif#ifndef TARGET_CPU_DEFAULT#define TARGET_CPU_DEFAULT 0#endif#ifndef TARGET_ENDIAN_DEFAULT#define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN#endif/* 'from-abi' makes a good default: you get whatever the ABI requires. */#ifndef MIPS_ISA_DEFAULT#ifndef MIPS_CPU_STRING_DEFAULT#define MIPS_CPU_STRING_DEFAULT "from-abi"#endif#endif#ifdef IN_LIBGCC2#undef TARGET_64BIT/* Make this compile time constant for libgcc2 */#ifdef __mips64#define TARGET_64BIT 1#else#define TARGET_64BIT 0#endif#endif /* IN_LIBGCC2 */#ifndef MULTILIB_ENDIAN_DEFAULT#if TARGET_ENDIAN_DEFAULT == 0#define MULTILIB_ENDIAN_DEFAULT "EL"#else#define MULTILIB_ENDIAN_DEFAULT "EB"#endif#endif#ifndef MULTILIB_ISA_DEFAULT# if MIPS_ISA_DEFAULT == 1# define MULTILIB_ISA_DEFAULT "mips1"# else# if MIPS_ISA_DEFAULT == 2# define MULTILIB_ISA_DEFAULT "mips2"# else# if MIPS_ISA_DEFAULT == 3# define MULTILIB_ISA_DEFAULT "mips3"# else# if MIPS_ISA_DEFAULT == 4# define MULTILIB_ISA_DEFAULT "mips4"# else# if MIPS_ISA_DEFAULT == 32# define MULTILIB_ISA_DEFAULT "mips32"# else# if MIPS_ISA_DEFAULT == 64# define MULTILIB_ISA_DEFAULT "mips64"# else# define MULTILIB_ISA_DEFAULT "mips1"# endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -