This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Legitimize address, Please HELP!


> int
> legitimate_address_p (mode, operand, strict)
> enum machine_mode mode;
> rtx operand;
> int strict;
> {
>    rtx x = operand;
> 
>    /* accept @Rn */
>    if (GET_CODE (operand) == REG
>            &&(strict ? REG_OK_FOR_BASE_STRICT_P (x)
>               : REG_OK_FOR_BASE_NOSTRICT_P (x)))  
>        return 1;
> 
>    /* accept address */
>    if (CONSTANT_ADDRESS_P (operand))
>        return 1;
> 
>    /* accept X(Rn) */
>    if (GET_CODE (operand) == PLUS
>            && GET_CODE (XEXP (operand, 0)) == REG
>            && REG_OK_FOR_BASE_P (XEXP (operand, 0))
>            && CONSTANT_ADDRESS_P (XEXP (operand, 1)))
>        return 1;
> 
Missing return 0;
> }
> --------------------------
> 
> Shall I define something else to prevent invalid address generation or what?

It is normal for invalid addresses to be generated and rejected
during the compilation.
If you want to do some special tricks, you may define LEGITIMIZE
macros, but in your case, it the default behaviour is most probably
OK.  I guess only problem is the missing return :)

Honza


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]