-/* Define the strings used for the special svr4 .type and .size directives. */
-
-#define TYPE_ASM_OP "\t.type\t"
-#define SIZE_ASM_OP "\t.size\t"
-
-/* Irix assembler does not support the init_priority C++ attribute. */
-#undef SUPPORTS_INIT_PRIORITY
-#define SUPPORTS_INIT_PRIORITY 0
-
-/* A linker error can empirically be avoided by removing duplicate
- library search directories. */
-#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 1
-
-#define POPSECTION_ASM_OP "\t.popsection"
-
-/* ??? If no mabi=X option give, but a mipsX option is, then should depend
- on the mipsX option. */
-/* If no mips[3,4] option given, give the appropriate default for mabi=X */
-#undef SUBTARGET_ASM_SPEC
-#define SUBTARGET_ASM_SPEC "%{!mabi*:-n32} %{!mips*: %{!mabi*:-mips3} %{mabi=n32:-mips3} %{mabi=64:-mips4}}"
-
-/* Must pass -g0 to the assembler, otherwise it may overwrite our
- debug info with its own debug info. */
-/* Must pass -show instead of -v. */
-/* Must pass -G 0 to the assembler, otherwise we may get warnings about
- GOT overflow. */
-/* ??? We pass -w to disable all assembler warnings. The `label should be
- inside .ent/.end block' warning that we get for DWARF II debug info labels
- is particularly annoying. */
-#undef SUBTARGET_MIPS_AS_ASM_SPEC
-#define SUBTARGET_MIPS_AS_ASM_SPEC "%{v:-show} -G 0 -w"
-
-#undef SUBTARGET_ASM_DEBUGGING_SPEC
-#define SUBTARGET_ASM_DEBUGGING_SPEC "-g0"
-
-/* The MIPS assembler occasionally misoptimizes. Since GCC should be
- doing scheduling anyhow, just turn off optimization in the assembler. */
-#undef SUBTARGET_ASM_OPTIMIZING_SPEC
-#define SUBTARGET_ASM_OPTIMIZING_SPEC "-O0"
-
-/* The assembler now accepts .section pseudo-ops, but it does not allow
- one to change the section in the middle of a function, so we can't use
- the INIT_SECTION_ASM_OP code in crtstuff. But we can build up the ctor
- and dtor lists this way, so we use -init and -fini to invoke the
- do_global_* functions instead of running collect2. */
-
-#define BSS_SECTION_ASM_OP "\t.section\t.bss"
-
-#undef READONLY_DATA_SECTION_ASM_OP
-#define READONLY_DATA_SECTION_ASM_OP_32 "\t.rdata"
-#define READONLY_DATA_SECTION_ASM_OP_64 "\t.section\t.rodata"
-#define READONLY_DATA_SECTION_ASM_OP \
- (mips_abi != ABI_32 && mips_abi != ABI_O64 \
- ? READONLY_DATA_SECTION_ASM_OP_64 \
- : READONLY_DATA_SECTION_ASM_OP_32)
-
-/* A default list of other sections which we might be "in" at any given
- time. For targets that use additional sections (e.g. .tdesc) you
- should override this definition in the target-specific file which
- includes this file. */
-
-#undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_sdata
-
-/* A default list of extra section function definitions. For targets
- that use additional sections (e.g. .tdesc) you should override this
- definition in the target-specific file which includes this file. */
-
-#undef EXTRA_SECTION_FUNCTIONS
-#define EXTRA_SECTION_FUNCTIONS \
-void \
-sdata_section () \
-{ \
- if (in_section != in_sdata) \
- { \
- fprintf (asm_out_file, "%s\n", SDATA_SECTION_ASM_OP); \
- in_section = in_sdata; \
- } \
-} \
- \
-const char * \
-current_section_name () \
-{ \
- switch (in_section) \
- { \
- case no_section: return NULL; \
- case in_text: return ".text"; \
- case in_data: return ".data"; \
- case in_sdata: return ".sdata"; \
- case in_bss: return ".bss"; \
- case in_readonly_data: \
- if (mips_abi != ABI_32 && mips_abi != ABI_O64) \
- return ".rodata"; \
- else \
- return ".rdata"; \
- case in_named: \
- return in_named_name; \
- } \
- abort (); \
-} \
- \
-unsigned int \
-current_section_flags () \
-{ \
- switch (in_section) \
- { \
- case no_section: return 0; \
- case in_text: return SECTION_CODE; \
- case in_data: return SECTION_WRITE; \
- case in_sdata: return SECTION_WRITE | SECTION_SMALL; \
- case in_bss: return SECTION_WRITE | SECTION_BSS; \
- case in_readonly_data: return 0; \
- case in_named: return get_named_section_flags (in_named_name); \
- } \
- abort (); \
-}
-
-/* Switch into a generic section. */
-#undef TARGET_ASM_NAMED_SECTION
-#define TARGET_ASM_NAMED_SECTION iris6_asm_named_section
-
-/* SGI assembler needs all sorts of extra help to do alignment properly. */
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN iris6_asm_output_align
-#undef ASM_FILE_START
-#define ASM_FILE_START iris6_asm_file_start
-#undef ASM_FILE_END
-#define ASM_FILE_END iris6_asm_file_end
-
-#undef MAX_OFILE_ALIGNMENT
-#define MAX_OFILE_ALIGNMENT (32768*8)
-
-/* ??? SGI assembler may core dump when compiling with -g.
- Sometimes as succeeds, but then we get a linker error. (cmds.c in 072.sc)
- Getting rid of .file solves both problems. */
-#undef ASM_OUTPUT_FILENAME
-#define ASM_OUTPUT_FILENAME(STREAM, NUM_SOURCE_FILENAMES, NAME) \
-do \
- { \
- fprintf (STREAM, "\t#.file\t%d ", NUM_SOURCE_FILENAMES); \
- output_quoted_string (STREAM, NAME); \
- fputs ("\n", STREAM); \
- } \
-while (0)
-
-/* ??? SGI assembler gives warning whenever .lcomm is used. */
-#undef ASM_OUTPUT_LOCAL
-#define ASM_OUTPUT_ALIGNED_LOCAL(STREAM, NAME, SIZE, ALIGN) \
-do \
- { \
- if (mips_abi != ABI_32 && mips_abi != ABI_O64) \
- { \
- bss_section (); \
- mips_declare_object (STREAM, NAME, "", ":\n", 0); \
- ASM_OUTPUT_ALIGN (STREAM, floor_log2 (ALIGN / BITS_PER_UNIT)); \
- ASM_OUTPUT_SKIP (STREAM, SIZE); \
- } \
- else \
- mips_declare_object (STREAM, NAME, "\n\t.lcomm\t", ",%u\n", (SIZE)); \
- } \
-while (0)
-
-/* A C statement (sans semicolon) to output to the stdio stream
- FILE the assembler definition of uninitialized global DECL named
- NAME whose size is SIZE bytes and alignment is ALIGN bytes.
- Try to use asm_output_aligned_bss to implement this macro. */
-
-#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
- asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-
-/* Write the extra assembler code needed to declare an object properly. */
-
-#undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
-do \
- { \
- HOST_WIDE_INT size; \
- size_directive_output = 0; \
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
- { \
- size_directive_output = 1; \
- size = int_size_in_bytes (TREE_TYPE (DECL)); \
- ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, size); \
- } \
- mips_declare_object (STREAM, NAME, "", ":\n", 0); \
- } \
-while (0)
-
-/* Define the `__builtin_va_list' type for the ABI. On Irix6, this
- type is `char *'. */
-#undef BUILD_VA_LIST_TYPE
-#define BUILD_VA_LIST_TYPE(VALIST) \
- (VALIST) = build_pointer_type (char_type_node)
-
-/* Output the size directive for a decl in rest_of_decl_compilation
- in the case where we did not do so before the initializer.
- Once we find the error_mark_node, we know that the value of
- size_directive_output was set
- by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-
-#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-do { \
- const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
- HOST_WIDE_INT size; \
- if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
- && ! AT_END && TOP_LEVEL \
- && DECL_INITIAL (DECL) == error_mark_node \
- && !size_directive_output) \
- { \
- size_directive_output = 1; \
- size = int_size_in_bytes (TREE_TYPE (DECL)); \
- ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size); \
- } \
- } while (0)
-
-#undef LOCAL_LABEL_PREFIX
-#define LOCAL_LABEL_PREFIX ((mips_abi == ABI_32 || mips_abi == ABI_O64) \
- ? "$" : ".")