📄 vms.h
字号:
#define ASM_FILE_START(FILE) \{ \ alpha_write_verstamp (FILE); \ fprintf (FILE, "\t.set noreorder\n"); \ fprintf (FILE, "\t.set volatile\n"); \ ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \}#undef ASM_OUTPUT_FLOAT#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ { \ if (REAL_VALUE_ISINF (VALUE) \ || REAL_VALUE_ISNAN (VALUE) \ || REAL_VALUE_MINUS_ZERO (VALUE)) \ { \ long t; \ REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ } \ else \ { \ char str[30]; \ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ fprintf (FILE, "\t.%c_floating %s\n", (TARGET_FLOAT_VAX)?'f':'s', str); \ } \ }#define LINK_SECTION_ASM_OP ".link"#define READONLY_SECTION_ASM_OP ".rdata"#define LITERALS_SECTION_ASM_OP ".literals"#define CTORS_SECTION_ASM_OP ".ctors"#define DTORS_SECTION_ASM_OP ".dtors"#undef EXTRA_SECTIONS#define EXTRA_SECTIONS in_link, in_rdata, in_literals, in_ctors, in_dtors#undef EXTRA_SECTION_FUNCTIONS#define EXTRA_SECTION_FUNCTIONS \void \readonly_section () \{ \ if (in_section != in_rdata) \ { \ fprintf (asm_out_file, "%s\n", READONLY_SECTION_ASM_OP); \ in_section = in_rdata; \ } \} \void \link_section () \{ \ if (in_section != in_link) \ { \ fprintf (asm_out_file, "%s\n", LINK_SECTION_ASM_OP); \ in_section = in_link; \ } \} \void \literals_section () \{ \ if (in_section != in_literals) \ { \ fprintf (asm_out_file, "%s\n", LITERALS_SECTION_ASM_OP); \ in_section = in_literals; \ } \} \void \ctors_section () \{ \ if (in_section != in_ctors) \ { \ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \ in_section = in_ctors; \ } \} \void \dtors_section () \{ \ if (in_section != in_dtors) \ { \ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \ in_section = in_dtors; \ } \}#undef ASM_OUTPUT_ADDR_DIFF_ELT#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) abort ()#undef ASM_OUTPUT_ADDR_VEC_ELT#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\t.quad $L%d\n", (VALUE))#undef READONLY_DATA_SECTION#define READONLY_DATA_SECTION readonly_section#define ASM_FILE_END(FILE) alpha_write_linkage (FILE);#undef CASE_VECTOR_MODE#define CASE_VECTOR_MODE DImode#undef CASE_VECTOR_PC_RELATIVE#undef ASM_OUTPUT_CASE_LABEL#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \{ ASM_OUTPUT_ALIGN (FILE, 3); ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); }/* This says how to output assembler code to declare an uninitialized external linkage data object. */ #define COMMON_ASM_OP ".comm"#undef ASM_OUTPUT_ALIGNED_COMMON#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \do { \ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \ assemble_name ((FILE), (NAME)); \ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \} while (0)#define NO_MD_PROTOTYPES/* Output assembler code for a block containing the constant parts of a trampoline, leaving space for the variable parts. The trampoline should set the static chain pointer to value placed into the trampoline and should branch to the specified routine. Note that $27 has been set to the address of the trampoline, so we can use it for addressability of the two data items. Trampolines are always aligned to FUNCTION_BOUNDARY, which is 64 bits. */#undef TRAMPOLINE_TEMPLATE#define TRAMPOLINE_TEMPLATE(FILE) \{ \ fprintf (FILE, "\t.quad 0\n"); \ fprintf (FILE, "\t.linkage __tramp\n"); \ fprintf (FILE, "\t.quad 0\n"); \}/* Length in units of the trampoline for entering a nested function. */#undef TRAMPOLINE_SIZE#define TRAMPOLINE_SIZE 32/* Emit RTL insns to initialize the variable parts of a trampoline. FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. */#undef INITIALIZE_TRAMPOLINE#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ alpha_initialize_trampoline (TRAMP, FNADDR, CXT, 16, 24, -1)/* A C statement (sans semicolon) to output an element in the table of global constructors. */#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ do { \ ctors_section (); \ fprintf (FILE, "\t.quad "); \ assemble_name (FILE, NAME); \ fprintf (FILE, "\n"); \ } while (0)/* A C statement (sans semicolon) to output an element in the table of global destructors. */#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ do { \ dtors_section (); \ fprintf (FILE, "\t.quad "); \ assemble_name (FILE, NAME); \ fprintf (FILE, "\n"); \ } while (0)#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, NAME, ARGS) \ (vms_valid_decl_attribute_p (DECL, ATTRIBUTES, NAME, ARGS))extern int vms_valid_decl_attribute_p ();#undef SDB_DEBUGGING_INFO#undef MIPS_DEBUGGING_INFO#undef DBX_DEBUGGING_INFO#define DWARF2_DEBUGGING_INFO/* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */#undef ASM_OUTPUT_ALIGN#define ASM_OUTPUT_ALIGN(FILE,LOG) \ fprintf (FILE, "\t.align %d\n", LOG);#define ASM_OUTPUT_SECTION(FILE,SECTION) \ (strcmp (SECTION, ".text") == 0) \ ? text_section () \ : named_section (NULL_TREE, SECTION, 0), \ ASM_OUTPUT_ALIGN (FILE, 0) \#define ASM_OUTPUT_SECTION_NAME(FILE,DECL,NAME,RELOC) \ do \ { \ char *flags; \ int ovr = 0; \ if (DECL && DECL_MACHINE_ATTRIBUTES (DECL) \ && lookup_attribute \ ("overlaid", DECL_MACHINE_ATTRIBUTES (DECL))) \ flags = ",OVR", ovr = 1; \ else if (strncmp (NAME,".debug", 6) == 0) \ flags = ",NOWRT"; \ else \ flags = ""; \ fputc ('\n', (FILE)); \ fprintf (FILE, ".section\t%s%s\n", NAME, flags); \ if (ovr) \ (NAME) = ""; \ } while (0)#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \ do { literals_section(); \ fprintf ((FILE), "\t"); \ assemble_name (FILE, LABEL1); \ fprintf (FILE, " = "); \ assemble_name (FILE, LABEL2); \ fprintf (FILE, "\n"); \ } while (0)#undef PREFERRED_DEBUGGING_TYPE#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG#undef ASM_FORMAT_PRIVATE_NAME#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))/* ??? VMS uses different linkage. */#undef ASM_OUTPUT_MI_THUNK#undef ASM_SPEC#undef ASM_FINAL_SPEC#undef LINK_SPEC#undef STARTFILE_SPEC#define ASM_SPEC "-nocpp %{pg}"#define LINK_SPEC "%{g3:-g3} %{g0:-g0} %{shared:-shared} %{v:-v}"/* Define the names of the division and modulus functions. */#define DIVSI3_LIBCALL "OTS$DIV_I"#define DIVDI3_LIBCALL "OTS$DIV_L"#define UDIVSI3_LIBCALL "OTS$DIV_UI"#define UDIVDI3_LIBCALL "OTS$DIV_UL"#define MODSI3_LIBCALL "OTS$REM_I"#define MODDI3_LIBCALL "OTS$REM_L"#define UMODSI3_LIBCALL "OTS$REM_UI"#define UMODDI3_LIBCALL "OTS$REM_UL"#define DIR_SEPARATOR ']'#define PREFIX "GNU_ROOT:"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -