Bugs in MIPS FUNCTION_ARG_REGNO_P ?

Mark Mitchell mark@codesourcery.com
Wed Mar 3 07:25:00 GMT 2004


Eric Christopher wrote:

> On Tue, 2004-03-02 at 19:05, Mark Mitchell wrote:
> 
>>Eric --
>>
>>If I read this correctly:
>>
>>#define FUNCTION_ARG_REGNO_P(N)					\
>>  ((IN_RANGE((N), GP_ARG_FIRST, GP_ARG_LAST)			\
>>    || (IN_RANGE((N), FP_ARG_FIRST, FP_ARG_LAST)		\
>>	&& ((N) % FP_INC == 0) && mips_abi != ABI_O64))		\
>>   && !fixed_regs[N])
>>
>>it says that floating-point registers are never used for
>>argument-passing in the O64 ABI.  That doesn't seem right.
> 
> 
> It's been that way for quite some time. I believe it to be correct,
> however, Jim would know best if he remembers.

What exactly do you believe to be correct?  The macro implementation, or 
the statement that the O64 ABI does not use floating-point registers for 
arugment-passing?

The latter statement does not match what the rest of the compiler does 
-- compiling test programs with -mabi=o64 shows that $f12, $f13, $f14 
are are used for floating-point arguments, and there are comments to 
that effect in the code.

So, I guess you believe the macro to be correct?  I'm confused as to how 
that could be, since it seems never to return true for a floating-point 
register when using the O64 ABI.

Well, perhaps Jim can shed some lite, as you say.

Thanks for looking at it!

-- 
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com



More information about the Gcc mailing list