[builder-ac-amd64@pld-linux.org: ERRORS: scorched3d.spec]

Paweł Sikora pluto w ds14.agh.edu.pl
Wto, 13 Kwi 2004, 22:16:34 CEST


On Tuesday 13 of April 2004 21:35, Jakub Bogusz wrote:
> On Tue, Apr 13, 2004 at 08:50:18PM +0200, Paweł Sikora wrote:
> > On Tuesday 13 of April 2004 20:05, Jakub Bogusz wrote:
> > >     dReal *tmprow = (dReal*) ((char*)((((((int)(__builtin_alloca ((n *
> > > sizeof(dReal))+(16 -1)))))-1)|(16 -1))+1)); ^^^
> > >
> > > Co się stanie z 64-bitowym wskaźnikiem po zrzutowaniu na 32-bitowego
> > > inta i rozszerzeniu z powrotem do 64-bitowego wskaźnika, łatwo
> > > przewidzieć.
> >
> > glowy nie dam, ale w standardzie C stoi bodajze, ze:
> >
> > *int ma rozmiar naturalnego slowa maszynowego*
> > i zachowany jest porzadek sizeof(short) <= sizeof(int) <= sizeof(long).
> >
> > czyli...
> >
> > w przypadku arch. 32 bitowej jest to np.:
> > short(16) <= int(32) <= long(32).
> >
> > w przypadku arch. 64 bitowej powinno byc IMO:
> > short(...) <= int(64) <= long(64...)
>
> Tak być nie musi i nie jest.
> Nie byłoby wtedy typu 16- lub 32-bitowego wśród standardowych.

zerknijmy tu: http://www.opengroup.org/public/tech/aspen/lp64_wp.htm 

"C language standards specify a set of *relationships between* the various
 data types but deliberately *do not define actual sizes*.
 Ignoring the non-standard types for a moment, all three 64-bit pointer
 models satisfy the rules as specified."

Datatype  LP64 ILP64 LLP64 ILP32 LP32
char         8    8    8    8    8
short       16   16   16   16   16
_int32           32
int         32   64   32   32   16
long        64   64   32   32   32
long long             64
pointer     64   64   64   32   32

> Różnicą w stosunku do 32-bitowych architektur jest rozmiar longa
> i wskaźnika (a tym samym typów definiowanych w rodzaju size_t
> i pokrewnych), przynajmniej na alphie, amd64, sparc64... ppc64
> i ia64 prawie na pewno też.

roznica IMO jest taka, ze jedziemy na protezie LP64 by 32-bitowe
nieprzenosne (sztywno zakladajace, ze int to 4 bajty) zrodla
sie nie posypaly po kompilacji na x86_64. jest tylko kwestia
czasu przejscie na natywne (dla procesorow) ILP64.

nasz przykladowy fragment kodu powinien nosic miano
"jak wydymac kompatybilnosc LP64" :-D
warto zauwazyc, ze przy natywnym sprzetowo ILP64 nic by sie nie stalo.

dReal *tmprow = (dReal*) ((char*)((((((int)(
                 __builtin_alloca(
                    (n *sizeof(dReal))
                   +(16 -1)))))-1)|(16 -1))+1));

no to chyba EOT. juz wiem wszystko :)

-- 
If you think of MS-DOS as mono, and Windows as stereo,
  then Linux is Dolby Digital and all the music is free...



Więcej informacji o liście dyskusyjnej pld-devel-pl