linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: long long on 32-bit machines
@ 2004-01-28 20:51 Ulrich Weigand
  2004-01-29  1:34 ` H. Peter Anvin
  0 siblings, 1 reply; 11+ messages in thread
From: Ulrich Weigand @ 2004-01-28 20:51 UTC (permalink / raw)
  To: hpa, arnd; +Cc: linux-kernel

Arnd Bergmann wrote:

>Some architectures require long long arguments to be passed as an
>even/odd register pair. For example on s390, 
>
>   void f(int a, int b, long long x) 
>
>uses registers 2, 3, 4 and 5, while 
>
>   void f(int a, long long x, int b)
>
>uses registers 2, 4, 5 and 6.

Actually, this isn't quite true -- the second case will also
use registers 2, 3, 4, and 5.

However, there is still a case where a single long long is
passed differently from a pair of longs: when there is only
a single register remaining for parameters.

This means that
  void f(int a, int b, int c, int d, long e, long f)
is passed as
  a-d in register 2-5
  e in register 6
  f on the stack (4 bytes)

while
  void f(int a, int b, int c, int d, long long e)
is passed as
  a-d in register 2-5
  nothing in register 6
  e on the stack (8 bytes)
 
Bye,
Ulrich 

-- 
  Dr. Ulrich Weigand
  weigand@informatik.uni-erlangen.de

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: long long on 32-bit machines
@ 2004-01-28 19:22 Arnd Bergmann
  2004-01-28 20:25 ` Daniel Jacobowitz
  0 siblings, 1 reply; 11+ messages in thread
From: Arnd Bergmann @ 2004-01-28 19:22 UTC (permalink / raw)
  To: linux-kernel; +Cc:  H. Peter Anvin 


H.P.A wrote:

> Does anyone happen to know if there are *any* 32-bit architectures (on 
> which Linux runs) for which the ABI for a "long long" is different from 
> passing two "longs" in the appropriate order, i.e. (hi,lo) for bigendian 
> or (lo,hi) for littleendian?

Some architectures require long long arguments to be passed as an
even/odd register pair. For example on s390, 

   void f(int a, int b, long long x) 

uses registers 2, 3, 4 and 5, while 

   void f(int a, long long x, int b)

uses registers 2, 4, 5 and 6. AFAIK, mips does the same, probably others
as well.

       Arnd <><

^ permalink raw reply	[flat|nested] 11+ messages in thread
* long long on 32-bit machines
@ 2004-01-28 18:04 H. Peter Anvin
  2004-01-28 19:12 ` Timothy Miller
  2004-01-29 11:02 ` Paul Mackerras
  0 siblings, 2 replies; 11+ messages in thread
From: H. Peter Anvin @ 2004-01-28 18:04 UTC (permalink / raw)
  To: klibc list; +Cc: linux-kernel

Hi all,

Does anyone happen to know if there are *any* 32-bit architectures (on 
which Linux runs) for which the ABI for a "long long" is different from 
passing two "longs" in the appropriate order, i.e. (hi,lo) for bigendian 
or (lo,hi) for littleendian?

I'd like to switch klibc to use the 64-bit file ABI thoughout, but it's 
a considerable porting effort, and I'm trying to figure out how to best 
manage it.

	-hpa

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2004-02-01  0:48 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-28 20:51 long long on 32-bit machines Ulrich Weigand
2004-01-29  1:34 ` H. Peter Anvin
2004-01-29  9:19   ` Arnd Bergmann
  -- strict thread matches above, loose matches on Subject: below --
2004-01-28 19:22 Arnd Bergmann
2004-01-28 20:25 ` Daniel Jacobowitz
2004-01-28 18:04 H. Peter Anvin
2004-01-28 19:12 ` Timothy Miller
2004-01-28 19:15   ` David S. Miller
2004-01-29 11:02 ` Paul Mackerras
2004-01-31  6:08   ` H. Peter Anvin
2004-02-01  0:41     ` Paul Mackerras

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).