Re: PATCH: Re: Inefficient ia64 system call implementation in glibc

Andreas Schwab
2003-09-24T20:36:48Z

"H. J. Lu" <hjl@lucon.org> writes:

> On Wed, Sep 24, 2003 at 10:36:21AM +0200, Andreas Schwab wrote:
>> "H. J. Lu" <hjl@lucon.org> writes:
>>
>> > On Mon, Sep 22, 2003 at 04:21:23PM -0700, Richard Henderson wrote:
>> >> On Mon, Sep 22, 2003 at 12:39:18PM -0700, H. J. Lu wrote:
>> >> > Can I get char * from char [300]?
>> >>
>> >> x+0 would work in this case; I'd guess it'd work for most of the
>> >> cases that syscalls need to handle.
>> >>
>> >
>> > This patch works for me.
>> >
>> >
>> > H.J.
>> > ---
>> > 2003-09-22 H.J. Lu <hongjiu.lu@intel.com>
>> >
>> > * sysdeps/unix/sysv/linux/ia64/sysdep.h (LOAD_ARGS_1): Use
>> > __typeof ((outX) + 0) instead of long.
>>
>> Hopefully we don't have any occurences of LOAD_ARGS_n(...,0,..) where the
>> kernel expects long.
>>
>
> I don't think it will be the problem. Compiler will do
>
> addl outN = constant, r0
>
> to pass a constant to the function, regardless what the type is. Am I
> correct?

It doesn't have to be a constant, it can be an arbitrary expression of the
wrong (narrower) type.

Andreas.

--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."