📄 alpha.h
字号:
then copy it into a register, thus actually letting the address be cse'ed. */#define NO_FUNCTION_CSE/* Define this to be nonzero if shift instructions ignore all but the low-order few bits. */#define SHIFT_COUNT_TRUNCATED 1/* Control the assembler format that we output. *//* Output to assembler file text saying following lines may contain character constants, extra white space, comments, etc. */#define ASM_APP_ON (TARGET_EXPLICIT_RELOCS ? "\t.set\tmacro\n" : "")/* Output to assembler file text saying following lines no longer contain unusual constructs. */#define ASM_APP_OFF (TARGET_EXPLICIT_RELOCS ? "\t.set\tnomacro\n" : "")#define TEXT_SECTION_ASM_OP "\t.text"/* Output before read-only data. */#define READONLY_DATA_SECTION_ASM_OP "\t.rdata"/* Output before writable data. */#define DATA_SECTION_ASM_OP "\t.data"/* How to refer to registers in assembler output. This sequence is indexed by compiler's hard-register-number (see above). */#define REGISTER_NAMES \{"$0", "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \ "$9", "$10", "$11", "$12", "$13", "$14", "$15", \ "$16", "$17", "$18", "$19", "$20", "$21", "$22", "$23", \ "$24", "$25", "$26", "$27", "$28", "$29", "$30", "AP", \ "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", \ "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15", \ "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",\ "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "FP"}/* Strip name encoding when emitting labels. */#define ASM_OUTPUT_LABELREF(STREAM, NAME) \do { \ const char *name_ = NAME; \ if (*name_ == '@' || *name_ == '%') \ name_ += 2; \ if (*name_ == '*') \ name_++; \ else \ fputs (user_label_prefix, STREAM); \ fputs (name_, STREAM); \} while (0)/* Globalizing directive for a label. */#define GLOBAL_ASM_OP "\t.globl "/* The prefix to add to user-visible assembler symbols. */#define USER_LABEL_PREFIX ""/* This is how to output a label for a jump table. Arguments are the same as for (*targetm.asm_out.internal_label), except the insn for the jump table is passed. */#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \{ ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); }/* This is how to store into the string LABEL the symbol_ref name of an internal numbered label where PREFIX is the class of label and NUM is the number within the class. This is suitable for output with `assemble_name'. */#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf ((LABEL), "*$%s%ld", (PREFIX), (long)(NUM))/* We use the default ASCII-output routine, except that we don't write more than 50 characters since the assembler doesn't support very long lines. */#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ do { \ FILE *_hide_asm_out_file = (MYFILE); \ const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ int _hide_thissize = (MYLENGTH); \ int _size_so_far = 0; \ { \ FILE *asm_out_file = _hide_asm_out_file; \ const unsigned char *p = _hide_p; \ int thissize = _hide_thissize; \ int i; \ fprintf (asm_out_file, "\t.ascii \""); \ \ for (i = 0; i < thissize; i++) \ { \ register int c = p[i]; \ \ if (_size_so_far ++ > 50 && i < thissize - 4) \ _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \ \ if (c == '\"' || c == '\\') \ putc ('\\', asm_out_file); \ if (c >= ' ' && c < 0177) \ putc (c, asm_out_file); \ else \ { \ fprintf (asm_out_file, "\\%o", c); \ /* After an octal-escape, if a digit follows, \ terminate one string constant and start another. \ The VAX assembler fails to stop reading the escape \ after three digits, so this is the only way we \ can get it to parse the data properly. */ \ if (i < thissize - 1 && ISDIGIT (p[i + 1])) \ _size_so_far = 0, fprintf (asm_out_file, "\"\n\t.ascii \""); \ } \ } \ fprintf (asm_out_file, "\"\n"); \ } \ } \ while (0)/* This is how to output an element of a case-vector that is absolute. (Alpha does not use such vectors, but we must define this macro anyway.) */#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) abort ()/* This is how to output an element of a case-vector that is relative. */#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ fprintf (FILE, "\t.%s $L%d\n", TARGET_ABI_WINDOWS_NT ? "long" : "gprel32", \ (VALUE))/* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */#define ASM_OUTPUT_ALIGN(FILE,LOG) \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", LOG);/* This is how to advance the location counter by SIZE bytes. */#define ASM_OUTPUT_SKIP(FILE,SIZE) \ fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE))/* This says how to output an assembler line to define a global common symbol. */#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \( fputs ("\t.comm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))/* This says how to output an assembler line to define a local common symbol. */#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED) \( fputs ("\t.lcomm ", (FILE)), \ assemble_name ((FILE), (NAME)), \ fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)))/* Print operand X (an rtx) in assembler syntax to file FILE. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. For `%' followed by punctuation, CODE is the punctuation and X is null. */#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)/* Determine which codes are valid without a following integer. These must not be alphabetic. ~ Generates the name of the current function. / Generates the instruction suffix. The TRAP_SUFFIX and ROUND_SUFFIX attributes are examined to determine what is appropriate. , Generates single precision suffix for floating point instructions (s for IEEE, f for VAX) - Generates double precision suffix for floating point instructions (t for IEEE, g for VAX) + Generates a nop instruction after a noreturn call at the very end of the function */#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \ ((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \ || (CODE) == '#' || (CODE) == '*' || (CODE) == '&' || (CODE) == '+')/* Print a memory address as an operand to reference that memory location. */#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \ print_operand_address((FILE), (ADDR))/* Implement `va_start' for varargs and stdarg. */#define EXPAND_BUILTIN_VA_START(valist, nextarg) \ alpha_va_start (valist, nextarg)/* Tell collect that the object format is ECOFF. */#define OBJECT_FORMAT_COFF#define EXTENDED_COFF/* If we use NM, pass -g to it so it only lists globals. */#define NM_FLAGS "-pg"/* Definitions for debugging. */#define SDB_DEBUGGING_INFO 1 /* generate info for mips-tfile */#define DBX_DEBUGGING_INFO 1 /* generate embedded stabs */#define MIPS_DEBUGGING_INFO 1 /* MIPS specific debugging info */#ifndef PREFERRED_DEBUGGING_TYPE /* assume SDB_DEBUGGING_INFO */#define PREFERRED_DEBUGGING_TYPE SDB_DEBUG#endif/* Correct the offset of automatic variables and arguments. Note that the Alpha debug format wants all automatic variables and arguments to be in terms of two different offsets from the virtual frame pointer, which is the stack pointer before any adjustment in the function. The offset for the argument pointer is fixed for the native compiler, it is either zero (for the no arguments case) or large enough to hold all argument registers. The offset for the auto pointer is the fourth argument to the .frame directive (local_offset). To stay compatible with the native tools we use the same offsets from the virtual frame pointer and adjust the debugger arg/auto offsets accordingly. These debugger offsets are set up in output_prolog. */extern long alpha_arg_offset;extern long alpha_auto_offset;#define DEBUGGER_AUTO_OFFSET(X) \ ((GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0) + alpha_auto_offset)#define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + alpha_arg_offset)/* mips-tfile doesn't understand .stabd directives. */#define DBX_OUTPUT_SOURCE_LINE(STREAM, LINE, COUNTER) do { \ dbxout_begin_stabn_sline (LINE); \ dbxout_stab_value_internal_label ("LM", &COUNTER); \} while (0)/* We want to use MIPS-style .loc directives for SDB line numbers. */extern int num_source_filenames;#define SDB_OUTPUT_SOURCE_LINE(STREAM, LINE) \ fprintf (STREAM, "\t.loc\t%d %d\n", num_source_filenames, LINE)#define ASM_OUTPUT_SOURCE_FILENAME(STREAM, NAME) \ alpha_output_filename (STREAM, NAME)/* mips-tfile.c limits us to strings of one page. We must underestimate this number, because the real length runs past this up to the next continuation point. This is really a dbxout.c bug. */#define DBX_CONTIN_LENGTH 3000/* By default, turn on GDB extensions. */#define DEFAULT_GDB_EXTENSIONS 1/* Stabs-in-ECOFF can't handle dbxout_function_end(). */#define NO_DBX_FUNCTION_END 1/* If we are smuggling stabs through the ALPHA ECOFF object format, put a comment in front of the .stab<x> operation so that the ALPHA assembler does not choke. The mips-tfile program will correctly put the stab into the object file. */#define ASM_STABS_OP ((TARGET_GAS) ? "\t.stabs\t" : " #.stabs\t")#define ASM_STABN_OP ((TARGET_GAS) ? "\t.stabn\t" : " #.stabn\t")#define ASM_STABD_OP ((TARGET_GAS) ? "\t.stabd\t" : " #.stabd\t")/* Forward references to tags are allowed. */#define SDB_ALLOW_FORWARD_REFERENCES/* Unknown tags are also allowed. */#define SDB_ALLOW_UNKNOWN_REFERENCES#define PUT_SDB_DEF(a) \do { \ fprintf (asm_out_file, "\t%s.def\t", \ (TARGET_GAS) ? "" : "#"); \ ASM_OUTPUT_LABELREF (asm_out_file, a); \ fputc (';', asm_out_file); \} while (0)#define PUT_SDB_PLAIN_DEF(a) \do { \ fprintf (asm_out_file, "\t%s.def\t.%s;", \ (TARGET_GAS) ? "" : "#", (a)); \} while (0)#define PUT_SDB_TYPE(a) \do { \ fprintf (asm_out_file, "\t.type\t0x%x;", (a)); \} while (0)/* For block start and end, we create labels, so that later we can figure out where the correct offset is. The normal .ent/.end serve well enough for functions, so those are just commented out. */extern int sdb_label_count; /* block start/end next label # */#define PUT_SDB_BLOCK_START(LINE) \do { \ fprintf (asm_out_file, \ "$Lb%d:\n\t%s.begin\t$Lb%d\t%d\n", \ sdb_label_count, \ (TARGET_GAS) ? "" : "#", \ sdb_label_count, \ (LINE)); \ sdb_label_count++; \} while (0)#define PUT_SDB_BLOCK_END(LINE) \do { \ fprintf (asm_out_file, \ "$Le%d:\n\t%s.bend\t$Le%d\t%d\n", \ sdb_label_count, \ (TARGET_GAS) ? "" : "#", \ sdb_label_count, \ (LINE)); \ sdb_label_count++; \} while (0)#define PUT_SDB_FUNCTION_START(LINE)#define PUT_SDB_FUNCTION_END(LINE)#define PUT_SDB_EPILOGUE_END(NAME) ((void)(NAME))/* Macros for mips-tfile.c to encapsulate stabs in ECOFF, and for mips-tdump.c to print them out. These must match the corresponding definitions in gdb/mipsread.c. Unfortunately, gcc and gdb do not currently share any directories. */#define CODE_MASK 0x8F300#define MIPS_IS_STAB(sym) (((sym)->index & 0xFFF00) == CODE_MASK)#define MIPS_MARK_STAB(code) ((code)+CODE_MASK)#define MIPS_UNMARK_STAB(code) ((code)-CODE_MASK)/* Override some mips-tfile definitions. */#define SHASH_SIZE 511#define THASH_SIZE 55/* Align ecoff symbol tables to avoid OSF1/1.3 nm complaints. */#define ALIGN_SYMTABLE_OFFSET(OFFSET) (((OFFSET) + 7) & ~7)/* The system headers under Alpha systems are generally C++-aware. */#define NO_IMPLICIT_EXTERN_C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -