Related articles |
---|
GCC porting question cjaiprakash@noida.hcltech.com (C Jaiprakash, Noida) (2003-07-13) |
Re: GCC porting question o8ue2fg702@sneakemail.com (Tim Olson) (2003-07-15) |
Re: GCC porting question kenrose@tfb.com (Ken Rose) (2003-07-17) |
Re: GCC porting question mrmnews@the-meissners.org (Michael Meissner) (2003-07-17) |
From: | Michael Meissner <mrmnews@the-meissners.org> |
Newsgroups: | comp.compilers |
Date: | 17 Jul 2003 00:32:17 -0400 |
Organization: | Compilers Central |
References: | 03-07-086 |
Keywords: | GCC, architecture |
Posted-Date: | 17 Jul 2003 00:32:17 EDT |
"C Jaiprakash, Noida" <cjaiprakash@noida.hcltech.com> writes:
> Hi,
> Can gcc be ported to a machine which do not have diaplacement
> addressing mode?
> If yes then what sould macros related to base register be defined as?
> for ex ( REG_OK_FOR_BASE_P, BASE_REG_CLASS )
Sure, you can do it. The IA-64 is one such machine. Looking at the
gcc/config/ia64/ia64.h file, I see (note, I am not an expert on this port, for
help with it, consult the gcc help mailing list):
/* A macro whose definition is the name of the class to which a valid base
register must belong. A base register is one used in an address which is
the register value plus a displacement. */
#define BASE_REG_CLASS GENERAL_REGS
/* A macro whose definition is the name of the class to which a valid index
register must belong. An index register is one used in an address where its
value is either multiplied by a scale factor or added to another register
(as well as added to a displacement). This is needed for POST_MODIFY. */
#define INDEX_REG_CLASS GENERAL_REGS
/* code snipped */
/* A C expression which is nonzero if register number NUM is suitable for use
as a base register in operand addresses. It may be either a suitable hard
register or a pseudo register that has been allocated such a hard reg. */
#define REGNO_OK_FOR_BASE_P(REGNO) \
(GENERAL_REGNO_P (REGNO) || GENERAL_REGNO_P (reg_renumber[REGNO]))
/* A C expression which is nonzero if register number NUM is suitable for use
as an index register in operand addresses. It may be either a suitable hard
register or a pseudo register that has been allocated such a hard reg.
This is needed for POST_MODIFY. */
#define REGNO_OK_FOR_INDEX_P(NUM) REGNO_OK_FOR_BASE_P (NUM)
/* code snipped */
/* A C expression that is 1 if the RTX X is a constant which is a valid
address. */
#define CONSTANT_ADDRESS_P(X) 0
/* The max number of registers that can appear in a valid memory address. */
#define MAX_REGS_PER_ADDRESS 2
/* A C compound statement with a conditional `goto LABEL;' executed if X (an
RTX) is a legitimate memory address on the target machine for a memory
operand of mode MODE. */
#define LEGITIMATE_ADDRESS_REG(X) \
((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
|| (GET_CODE (X) == SUBREG && GET_CODE (XEXP (X, 0)) == REG \
&& REG_OK_FOR_BASE_P (XEXP (X, 0))))
#define LEGITIMATE_ADDRESS_DISP(R, X) \
(GET_CODE (X) == PLUS \
&& rtx_equal_p (R, XEXP (X, 0)) \
&& (LEGITIMATE_ADDRESS_REG (XEXP (X, 1)) \
|| (GET_CODE (XEXP (X, 1)) == CONST_INT \
&& INTVAL (XEXP (X, 1)) >= -256 \
&& INTVAL (XEXP (X, 1)) < 256)))
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, LABEL) \
do { \
if (LEGITIMATE_ADDRESS_REG (X)) \
goto LABEL; \
else if ((GET_CODE (X) == POST_INC || GET_CODE (X) == POST_DEC) \
&& LEGITIMATE_ADDRESS_REG (XEXP (X, 0)) \
&& XEXP (X, 0) != arg_pointer_rtx) \
goto LABEL; \
else if (GET_CODE (X) == POST_MODIFY \
&& LEGITIMATE_ADDRESS_REG (XEXP (X, 0)) \
&& XEXP (X, 0) != arg_pointer_rtx \
&& LEGITIMATE_ADDRESS_DISP (XEXP (X, 0), XEXP (X, 1))) \
goto LABEL; \
} while (0)
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
use as a base register. */
#ifdef REG_OK_STRICT
#define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
#else
#define REG_OK_FOR_BASE_P(X) \
(GENERAL_REGNO_P (REGNO (X)) || (REGNO (X) >= FIRST_PSEUDO_REGISTER))
#endif
/* A C expression that is nonzero if X (assumed to be a `reg' RTX) is valid for
use as an index register. This is needed for POST_MODIFY. */
#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X)
--
Michael Meissner
email: mrmnews@the-meissners.org
http://www.the-meissners.org
Return to the
comp.compilers page.
Search the
comp.compilers archives again.