Mercurial > hg > CbC > CbC_gcc
diff gcc/config/visium/visium.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/config/visium/visium.c Fri Oct 27 22:46:09 2017 +0900 +++ b/gcc/config/visium/visium.c Thu Oct 25 07:37:49 2018 +0900 @@ -1,5 +1,5 @@ /* Output routines for Visium. - Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (C) 2002-2018 Free Software Foundation, Inc. Contributed by C.Nettleton, J.P.Parkes and P.Garbett. This file is part of GCC. @@ -18,6 +18,8 @@ along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ +#define IN_TARGET_CODE 1 + #include "config.h" #include "system.h" #include "coretypes.h" @@ -145,10 +147,11 @@ interrupt -- specifies this function is an interrupt handler. */ static const struct attribute_spec visium_attribute_table[] = { - /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler, - affects_type_identity } */ - {"interrupt", 0, 0, true, false, false, visium_handle_interrupt_attr, false}, - {NULL, 0, 0, false, false, false, NULL, false} + /* { name, min_len, max_len, decl_req, type_req, fn_type_req, + affects_type_identity, handler, exclude } */ + { "interrupt", 0, 0, true, false, false, false, visium_handle_interrupt_attr, + NULL}, + { NULL, 0, 0, false, false, false, false, NULL, NULL }, }; static struct machine_function *visium_init_machine_status (void); @@ -277,17 +280,19 @@ #undef TARGET_LEGITIMATE_CONSTANT_P #define TARGET_LEGITIMATE_CONSTANT_P visium_legitimate_constant_p -#undef TARGET_LRA_P +#undef TARGET_LRA_P #define TARGET_LRA_P hook_bool_void_false #undef TARGET_LEGITIMATE_ADDRESS_P #define TARGET_LEGITIMATE_ADDRESS_P visium_legitimate_address_p -#undef TARGET_PRINT_OPERAND_PUNCT_VALID_P +#undef TARGET_PRINT_OPERAND_PUNCT_VALID_P #define TARGET_PRINT_OPERAND_PUNCT_VALID_P visium_print_operand_punct_valid_p -#undef TARGET_PRINT_OPERAND + +#undef TARGET_PRINT_OPERAND #define TARGET_PRINT_OPERAND visium_print_operand -#undef TARGET_PRINT_OPERAND_ADDRESS + +#undef TARGET_PRINT_OPERAND_ADDRESS #define TARGET_PRINT_OPERAND_ADDRESS visium_print_operand_address #undef TARGET_ATTRIBUTE_TABLE @@ -344,27 +349,30 @@ #undef TARGET_TRAMPOLINE_INIT #define TARGET_TRAMPOLINE_INIT visium_trampoline_init -#undef TARGET_MD_ASM_ADJUST +#undef TARGET_MD_ASM_ADJUST #define TARGET_MD_ASM_ADJUST visium_md_asm_adjust -#undef TARGET_FLAGS_REGNUM +#undef TARGET_FLAGS_REGNUM #define TARGET_FLAGS_REGNUM FLAGS_REGNUM -#undef TARGET_HARD_REGNO_NREGS +#undef TARGET_HARD_REGNO_NREGS #define TARGET_HARD_REGNO_NREGS visium_hard_regno_nregs -#undef TARGET_HARD_REGNO_MODE_OK +#undef TARGET_HARD_REGNO_MODE_OK #define TARGET_HARD_REGNO_MODE_OK visium_hard_regno_mode_ok -#undef TARGET_MODES_TIEABLE_P +#undef TARGET_MODES_TIEABLE_P #define TARGET_MODES_TIEABLE_P visium_modes_tieable_p -#undef TARGET_CAN_CHANGE_MODE_CLASS +#undef TARGET_CAN_CHANGE_MODE_CLASS #define TARGET_CAN_CHANGE_MODE_CLASS visium_can_change_mode_class -#undef TARGET_CONSTANT_ALIGNMENT +#undef TARGET_CONSTANT_ALIGNMENT #define TARGET_CONSTANT_ALIGNMENT visium_constant_alignment +#undef TARGET_HAVE_SPECULATION_SAFE_VALUE +#define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed + struct gcc_target targetm = TARGET_INITIALIZER; namespace { @@ -440,12 +448,12 @@ /* Align functions on 256-byte (32-quadword) for GR5 and 64-byte (8-quadword) boundaries for GR6 so they start a new burst mode window. */ - if (align_functions == 0) + if (flag_align_functions && !str_align_functions) { if (visium_cpu == PROCESSOR_GR6) - align_functions = 64; + str_align_functions = "64"; else - align_functions = 256; + str_align_functions = "256"; /* Allow the size of compilation units to double because of inlining. In practice the global size of the object code is hardly affected @@ -456,26 +464,25 @@ } /* Likewise for loops. */ - if (align_loops == 0) + if (flag_align_loops && !str_align_loops) { if (visium_cpu == PROCESSOR_GR6) - align_loops = 64; + str_align_loops = "64"; else { - align_loops = 256; /* But not if they are too far away from a 256-byte boundary. */ - align_loops_max_skip = 31; + str_align_loops = "256:32:8"; } } /* Align all jumps on quadword boundaries for the burst mode, and even on 8-quadword boundaries for GR6 so they start a new window. */ - if (align_jumps == 0) + if (flag_align_jumps && !str_align_jumps) { if (visium_cpu == PROCESSOR_GR6) - align_jumps = 64; + str_align_jumps = "64"; else - align_jumps = 8; + str_align_jumps = "8"; } /* We register a machine-specific pass. This pass must be scheduled as @@ -1919,7 +1926,7 @@ int offset_base = offset & ~mask; /* Check that all of the words can be accessed. */ - if (4 < size && 0x80 < size + offset - offset_base) + if (size > 4 && size + offset - offset_base > 0x80) offset_base = offset & ~0x3f; if (offset_base != 0 && offset_base != offset && (offset & mask1) == 0) { @@ -1965,7 +1972,7 @@ int offset_base = offset & ~mask; /* Check that all of the words can be accessed. */ - if (4 < size && 0x80 < size + offset - offset_base) + if (size > 4 && size + offset - offset_base > 0x80) offset_base = offset & ~0x3f; if (offset_base && (offset & mask1) == 0) @@ -3091,10 +3098,9 @@ if (final_sequence) { rtx_insn *delay = NEXT_INSN (insn); - int seen; gcc_assert (delay); - final_scan_insn (delay, asm_out_file, optimize, 0, &seen); + final_scan_insn (delay, asm_out_file, optimize, 0, NULL); PATTERN (delay) = gen_blockage (); INSN_CODE (delay) = -1; }