On Fri, 15 Nov 2013, Richard Biener wrote: > Or you move the macros depending on NO_DOLLARS_IN_LABELS > to tm.h itself ...
I'm dubious about that for the front-end macros, but in some cases it may indeed make sense to move a macro that depends on target macros, rather than really being one itself, to defaults.h. Here is a list of 400 target macros (some false positives likely) used in preprocessor conditionals outside defaults.h, libgcc and libobjc (it's possible some of those may *also* be used in those places) - not just #ifdef but also e.g. "#if TARGET_MACRO == value". Many should be easy to move to defaults.h and eliminate preprocessor conditionals elsewhere, given appropriate automation (most of the *_SPEC macros are probably only used in gcc.c, for example, and have default definitions there, so those are cases of moving an existing default definition to an appropriately commented section of defaults.h). Note that being used in code built for the target is not an obstacle to moving to defaults.h; it just complicates converting to a target hook. However, some macros such as ARG_POINTER_REGNUM or SWITCHABLE_TARGET may not be really practical to eliminate processor conditionals on. ADA_LONG_TYPE_SIZE ADDITIONAL_REGISTER_NAMES ADDR_VEC_ALIGN ADJUST_FIELD_ALIGN ADJUST_INSN_LENGTH ADJUST_REG_ALLOC_ORDER APPLY_RESULT_SIZE ARGS_GROW_DOWNWARD ARG_POINTER_REGNUM ASM_COMMENT_START ASM_DEBUG_SPEC ASM_DECLARE_FUNCTION_NAME ASM_DECLARE_FUNCTION_SIZE ASM_DECLARE_OBJECT_NAME ASM_DECLARE_REGISTER_GLOBAL ASM_FINISH_DECLARE_OBJECT ASM_FPRINTF_EXTENSIONS ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX ASM_NO_SKIP_IN_TEXT ASM_OUTPUT_ADDR_DIFF_ELT ASM_OUTPUT_ADDR_DIFF_VEC ASM_OUTPUT_ADDR_VEC ASM_OUTPUT_ADDR_VEC_ELT ASM_OUTPUT_ALIGNED_BSS ASM_OUTPUT_ALIGNED_COMMON ASM_OUTPUT_ALIGNED_DECL_COMMON ASM_OUTPUT_ALIGNED_DECL_LOCAL ASM_OUTPUT_ALIGNED_LOCAL ASM_OUTPUT_ALIGN_WITH_NOP ASM_OUTPUT_CASE_END ASM_OUTPUT_CASE_LABEL ASM_OUTPUT_DEF ASM_OUTPUT_DEF_FROM_DECLS ASM_OUTPUT_DWARF_DELTA ASM_OUTPUT_DWARF_OFFSET ASM_OUTPUT_DWARF_PCREL ASM_OUTPUT_DWARF_TABLE_REF ASM_OUTPUT_DWARF_VMS_DELTA ASM_OUTPUT_EXTERNAL ASM_OUTPUT_EXTERNAL_LIBCALL ASM_OUTPUT_FDESC ASM_OUTPUT_LABEL_REF ASM_OUTPUT_MAX_SKIP_ALIGN ASM_OUTPUT_OPCODE ASM_OUTPUT_POOL_PROLOGUE ASM_OUTPUT_REG_PUSH ASM_OUTPUT_SOURCE_FILENAME ASM_OUTPUT_SPECIAL_POOL_ENTRY ASM_OUTPUT_SYMBOL_REF ASM_OUTPUT_TLS_COMMON ASM_OUTPUT_TYPE_DIRECTIVE ASM_OUTPUT_WEAKREF ASM_OUTPUT_WEAK_ALIAS ASM_SPEC ASM_WEAKEN_DECL ASM_WEAKEN_LABEL ASSEMBLER_DIALECT AS_NEEDS_DASH_FOR_PIPED_INPUT AVOID_CCMODE_COPIES BIGGEST_FIELD_ALIGNMENT BITFIELD_NBYTES_LIMITED BITS_PER_UNIT BLOCK_REG_PADDING BSS_SECTION_ASM_OP CALL_POPS_ARGS CALL_REALLY_USED_REGISTERS CANNOT_CHANGE_MODE_CLASS CASE_VECTOR_SHORTEN_MODE CC1PLUS_SPEC CC1_SPEC CC_STATUS_INIT CC_STATUS_MDEP CC_STATUS_MDEP_INIT CHAR_TYPE_SIZE CLASS_MAX_NREGS CLEAR_BY_PIECES_P CLEAR_INSN_CACHE COLLECT_EXPORT_LIST COLLECT_RUN_DSYMUTIL COLLECT_SHARED_FINI_FUNC COLLECT_SHARED_INIT_FUNC CONSTANT_ALIGNMENT CONSTANT_POOL_BEFORE_FUNCTION CPLUSPLUS_CPP_SPEC CPP_SPEC CTORS_SECTION_ASM_OP C_COMMON_OVERRIDE_OPTIONS DATA_ABI_ALIGNMENT DATA_ALIGNMENT DATA_SECTION_ASM_OP DBR_OUTPUT_SEQEND DBX_BLOCKS_FUNCTION_RELATIVE DBX_CONTIN_CHAR DBX_CONTIN_LENGTH DBX_DEBUGGING_INFO DBX_FUNCTION_FIRST DBX_LINES_FUNCTION_RELATIVE DBX_NO_XREFS DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END DBX_OUTPUT_SOURCE_LINE DBX_STATIC_STAB_DATA_SECTION DBX_USE_BINCL DEBUGGER_ARG_OFFSET DEBUGGER_AUTO_OFFSET DEBUG_ABBREV_SECTION DEBUG_ARANGES_SECTION DEBUG_FRAME_SECTION DEBUG_INFO_SECTION DEBUG_LINE_SECTION DEBUG_LOC_SECTION DEBUG_MACINFO_SECTION DEBUG_MACRO_SECTION DEBUG_PUBNAMES_SECTION DEBUG_PUBTYPES_SECTION DEBUG_RANGES_SECTION DEBUG_STR_SECTION DOLLARS_IN_IDENTIFIERS DONT_USE_BUILTIN_SETJMP DRIVER_SELF_SPECS DTORS_SECTION_ASM_OP DWARF2_ASM_LINE_DEBUG_INFO DWARF2_DEBUGGING_INFO DWARF2_FRAME_INFO DWARF2_UNWIND_INFO DWARF_ALT_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM DYNAMIC_CHAIN_ADDRESS EH_FRAME_SECTION_NAME EH_RETURN_DATA_REGNO EH_RETURN_HANDLER_RTX EH_RETURN_STACKADJ_RTX EH_USES ELF_ASCII_ESCAPES ELIMINABLE_REGS EMPTY_FIELD_BOUNDARY ENDFILE_SPEC EPILOGUE_USES EXTRA_CONSTRAINT_STR EXTRA_SPECS EXTRA_SPEC_FUNCTIONS FENCE_FOLLOWING_MOVNT FINAL_PRESCAN_INSN FIND_BASE_TERM FIRST_PSEUDO_REGISTER FLOAT_STORE_FLAG_VALUE FLOAT_WORDS_BIG_ENDIAN FRAME_ADDR_RTX FRAME_BEGIN_LABEL FRAME_POINTER_CFA_OFFSET FRAME_POINTER_REGNUM FUNCTION_ARG_OFFSET FUNCTION_VALUE FUNCTION_VALUE_REGNO_P GCC_DRIVER_HOST_INITIALIZATION GCC_INCLUDE_DIR GLOBAL_ASM_OP GOMP_SELF_SPECS GO_IF_LEGITIMATE_ADDRESS GPLUSPLUS_INCLUDE_DIR GTM_SELF_SPECS HANDLE_PRAGMA_PACK_WITH_EXPANSION HARD_FRAME_POINTER_IS_ARG_POINTER HARD_FRAME_POINTER_IS_FRAME_POINTER HARD_FRAME_POINTER_REGNUM HARD_REGNO_CALLER_SAVE_MODE HARD_REGNO_CALL_PART_CLOBBERED HARD_REGNO_RENAME_OK HAS_INIT_SECTION HAVE_AS_LEB128 HAVE_POST_DECREMENT HAVE_POST_INCREMENT HAVE_POST_MODIFY_DISP HAVE_POST_MODIFY_REG HAVE_PRE_DECREMENT HAVE_PRE_INCREMENT HAVE_PRE_MODIFY_DISP HAVE_PRE_MODIFY_REG HONOR_REG_ALLOC_ORDER IFCVT_MACHDEP_INIT IFCVT_MODIFY_CANCEL IFCVT_MODIFY_FINAL IFCVT_MODIFY_INSN IFCVT_MODIFY_MULTIPLE_TESTS IFCVT_MODIFY_TESTS IMMEDIATE_PREFIX INCLUDE_DEFAULTS INCOMING_RETURN_ADDR_RTX INITIAL_FRAME_ADDRESS_RTX INIT_ARRAY_SECTION_ASM_OP INIT_CUMULATIVE_INCOMING_ARGS INIT_CUMULATIVE_LIBCALL_ARGS INIT_ENVIRONMENT INIT_EXPANDERS INIT_SECTION_ASM_OP INSN_LENGTH_ALIGNMENT INSN_REFERENCES_ARE_DELAYED INSN_SETS_ARE_DELAYED INT_TYPE_SIZE INVOKE__main IRA_HARD_REGNO_ADD_COST_MULTIPLIER IS_ASM_LOGICAL_LINE_SEPARATOR JCR_SECTION_NAME JMP_BUF_SIZE JUMP_ALIGN JUMP_TABLES_IN_TEXT_SECTION LABEL_ALIGN LABEL_ALIGN_AFTER_BARRIER LDD_SUFFIX LD_FINI_SWITCH LD_INIT_SWITCH LEAF_REGISTERS LEAF_REG_REMAP LEGITIMIZE_RELOAD_ADDRESS LIBASAN_EARLY_SPEC LIBCALL_VALUE LIBGCC2_HAS_TF_MODE LIBGCC_SPEC LIBSTDCXX LIBSTDCXX_STATIC LIBTSAN_EARLY_SPEC LIB_SPEC LIMIT_RELOAD_CLASS LINK_COMMAND_SPEC LINK_EH_SPEC LINK_GCC_C_SEQUENCE_SPEC LINK_LIBGCC_SPECIAL_1 LINK_SPEC LINK_SSP_SPEC LOAD_EXTEND_OP LOCAL_LABEL_PREFIX LOGICAL_OP_NON_SHORT_CIRCUIT LONG_LONG_TYPE_SIZE LOOP_ALIGN MAIN_STACK_BOUNDARY MAKE_DECL_ONE_ONLY MASK_RETURN_ADDR MATH_LIBRARY MATH_LIBRARY_PROFILE MAX_CONDITIONAL_EXECUTE MAX_OFILE_ALIGNMENT MD_CAN_REDIRECT_BRANCH MD_EXEC_PREFIX MD_STARTFILE_PREFIX MD_STARTFILE_PREFIX_1 MEMORY_MOVE_COST MINIMUM_ATOMIC_ALIGNMENT MODE_AFTER MODE_BASE_REG_CLASS MODE_BASE_REG_REG_CLASS MODE_CODE_BASE_REG_CLASS MODE_ENTRY MODE_EXIT MODIFY_JNI_METHOD_CALL MOVE_BY_PIECES_P MULTILIB_DEFAULTS MY_ISCOFF NAME__MAIN NATIVE_SYSTEM_HEADER_COMPONENT NATIVE_SYSTEM_HEADER_DIR NEXT_OBJC_RUNTIME NM_FLAGS NO_DBX_BNSYM_ENSYM NO_DOLLAR_IN_LABEL NO_DOT_IN_LABEL NO_FUNCTION_CSE NO_IMPLICIT_EXTERN_C NO_PROFILE_COUNTERS OBJC_GEN_METHOD_LABEL OBJC_JBLEN OBJECT_FORMAT_COFF OBJECT_FORMAT_ELF OFFS_ASSIGNIVAR_FAST OFFS_MSGSEND_FAST OPTIMIZE_MODE_SWITCHING OPTION_DEFAULT_SPECS OUTPUT_QUOTED_STRING OVERLAPPING_REGISTER_NAMES OVERRIDE_ABI_FORMAT PAD_VARARGS_DOWN PARM_BOUNDARY PCC_BITFIELD_TYPE_MATTERS PCC_STATIC_STRUCT_RETURN PIC_CASE_VECTOR_ADDRESS PIC_OFFSET_TABLE_REGNUM POINTERS_EXTEND_UNSIGNED PREFERRED_RELOAD_CLASS PRINT_OPERAND PRINT_OPERAND_ADDRESS PRINT_OPERAND_PUNCT_VALID_P PROFILE_BEFORE_PROLOGUE PROFILE_HOOK PROMOTE_MODE PUSH_ARGS_REVERSED PUSH_ROUNDING READONLY_DATA_SECTION_ASM_OP READ_CAN_USE_WRITE_PREFETCH REAL_LIBGCC_SPEC REAL_NM_FILE_NAME REGISTER_MOVE_COST REGISTER_PREFIX REGISTER_TARGET_PRAGMAS REGMODE_NATURAL_SIZE REGNO_MODE_CODE_OK_FOR_BASE_P REGNO_MODE_OK_FOR_BASE_P REGNO_MODE_OK_FOR_REG_BASE_P REG_ALLOC_ORDER REG_PARM_STACK_SPACE RELATIVE_PREFIX_NOT_LINKDIR RETURN_ADDRESS_POINTER_REGNUM RETURN_ADDR_IN_PREVIOUS_FRAME RETURN_ADDR_OFFSET RETURN_ADDR_RTX REVERSE_CONDITION ROUND_TYPE_ALIGN SBSS_SECTION_ASM_OP SDATA_SECTION_ASM_OP SDB_ALLOW_FORWARD_REFERENCES SDB_ALLOW_UNKNOWN_REFERENCES SDB_DEBUGGING_INFO SECONDARY_INPUT_RELOAD_CLASS SECONDARY_MEMORY_NEEDED SECONDARY_MEMORY_NEEDED_MODE SECONDARY_MEMORY_NEEDED_RTX SECONDARY_OUTPUT_RELOAD_CLASS SECONDARY_RELOAD_CLASS SELECT_CC_MODE SETUP_FRAME_ADDRESSES SET_BY_PIECES_P SHLIB_SUFFIX SHORT_IMMEDIATES_SIGN_EXTEND SPARC_STACK_BOUNDARY_HACK STACK_ALIGNMENT_NEEDED STACK_BOUNDARY STACK_DYNAMIC_OFFSET STACK_GROWS_DOWNWARD STACK_PARMS_IN_REG_PARM_AREA STACK_POINTER_OFFSET STACK_POP_CODE STACK_PUSH_CODE STACK_REGS STANDARD_STARTFILE_PREFIX_1 STANDARD_STARTFILE_PREFIX_2 STARTFILE_PREFIX_SPEC STARTFILE_SPEC STATIC_CHAIN_INCOMING_REGNUM STATIC_CHAIN_REGNUM STATIC_LIBASAN_LIBS STATIC_LIBTSAN_LIBS STDC_0_IN_SYSTEM_HEADERS STORE_BY_PIECES_P STORE_FLAG_VALUE STRUCTURE_SIZE_BOUNDARY SUPPORTS_WEAK SWITCHABLE_TARGET SYSROOT_SUFFIX_SPEC TARGET_64BIT TARGET_ABI_OPEN_VMS TARGET_AIX_VERSION TARGET_ALIGN_NATURAL TARGET_ASM_CONSTRUCTOR TARGET_ASM_DESTRUCTOR TARGET_ASM_NAMED_SECTION TARGET_ASM_OUTPUT_ANCHOR TARGET_CAN_SPLIT_STACK TARGET_CPU_CPP_BUILTINS TARGET_DLLIMPORT_DECL_ATTRIBUTES TARGET_EDOM TARGET_EXECUTABLE_SUFFIX TARGET_EXTRA_INCLUDES TARGET_EXTRA_PRE_INCLUDES TARGET_FORMAT_TYPES TARGET_HAVE_CTORS_DTORS TARGET_OBJECT_SUFFIX TARGET_OBJFMT_CPP_BUILTINS TARGET_OPTF TARGET_OS_CPP_BUILTINS TARGET_OVERRIDES_FORMAT_ATTRIBUTES TARGET_OVERRIDES_FORMAT_INIT TARGET_POSIX_IO TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DATA_T TARGET_TERMINATE_DW2_EH_FRAME_INFO TARGET_VXWORKS_RTP TEXT_SECTION_ASM_OP THREAD_MODEL_SPEC TRAMPOLINE_SECTION USE_LD_AS_NEEDED USE_LOAD_POST_DECREMENT USE_LOAD_POST_INCREMENT USE_LOAD_PRE_DECREMENT USE_LOAD_PRE_INCREMENT USE_MD_CONSTRAINTS USE_SELECT_SECTION_FOR_FUNCTIONS USE_STORE_POST_DECREMENT USE_STORE_POST_INCREMENT USE_STORE_PRE_DECREMENT USE_STORE_PRE_INCREMENT VMS_DEBUGGING_INFO WIDEST_HARDWARE_FP_SIZE WORD_REGISTER_OPERATIONS XCOFF_DEBUGGING_INFO -- Joseph S. Myers jos...@codesourcery.com