Line 300... |
Line 300... |
*/
|
*/
|
/*
|
/*
|
#define CAN_DEBUG_WITHOUT_FP
|
#define CAN_DEBUG_WITHOUT_FP
|
*/
|
*/
|
|
|
|
/* This function computes the initial size of the frame (difference between SP
|
|
and FP) after the function prologue. */
|
#define INITIAL_FRAME_POINTER_OFFSET(DEPTH) \
|
#define INITIAL_FRAME_POINTER_OFFSET(DEPTH) \
|
{ int regno; \
|
{ \
|
|
int regno; \
|
int offset = 0; \
|
int offset = 0; \
|
|
\
|
for( regno=0; regno < FIRST_PSEUDO_REGISTER; regno++ ) \
|
for( regno=0; regno < FIRST_PSEUDO_REGISTER; regno++ ) \
|
|
{ \
|
if( regs_ever_live[regno] && !call_used_regs[regno] ) \
|
if( regs_ever_live[regno] && !call_used_regs[regno] ) \
|
|
{ \
|
offset += 4; \
|
offset += 4; \
|
(DEPTH) = (!current_function_is_leaf || regs_ever_live[LINK_REGNUM] ? 4 : 0) + \
|
} \
|
(frame_pointer_needed ? 4 : 0) + \
|
} \
|
offset + \
|
\
|
OR32_ALIGN(current_function_outgoing_args_size,4) + \
|
(DEPTH) = ((!current_function_is_leaf \
|
OR32_ALIGN(get_frame_size(),4); \
|
|| regs_ever_live[LINK_REGNUM]) ? 4 : 0) \
|
|
+ (frame_pointer_needed ? 4 : 0) \
|
|
+ offset \
|
|
+ OR32_ALIGN (current_function_outgoing_args_size,4) \
|
|
+ OR32_ALIGN (get_frame_size(),4); \
|
}
|
}
|
|
|
/* Base register for access to arguments of the function. */
|
/* Base register for access to arguments of the function. */
|
#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
|
#define ARG_POINTER_REGNUM FRAME_POINTER_REGNUM
|
|
|
Line 352... |
Line 362... |
For any two classes, it is very desirable that there be another
|
For any two classes, it is very desirable that there be another
|
class that represents their union. */
|
class that represents their union. */
|
|
|
/* The or32 has only one kind of registers, so NO_REGS, GENERAL_REGS
|
/* The or32 has only one kind of registers, so NO_REGS, GENERAL_REGS
|
and ALL_REGS are the only classes. */
|
and ALL_REGS are the only classes. */
|
|
/* JPB 26-Aug-10: Based on note from Mikhael (mirekez@gmail.com), we don't
|
|
need CR_REGS and it is in the wrong place for later things! */
|
enum reg_class
|
enum reg_class
|
{
|
{
|
NO_REGS,
|
NO_REGS,
|
GENERAL_REGS,
|
GENERAL_REGS,
|
CR_REGS,
|
|
ALL_REGS,
|
ALL_REGS,
|
|
/* CR_REGS, */
|
LIM_REG_CLASSES
|
LIM_REG_CLASSES
|
};
|
};
|
|
|
#define N_REG_CLASSES (int) LIM_REG_CLASSES
|
#define N_REG_CLASSES (int) LIM_REG_CLASSES
|
|
|
Line 780... |
Line 791... |
*/
|
*/
|
#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;
|
|
|
/*
|
/* This isn't needed at present, but we may want it in the future if a machine
|
* We have to force symbol_ref's into registers here
|
specific code can do better than GCC's default rules. */
|
* because nobody else seems to want to do that!
|
/* #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) */
|
*/
|
|
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {}
|
|
/*
|
|
{ if (GET_CODE (x) == SYMBOL_REF) \
|
|
(X) = copy_to_reg (X); \
|
|
if (memory_address_p (MODE, X)) \
|
|
goto WIN; \
|
|
}
|
|
*/
|
|
|
|
/*
|
/*
|
* OR32 addresses do not depend on the machine mode they are
|
* OR32 addresses do not depend on the machine mode they are
|
* being used in.
|
* being used in.
|
*/
|
*/
|
Line 877... |
Line 879... |
assembler language. The compiler assumes that the comment will end at
|
assembler language. The compiler assumes that the comment will end at
|
the end of the line. */
|
the end of the line. */
|
#define ASM_COMMENT_START "#"
|
#define ASM_COMMENT_START "#"
|
|
|
/* Output at beginning of assembler file. */
|
/* Output at beginning of assembler file. */
|
/*
|
|
__PHX__ clenup
|
|
#ifndef ASM_FILE_START
|
|
#define ASM_FILE_START(FILE) do {\
|
|
fprintf (FILE, "%s file %s\n", ASM_COMMENT_START, main_input_filename);\
|
|
fprintf (FILE, ".file\t"); \
|
|
output_quoted_string (FILE, main_input_filename);\
|
|
fputc ('\n', FILE);} while (0)
|
|
#endif
|
|
*/
|
|
/* Output to assembler file text saying following lines
|
/* Output to assembler file text saying following lines
|
may contain character constants, extra white space, comments, etc. */
|
may contain character constants, extra white space, comments, etc. */
|
|
|
#define ASM_APP_ON ""
|
#define ASM_APP_ON ""
|
|
|
Line 953... |
Line 946... |
DWARF2 frame debug info when DWARF2_UNWIND_INFO is non-zero. Override any
|
DWARF2 frame debug info when DWARF2_UNWIND_INFO is non-zero. Override any
|
default value. */
|
default value. */
|
#undef INCOMING_RETURN_ADDR_RTX
|
#undef INCOMING_RETURN_ADDR_RTX
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LINK_REGNUM)
|
#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LINK_REGNUM)
|
|
|
/* We believe this works for our assembler. Override any default value */
|
/* Where is the start of our stack frame in relation to the end of the
|
#undef DWARF2_ASM_LINE_DEBUG_INFO
|
previous stack frame at the start of a function, before the prologue */
|
#define DWARF2_ASM_LINE_DEBUG_INFO 1
|
#define INCOMING_FRAME_SP_OFFSET 0
|
|
|
|
|
|
|
|
/* This doesn't work for the OR32 assembler at present. If it did, we'd have
|
|
more compact debug tables. */
|
|
/* #undef DWARF2_ASM_LINE_DEBUG_INFO */
|
|
/* #define DWARF2_ASM_LINE_DEBUG_INFO 1 */
|
|
|
|
/* We don't need an alternative return address for now. */
|
|
/* DWARF_ALT_FRAME_RETURN_COLUMN */
|
|
|
|
/* We always save registers in the prologue with word alignment, so don't
|
|
need this. */
|
|
/* DWARF_CIE_DATA_ALIGNMENT */
|
|
|
|
/* This specifies the maximum number of registers we can save in a frame. We
|
|
could note that only SP, FP, LR, arg regs and callee saved regs come into
|
|
this category. However this is only an efficiency thing, so for now we
|
|
don't use it. */
|
|
/* DWARF_FRAME_REGISTERS */
|
|
|
|
/* This specifies a mapping from register numbers in .dwarf_frame to
|
|
.eh_frame. However for us they are the same, so we don't need it. */
|
|
/* DWARF_FRAME_REGNUM */
|
|
|
|
/* Defined if the DWARF column numbers do not match register numbers. For us
|
|
they do, so this is not needed. */
|
|
/* DWARF_REG_TO_UNWIND_COLUMN */
|
|
|
|
/* Can be used to define a register guaranteed to be zero. Only useful if zero
|
|
is used to terminate backtraces, and not recommended for new ports, so we
|
|
don't use it. */
|
|
/* DWARF_ZERO_REG */
|
|
|
|
/* This is the inverse function for DWARF_FRAME_REGNUM. Again not needed. */
|
|
/* DWARF2_FRAME_REG_OUT */
|
|
|
|
/* The following macros are not needed. */
|
|
/* TARGET_DWARF_CALLING_CONVENTION */
|
|
/* TARGET_DWARF_HANDLE_FRAME_UNSPEC */
|
|
/* TARGET_DWARF_REGISTER_SPAN */
|
|
|
|
|
/* Node: Label Output */
|
/* Node: Label Output */
|
|
|
/* Globalizing directive for a label. */
|
/* Globalizing directive for a label. */
|