Line 781... |
Line 781... |
#define GO_IF_LEGITIMATE_ADDRESS(MODE,X,ADDR) \
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE,X,ADDR) \
|
if(LEGITIMATE_OFFSET_ADDRESS_P(MODE,X)) goto ADDR; \
|
if(LEGITIMATE_OFFSET_ADDRESS_P(MODE,X)) goto ADDR; \
|
if(LEGITIMATE_NONOFFSET_ADDRESS_P(MODE,X)) goto ADDR;
|
if(LEGITIMATE_NONOFFSET_ADDRESS_P(MODE,X)) goto ADDR;
|
|
|
/*
|
/*
|
if(GET_CODE(X) == SYMBOL_REF) goto ADDR; */ /* If used, smaller code */
|
|
|
|
/* Alternative */
|
|
#if 0
|
|
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
|
|
{ \
|
|
if (GET_CODE (X) == REG) goto ADDR; \
|
|
if (GET_CODE (X) == SYMBOL_REF) goto ADDR; \
|
|
if (CONSTANT_ADDRESS_P (X)) goto ADDR; \
|
|
if (GET_CODE (X) == PLUS) \
|
|
{ \
|
|
/* Handle [index]<address> represented with index-sum outermost */\
|
|
if (GET_CODE (XEXP (X, 0)) == REG \
|
|
&& REG_OK_FOR_BASE_P (XEXP (X, 0)) \
|
|
&& GET_CODE (XEXP (X, 1)) == CONST_INT) \
|
|
goto ADDR; \
|
|
if (GET_CODE (XEXP (X, 1)) == REG \
|
|
&& REG_OK_FOR_BASE_P (XEXP (X, 0)) \
|
|
&& GET_CODE (XEXP (X, 0)) == CONST_INT) \
|
|
goto ADDR; \
|
|
} \
|
|
}
|
|
#endif
|
|
/*
|
|
* We have to force symbol_ref's into registers here
|
* We have to force symbol_ref's into registers here
|
* because nobody else seems to want to do that!
|
* because nobody else seems to want to do that!
|
*/
|
*/
|
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {}
|
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {}
|
/*
|
/*
|
Line 878... |
Line 854... |
/* A function address in a call instruction
|
/* A function address in a call instruction
|
is a byte address (for indexing purposes)
|
is a byte address (for indexing purposes)
|
so give the MEM rtx a byte's mode. */
|
so give the MEM rtx a byte's mode. */
|
#define FUNCTION_MODE SImode
|
#define FUNCTION_MODE SImode
|
|
|
/* Compute the cost of computing a constant rtl expression RTX
|
|
whose rtx-code is CODE. The body of this macro is a portion
|
|
of a switch statement. If the code is computed here,
|
|
return it with a return statement. Otherwise, break from the switch. */
|
|
#if 0
|
|
__PHX__ cleanup
|
|
#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
|
|
case CONST_INT: \
|
|
/* Constant zero is super cheap due to clr instruction. */ \
|
|
if (RTX == const0_rtx) return 0; \
|
|
if ((unsigned) INTVAL (RTX) < 077) return 1; \
|
|
case CONST: \
|
|
case LABEL_REF: \
|
|
case SYMBOL_REF: \
|
|
return 3; \
|
|
case CONST_DOUBLE: \
|
|
return 5;
|
|
#endif
|
|
|
|
|
|
/* Given a comparison code (EQ, NE, etc.) and the first operand of a
|
/* Given a comparison code (EQ, NE, etc.) and the first operand of a
|
COMPARE, return the mode to be used for the comparison.
|
COMPARE, return the mode to be used for the comparison.
|
*/
|
*/
|
|
|
#define SELECT_CC_MODE(OP, X, Y) or32_cc_mode ((OP), (X), (Y))
|
#define SELECT_CC_MODE(OP, X, Y) or32_cc_mode ((OP), (X), (Y))
|
Line 959... |
Line 915... |
|
|
#define REGISTER_NAMES \
|
#define REGISTER_NAMES \
|
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" \
|
{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" \
|
, "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", "cc-flag"}
|
, "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", "cc-flag"}
|
|
|
|
/* -------------------------------------------------------------------------- */
|
/* Define this to be the delimiter between SDB sub-sections. The default
|
/* Debug things for DBX (STABS) */
|
is ";". */
|
/* */
|
#define SDB_DELIM "\n"
|
/* Note. Our config.gcc includes dbxelf.h, which sets up appropriate */
|
|
/* defaults. Choice of which debug format to use is in our elf.h */
|
/* Do not break .stabs pseudos into continuations. */
|
/* -------------------------------------------------------------------------- */
|
#define DBX_CONTIN_LENGTH 0
|
|
|
|
/* Don't try to use the type-cross-reference character in DBX data.
|
/* Don't try to use the type-cross-reference character in DBX data.
|
Also has the consequence of putting each struct, union or enum
|
Also has the consequence of putting each struct, union or enum
|
into a separate .stabs, containing only cross-refs to the others. */
|
into a separate .stabs, containing only cross-refs to the others. */
|
|
/* JPB 24-Aug-10: Is this really correct. Can't GDB use this info? */
|
#define DBX_NO_XREFS
|
#define DBX_NO_XREFS
|
|
|
/* How to renumber registers for dbx and gdb.
|
/* -------------------------------------------------------------------------- */
|
Vax needs no change in the numeration. */
|
/* Debug things for DWARF2 */
|
|
/* */
|
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
|
/* Note. Choice of which debug format to use is in our elf.h */
|
|
/* -------------------------------------------------------------------------- */
|
/* This is the char to use for continuation (in case we need to turn
|
|
continuation back on). */
|
/* We support frame unwind info including for exceptions handling. This needs
|
|
INCOMING_RETURN_ADDR_RTX to be set and OBJECT_FORMAT_ELF to be defined (in
|
#define DBX_CONTIN_CHAR '?'
|
elfos.h). Override any default value. */
|
|
#undef DWARF2_UNWIND_INFO
|
|
#define DWARF2_UNWIND_INFO 1
|
|
|
|
/* We want frame info produced. Note that this is superfluous if
|
|
DWARF2_UNWIND_INFO is non-zero, but we set so this so, we can produce frame
|
|
info even when it is zero. Override any default value. */
|
|
#undef DWARF2_FRAME_INFO
|
|
#define DWARF2_FRAME_INFO 1
|
|
|
|
/* Macro to idenfity where the incoming return address is on a function call
|
|
before the start of the prologue (i.e. the link register). Used to produce
|
|
DWARF2 frame debug info when DWARF2_UNWIND_INFO is non-zero. Override any
|
|
default value. */
|
|
#undef INCOMING_RETURN_ADDR_RTX
|
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LINK_REGNUM)
|
|
|
|
/* We believe this works for our assembler. Override any default value */
|
|
#undef DWARF2_ASM_LINE_DEBUG_INFO
|
|
#define DWARF2_ASM_LINE_DEBUG_INFO 1
|
|
|
|
|
/* Node: Label Output */
|
/* Node: Label Output */
|
|
|
/* Globalizing directive for a label. */
|
/* Globalizing directive for a label. */
|
Line 998... |
Line 970... |
/* This is how to output the definition of a user-level label named NAME,
|
/* This is how to output the definition of a user-level label named NAME,
|
such as the label on a static function or variable NAME. */
|
such as the label on a static function or variable NAME. */
|
|
|
#define ASM_OUTPUT_LABEL(FILE,NAME) \
|
#define ASM_OUTPUT_LABEL(FILE,NAME) \
|
{ assemble_name (FILE, NAME); fputs (":\n", FILE); }
|
{ assemble_name (FILE, NAME); fputs (":\n", FILE); }
|
#if 0
|
|
/* This is how to output a command to make the user-level label named NAME
|
|
defined for reference from other files. */
|
|
/*
|
|
__PHX__ CLEANUP
|
|
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
|
|
{ fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE); }
|
|
*/
|
|
|
|
/* SIMON */
|
|
/*#define ASM_OUTPUT_LABELREF(stream,name) \
|
|
{ fputc('_',stream); fputs(name,stream); }
|
|
*/
|
|
/* JPB. We need to implement this, otherwise we get a leading underscore added
|
|
by default. Not sure where that default implementation is coming from
|
|
yet... */
|
|
/* #define ASM_OUTPUT_LABELREF(stream, name) fputs (name, stream) */
|
|
#endif
|
|
|
|
/* The prefix to add to user-visible assembler symbols. */
|
/* The prefix to add to user-visible assembler symbols. */
|
|
|
/* Remove any previous definition (elfos.h). */
|
/* Remove any previous definition (elfos.h). */
|
/* We use -fno-leading-underscore to remove it, when necessary. */
|
/* We use -fno-leading-underscore to remove it, when necessary. */
|