📄 mips.c
字号:
libgcc routine. */#define SOFT_FP_COSTS COSTS_N_INSNS (256), /* fp_add */ \ COSTS_N_INSNS (256), /* fp_mult_sf */ \ COSTS_N_INSNS (256), /* fp_mult_df */ \ COSTS_N_INSNS (256), /* fp_div_sf */ \ COSTS_N_INSNS (256) /* fp_div_df */static struct mips_rtx_cost_data const mips_rtx_cost_data[PROCESSOR_MAX] = { { /* R3000 */ COSTS_N_INSNS (2), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (5), /* fp_mult_df */ COSTS_N_INSNS (12), /* fp_div_sf */ COSTS_N_INSNS (19), /* fp_div_df */ COSTS_N_INSNS (12), /* int_mult_si */ COSTS_N_INSNS (12), /* int_mult_di */ COSTS_N_INSNS (35), /* int_div_si */ COSTS_N_INSNS (35), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 4KC */ SOFT_FP_COSTS, COSTS_N_INSNS (6), /* int_mult_si */ COSTS_N_INSNS (6), /* int_mult_di */ COSTS_N_INSNS (36), /* int_div_si */ COSTS_N_INSNS (36), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 4KP */ SOFT_FP_COSTS, COSTS_N_INSNS (36), /* int_mult_si */ COSTS_N_INSNS (36), /* int_mult_di */ COSTS_N_INSNS (37), /* int_div_si */ COSTS_N_INSNS (37), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 5KC */ SOFT_FP_COSTS, COSTS_N_INSNS (4), /* int_mult_si */ COSTS_N_INSNS (11), /* int_mult_di */ COSTS_N_INSNS (36), /* int_div_si */ COSTS_N_INSNS (68), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 5KF */ COSTS_N_INSNS (4), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (5), /* fp_mult_df */ COSTS_N_INSNS (17), /* fp_div_sf */ COSTS_N_INSNS (32), /* fp_div_df */ COSTS_N_INSNS (4), /* int_mult_si */ COSTS_N_INSNS (11), /* int_mult_di */ COSTS_N_INSNS (36), /* int_div_si */ COSTS_N_INSNS (68), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 20KC */ DEFAULT_COSTS }, { /* 24k */ COSTS_N_INSNS (8), /* fp_add */ COSTS_N_INSNS (8), /* fp_mult_sf */ COSTS_N_INSNS (10), /* fp_mult_df */ COSTS_N_INSNS (34), /* fp_div_sf */ COSTS_N_INSNS (64), /* fp_div_df */ COSTS_N_INSNS (5), /* int_mult_si */ COSTS_N_INSNS (5), /* int_mult_di */ COSTS_N_INSNS (41), /* int_div_si */ COSTS_N_INSNS (41), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* 24kx */ COSTS_N_INSNS (4), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (5), /* fp_mult_df */ COSTS_N_INSNS (17), /* fp_div_sf */ COSTS_N_INSNS (32), /* fp_div_df */ COSTS_N_INSNS (5), /* int_mult_si */ COSTS_N_INSNS (5), /* int_mult_di */ COSTS_N_INSNS (41), /* int_div_si */ COSTS_N_INSNS (41), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* M4k */ DEFAULT_COSTS }, { /* R3900 */ COSTS_N_INSNS (2), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (5), /* fp_mult_df */ COSTS_N_INSNS (12), /* fp_div_sf */ COSTS_N_INSNS (19), /* fp_div_df */ COSTS_N_INSNS (2), /* int_mult_si */ COSTS_N_INSNS (2), /* int_mult_di */ COSTS_N_INSNS (35), /* int_div_si */ COSTS_N_INSNS (35), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R6000 */ COSTS_N_INSNS (3), /* fp_add */ COSTS_N_INSNS (5), /* fp_mult_sf */ COSTS_N_INSNS (6), /* fp_mult_df */ COSTS_N_INSNS (15), /* fp_div_sf */ COSTS_N_INSNS (16), /* fp_div_df */ COSTS_N_INSNS (17), /* int_mult_si */ COSTS_N_INSNS (17), /* int_mult_di */ COSTS_N_INSNS (38), /* int_div_si */ COSTS_N_INSNS (38), /* int_div_di */ 2, /* branch_cost */ 6 /* memory_latency */ }, { /* R4000 */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (7), /* fp_mult_sf */ COSTS_N_INSNS (8), /* fp_mult_df */ COSTS_N_INSNS (23), /* fp_div_sf */ COSTS_N_INSNS (36), /* fp_div_df */ COSTS_N_INSNS (10), /* int_mult_si */ COSTS_N_INSNS (10), /* int_mult_di */ COSTS_N_INSNS (69), /* int_div_si */ COSTS_N_INSNS (69), /* int_div_di */ 2, /* branch_cost */ 6 /* memory_latency */ }, { /* R4100 */ DEFAULT_COSTS }, { /* R4111 */ DEFAULT_COSTS }, { /* R4120 */ DEFAULT_COSTS }, { /* R4130 */ /* The only costs that appear to be updated here are integer multiplication. */ SOFT_FP_COSTS, COSTS_N_INSNS (4), /* int_mult_si */ COSTS_N_INSNS (6), /* int_mult_di */ COSTS_N_INSNS (69), /* int_div_si */ COSTS_N_INSNS (69), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R4300 */ DEFAULT_COSTS }, { /* R4600 */ DEFAULT_COSTS }, { /* R4650 */ DEFAULT_COSTS }, { /* R5000 */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (5), /* fp_mult_df */ COSTS_N_INSNS (23), /* fp_div_sf */ COSTS_N_INSNS (36), /* fp_div_df */ COSTS_N_INSNS (5), /* int_mult_si */ COSTS_N_INSNS (5), /* int_mult_di */ COSTS_N_INSNS (36), /* int_div_si */ COSTS_N_INSNS (36), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R5400 */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (5), /* fp_mult_sf */ COSTS_N_INSNS (6), /* fp_mult_df */ COSTS_N_INSNS (30), /* fp_div_sf */ COSTS_N_INSNS (59), /* fp_div_df */ COSTS_N_INSNS (3), /* int_mult_si */ COSTS_N_INSNS (4), /* int_mult_di */ COSTS_N_INSNS (42), /* int_div_si */ COSTS_N_INSNS (74), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R5500 */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (5), /* fp_mult_sf */ COSTS_N_INSNS (6), /* fp_mult_df */ COSTS_N_INSNS (30), /* fp_div_sf */ COSTS_N_INSNS (59), /* fp_div_df */ COSTS_N_INSNS (5), /* int_mult_si */ COSTS_N_INSNS (9), /* int_mult_di */ COSTS_N_INSNS (42), /* int_div_si */ COSTS_N_INSNS (74), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R7000 */ /* The only costs that are changed here are integer multiplication. */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (7), /* fp_mult_sf */ COSTS_N_INSNS (8), /* fp_mult_df */ COSTS_N_INSNS (23), /* fp_div_sf */ COSTS_N_INSNS (36), /* fp_div_df */ COSTS_N_INSNS (5), /* int_mult_si */ COSTS_N_INSNS (9), /* int_mult_di */ COSTS_N_INSNS (69), /* int_div_si */ COSTS_N_INSNS (69), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* R8000 */ DEFAULT_COSTS }, { /* R9000 */ /* The only costs that are changed here are integer multiplication. */ COSTS_N_INSNS (6), /* fp_add */ COSTS_N_INSNS (7), /* fp_mult_sf */ COSTS_N_INSNS (8), /* fp_mult_df */ COSTS_N_INSNS (23), /* fp_div_sf */ COSTS_N_INSNS (36), /* fp_div_df */ COSTS_N_INSNS (3), /* int_mult_si */ COSTS_N_INSNS (8), /* int_mult_di */ COSTS_N_INSNS (69), /* int_div_si */ COSTS_N_INSNS (69), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* SB1 */ COSTS_N_INSNS (4), /* fp_add */ COSTS_N_INSNS (4), /* fp_mult_sf */ COSTS_N_INSNS (4), /* fp_mult_df */ COSTS_N_INSNS (24), /* fp_div_sf */ COSTS_N_INSNS (32), /* fp_div_df */ COSTS_N_INSNS (3), /* int_mult_si */ COSTS_N_INSNS (4), /* int_mult_di */ COSTS_N_INSNS (36), /* int_div_si */ COSTS_N_INSNS (68), /* int_div_di */ 1, /* branch_cost */ 4 /* memory_latency */ }, { /* SR71000 */ DEFAULT_COSTS }, };/* Nonzero if -march should decide the default value of MASK_SOFT_FLOAT. */#ifndef MIPS_MARCH_CONTROLS_SOFT_FLOAT#define MIPS_MARCH_CONTROLS_SOFT_FLOAT 0#endif/* Initialize the GCC target structure. */#undef TARGET_ASM_ALIGNED_HI_OP#define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"#undef TARGET_ASM_ALIGNED_SI_OP#define TARGET_ASM_ALIGNED_SI_OP "\t.word\t"#undef TARGET_ASM_ALIGNED_DI_OP#define TARGET_ASM_ALIGNED_DI_OP "\t.dword\t"#undef TARGET_ASM_FUNCTION_PROLOGUE#define TARGET_ASM_FUNCTION_PROLOGUE mips_output_function_prologue#undef TARGET_ASM_FUNCTION_EPILOGUE#define TARGET_ASM_FUNCTION_EPILOGUE mips_output_function_epilogue#undef TARGET_ASM_SELECT_RTX_SECTION#define TARGET_ASM_SELECT_RTX_SECTION mips_select_rtx_section#undef TARGET_ASM_FUNCTION_RODATA_SECTION#define TARGET_ASM_FUNCTION_RODATA_SECTION mips_function_rodata_section#undef TARGET_SCHED_REORDER#define TARGET_SCHED_REORDER mips_sched_reorder#undef TARGET_SCHED_VARIABLE_ISSUE#define TARGET_SCHED_VARIABLE_ISSUE mips_variable_issue#undef TARGET_SCHED_ADJUST_COST#define TARGET_SCHED_ADJUST_COST mips_adjust_cost#undef TARGET_SCHED_ISSUE_RATE#define TARGET_SCHED_ISSUE_RATE mips_issue_rate#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD \ mips_multipass_dfa_lookahead#undef TARGET_DEFAULT_TARGET_FLAGS#define TARGET_DEFAULT_TARGET_FLAGS \ (TARGET_DEFAULT \ | TARGET_CPU_DEFAULT \ | TARGET_ENDIAN_DEFAULT \ | TARGET_FP_EXCEPTIONS_DEFAULT \ | MASK_CHECK_ZERO_DIV \ | MASK_FUSED_MADD)#undef TARGET_HANDLE_OPTION#define TARGET_HANDLE_OPTION mips_handle_option#undef TARGET_FUNCTION_OK_FOR_SIBCALL#define TARGET_FUNCTION_OK_FOR_SIBCALL mips_function_ok_for_sibcall#undef TARGET_VALID_POINTER_MODE#define TARGET_VALID_POINTER_MODE mips_valid_pointer_mode#undef TARGET_RTX_COSTS#define TARGET_RTX_COSTS mips_rtx_costs#undef TARGET_ADDRESS_COST#define TARGET_ADDRESS_COST mips_address_cost#undef TARGET_IN_SMALL_DATA_P#define TARGET_IN_SMALL_DATA_P mips_in_small_data_p#undef TARGET_MACHINE_DEPENDENT_REORG#define TARGET_MACHINE_DEPENDENT_REORG mips_reorg#undef TARGET_ASM_FILE_START#undef TARGET_ASM_FILE_END#define TARGET_ASM_FILE_START mips_file_start#define TARGET_ASM_FILE_END mips_file_end#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true#undef TARGET_INIT_LIBFUNCS#define TARGET_INIT_LIBFUNCS mips_init_libfuncs#undef TARGET_BUILD_BUILTIN_VA_LIST#define TARGET_BUILD_BUILTIN_VA_LIST mips_build_builtin_va_list#undef TARGET_GIMPLIFY_VA_ARG_EXPR#define TARGET_GIMPLIFY_VA_ARG_EXPR mips_gimplify_va_arg_expr#undef TARGET_PROMOTE_FUNCTION_ARGS#define TARGET_PROMOTE_FUNCTION_ARGS hook_bool_tree_true#undef TARGET_PROMOTE_FUNCTION_RETURN#define TARGET_PROMOTE_FUNCTION_RETURN hook_bool_tree_true#undef TARGET_PROMOTE_PROTOTYPES#define TARGET_PROMOTE_PROTOTYPES hook_bool_tree_true#undef TARGET_RETURN_IN_MEMORY#define TARGET_RETURN_IN_MEMORY mips_return_in_memory#undef TARGET_RETURN_IN_MSB#define TARGET_RETURN_IN_MSB mips_return_in_msb#undef TARGET_ASM_OUTPUT_MI_THUNK#define TARGET_ASM_OUTPUT_MI_THUNK mips_output_mi_thunk#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true#undef TARGET_SETUP_INCOMING_VARARGS#define TARGET_SETUP_INCOMING_VARARGS mips_setup_incoming_varargs#undef TARGET_STRICT_ARGUMENT_NAMING#define TARGET_STRICT_ARGUMENT_NAMING mips_strict_argument_naming#undef TARGET_MUST_PASS_IN_STACK#define TARGET_MUST_PASS_IN_STACK must_pass_in_stack_var_size#undef TARGET_PASS_BY_REFERENCE#define TARGET_PASS_BY_REFERENCE mips_pass_by_reference#undef TARGET_CALLEE_COPIES#define TARGET_CALLEE_COPIES mips_callee_copies#undef TARGET_ARG_PARTIAL_BYTES#define TARGET_ARG_PARTIAL_BYTES mips_arg_partial_bytes#undef TARGET_VECTOR_MODE_SUPPORTED_P#define TARGET_VECTOR_MODE_SUPPORTED_P mips_vector_mode_supported_p#undef TARGET_INIT_BUILTINS#define TARGET_INIT_BUILTINS mips_init_builtins#undef TARGET_EXPAND_BUILTIN#define TARGET_EXPAND_BUILTIN mips_expand_builtin#undef TARGET_HAVE_TLS#define TARGET_HAVE_TLS HAVE_AS_TLS#undef TARGET_CANNOT_FORCE_CONST_MEM#define TARGET_CANNOT_FORCE_CONST_MEM mips_cannot_force_const_mem#undef TARGET_ENCODE_SECTION_INFO#define TARGET_ENCODE_SECTION_INFO mips_encode_section_info#undef TARGET_ATTRIBUTE_TABLE#define TARGET_ATTRIBUTE_TABLE mips_attribute_tablestruct gcc_target targetm = TARGET_INITIALIZER;/* Classify symbol X, which must be a SYMBOL_REF or a LABEL_REF. */static enum mips_symbol_typemips_classify_symbol (rtx x){ if (GET_CODE (x) == LABEL_REF) { if (TARGET_MIPS16) return SYMBOL_CONSTANT_POOL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -