#define TC_MMIX
#define TARGET_FORMAT "elf64-mmix"
#define TARGET_ARCH bfd_arch_mmix
#define TARGET_BYTES_BIG_ENDIAN 1
extern const char mmix_comment_chars[];
#define tc_comment_chars mmix_comment_chars
extern const char mmix_symbol_chars[];
#define tc_symbol_chars mmix_symbol_chars
extern const char mmix_exp_chars[];
#define EXP_CHARS mmix_exp_chars
extern const char mmix_flt_chars[];
#define FLT_CHARS mmix_flt_chars
#define LEX_AT (LEX_BEGIN_NAME)
extern int mmix_label_without_colon_this_line PARAMS ((void));
#define LABELS_WITHOUT_COLONS mmix_label_without_colon_this_line ()
extern int mmix_next_semicolon_is_eoln;
#define TC_EOL_IN_INSN(p) (*(p) == ';' && ! mmix_next_semicolon_is_eoln)
extern void mmix_handle_mmixal PARAMS ((void));
#define md_start_line_hook mmix_handle_mmixal
extern void mmix_md_begin PARAMS ((void));
#define md_begin mmix_md_begin
extern void mmix_md_end PARAMS ((void));
#define md_end mmix_md_end
extern int mmix_current_location \
PARAMS ((void (*fn) (expressionS *), expressionS *));
extern int mmix_parse_predefined_name PARAMS ((char *, expressionS *));
extern char *mmix_current_prefix;
extern int mmix_gnu_syntax;
#define md_parse_name(name, exp, cpos) \
(! mmix_gnu_syntax \
&& (name[0] == '@' \
? (! is_part_of_name (name[1]) \
&& mmix_current_location (current_location, exp)) \
: ((name[0] == ':' || ISUPPER (name[0])) \
&& mmix_parse_predefined_name (name, exp))))
extern char *mmix_prefix_name PARAMS ((char *));
#define tc_canonicalize_symbol_name(x) \
(mmix_current_prefix == NULL && (x)[0] != ':' ? (x) : mmix_prefix_name (x))
#define md_undefined_symbol(x) NULL
extern void mmix_fb_label PARAMS ((expressionS *));
#define md_operand(exp) \
do \
{ \
if (input_line_pointer[0] == '#') \
{ \
input_line_pointer++; \
integer_constant (16, (exp)); \
} \
else if (input_line_pointer[0] == '&' \
&& input_line_pointer[1] != '&') \
as_bad (_("`&' serial number operator is not supported")); \
else \
mmix_fb_label (exp); \
} \
while (0)
extern int mmix_assemble_return_nonzero PARAMS ((char *));
#define tc_unrecognized_line(c) \
((c) == ' ' \
|| (((c) == '1' || (c) == '2' || (c) == '4' || (c) == '8') \
&& mmix_assemble_return_nonzero (input_line_pointer - 1)))
#define md_number_to_chars number_to_chars_bigendian
#define WORKING_DOT_WORD
extern const struct relax_type mmix_relax_table[];
#define TC_GENERIC_RELAX_TABLE mmix_relax_table
extern long mmix_md_relax_frag PARAMS ((segT, fragS *, long));
#define md_relax_frag mmix_md_relax_frag
#define tc_fix_adjustable(FIX) \
(((FIX)->fx_addsy == NULL \
|| S_GET_SEGMENT ((FIX)->fx_addsy) != reg_section) \
&& (FIX)->fx_r_type != BFD_RELOC_VTABLE_INHERIT \
&& (FIX)->fx_r_type != BFD_RELOC_VTABLE_ENTRY \
&& (FIX)->fx_r_type != BFD_RELOC_MMIX_LOCAL)
#define tc_adjust_symtab() mmix_adjust_symtab ()
extern void mmix_adjust_symtab PARAMS ((void));
extern int mmix_globalize_symbols;
#define tc_frob_symbol(sym, punt) \
do \
{ \
if (S_GET_SEGMENT (sym) == reg_section) \
{ \
if (S_GET_NAME (sym)[0] != '$' \
&& S_GET_VALUE (sym) < 256) \
{ \
if (mmix_globalize_symbols) \
S_SET_EXTERNAL (sym); \
else \
symbol_mark_used_in_reloc (sym); \
} \
} \
else if (mmix_globalize_symbols \
&& ! symbol_section_p (sym) \
&& sym != section_symbol (absolute_section) \
&& ! S_IS_LOCAL (sym)) \
S_SET_EXTERNAL (sym); \
} \
while (0)
#define EXTERN_FORCE_RELOC 0
#define TC_FORCE_RELOCATION(fix) mmix_force_relocation (fix)
extern int mmix_force_relocation PARAMS ((struct fix *));
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
#define md_section_align(seg, size) (size)
#define LISTING_HEADER "GAS for MMIX"
#define LISTING_LHS_CONT_LINES 5
extern fragS *mmix_opcode_frag;
#define TC_FRAG_TYPE fragS *
#define TC_FRAG_INIT(frag) (frag)->tc_frag_data = mmix_opcode_frag
extern void mmix_frob_file PARAMS ((void));
#define tc_frob_file_before_fix mmix_frob_file
struct mmix_symbol_gregs;
#define TC_SYMFIELD_TYPE struct mmix_symbol_gregs *
struct mmix_segment_info_type
{
fragS *last_stubfrag;
bfd_size_type nstubs;
};
#define TC_SEGMENT_INFO_TYPE struct mmix_segment_info_type
extern void mmix_md_elf_section_change_hook PARAMS ((void));
#define md_elf_section_change_hook mmix_md_elf_section_change_hook
extern void mmix_md_do_align PARAMS ((int, char *, int, int));
#define md_do_align(n, fill, len, max, label) \
mmix_md_do_align (n, fill, len, max)
#define DWARF2_LINE_MIN_INSN_LENGTH 1