📄 iris6.h
字号:
/* 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) \ ? "$" : ".")/* Profiling is supported via libprof1.a not -lc_p as in Irix 3. *//* ??? If no mabi=X option give, but a mipsX option is, then should depend on the mipsX option. */#undef STARTFILE_SPEC#define STARTFILE_SPEC \ "%{!shared: \ %{mabi=32:%{pg:gcrt1.o%s} \ %{!pg:%{p:mcrt1.o%s libprof1.a%s}%{!p:crt1.o%s}}} \ %{mabi=n32: \ %{mips4:%{pg:/usr/lib32/mips4/gcrt1.o%s} \ %{!pg:%{p:/usr/lib32/mips4/mcrt1.o%s /usr/lib32/mips4/libprof1.a%s} \ %{!p:/usr/lib32/mips4/crt1.o%s}}} \ %{!mips4:%{pg:/usr/lib32/mips3/gcrt1.o%s} \ %{!pg:%{p:/usr/lib32/mips3/mcrt1.o%s /usr/lib32/mips3/libprof1.a%s} \ %{!p:/usr/lib32/mips3/crt1.o%s}}}} \ %{mabi=64: \ %{mips4:%{pg:/usr/lib64/mips4/gcrt1.o} \ %{!pg:%{p:/usr/lib64/mips4/mcrt1.o /usr/lib64/mips4/libprof1.a} \ %{!p:/usr/lib64/mips4/crt1.o}}} \ %{!mips4:%{pg:/usr/lib64/mips3/gcrt1.o} \ %{!pg:%{p:/usr/lib64/mips3/mcrt1.o /usr/lib64/mips3/libprof1.a} \ %{!p:/usr/lib64/mips3/crt1.o}}}} \ %{!mabi*: \ %{mips4:%{pg:/usr/lib32/mips4/gcrt1.o%s} \ %{!pg:%{p:/usr/lib32/mips4/mcrt1.o%s /usr/lib32/mips4/libprof1.a%s} \ %{!p:/usr/lib32/mips4/crt1.o%s}}} \ %{!mips4:%{pg:/usr/lib32/mips3/gcrt1.o%s} \ %{!pg:%{p:/usr/lib32/mips3/mcrt1.o%s /usr/lib32/mips3/libprof1.a%s} \ %{!p:/usr/lib32/mips3/crt1.o%s}}}}} \ crtbegin.o%s"#undef LIB_SPEC#define LIB_SPEC \ "%{mabi=n32: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \ -L/usr/lib32} \ %{mabi=64: %{mips4:-L/usr/lib64/mips4} %{!mips4:-L/usr/lib64/mips3} \ -L/usr/lib64} \ %{!mabi*: %{mips4:-L/usr/lib32/mips4} %{!mips4:-L/usr/lib32/mips3} \ -L/usr/lib32} \ %{!shared: \ -dont_warn_unused %{p:libprof1.a%s}%{pg:libprof1.a%s} -lc -warn_unused}"/* Avoid getting two warnings for libgcc.a everytime we link. */#undef LIBGCC_SPEC#define LIBGCC_SPEC "-dont_warn_unused -lgcc -warn_unused"/* ??? If no mabi=X option give, but a mipsX option is, then should depend on the mipsX option. */#undef ENDFILE_SPEC#define ENDFILE_SPEC \ "crtend.o%s \ %{!shared: \ %{mabi=32:crtn.o%s}\ %{mabi=n32:%{mips4:/usr/lib32/mips4/crtn.o%s}\ %{!mips4:/usr/lib32/mips3/crtn.o%s}}\ %{mabi=64:%{mips4:/usr/lib64/mips4/crtn.o%s}\ %{!mips4:/usr/lib64/mips3/crtn.o%s}}\ %{!mabi*:%{mips4:/usr/lib32/mips4/crtn.o%s}\ %{!mips4:/usr/lib32/mips3/crtn.o%s}}}"/* ??? If no mabi=X option give, but a mipsX option is, then should depend on the mipsX option. */#undef LINK_SPEC#define LINK_SPEC "\%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \%{bestGnum} %{shared} %{non_shared} \%{call_shared} %{no_archive} %{exact_version} %{w} \%{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \%{rpath} -init __do_global_ctors -fini __do_global_dtors \%{shared:-hidden_symbol __do_global_ctors,__do_global_ctors_1,__do_global_dtors} \-_SYSTYPE_SVR4 -woff 131 \%{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}"#define MIPS_TFMODE_FORMAT ibm_extended_format
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -