linux-libc-headers: include/asm-arm26/page.h, include/asm-ia64/pag...

Jakub Bogusz qboosh w pld-linux.org
Nie, 29 Sie 2004, 17:30:05 CEST


On Sun, Aug 29, 2004 at 05:11:47PM +0200, Mariusz Mazur wrote:
> On niedziela 29 sierpień 2004 16:44, Jakub Bogusz wrote:
> > > -#define PAGE_SIZE		(1UL << PAGE_SHIFT)
> > > +extern int getpagesize(void);
> > > +#define PAGE_SIZE ((unsigned long)getpagesize())
> > > +#define PAGE_SHIFT ((unsigned
> > > long[]){12,13,14,-1,15,-1,-1,-1,16}[PAGE_SIZE>>13]) #define
> > > PAGE_MASK		(~(PAGE_SIZE-1))
> >
> > Wersja z ?: trochę brzydziej wyglądała, ale chyba jej wolałbym użyć...
> > przynajmniej sensownie by zareagowała na zwrócenie nieoczekiwanej
> > wartości przez getpagesize() - bo to powyższe... można się domyślić.
> 
> Nie można, bo się ni w ząb nie znam na operacjach bitowych w C :)
> Chooociaż. Chyba rozszyfrowałem co to za spaghetti makro. Jak rozumiem chodzi 
> ci o wersją, jaką ten człek posłał oryginalnie, a to co jest powyżej działa 
> tylko poprawnie dla jakiś określonych PAGE_SIZEów?

To może lepiej tak (coś pośredniego):

#define PAGE_SHIFT ((PAGE_SIZE > 65536) ? -1 : ((unsigned long[]){12,13,14,-1,15,-1,-1,-1,16}[PAGE_SIZE>>13]))

6 zagnieżdżonych ?: byłoby faktycznie mało czytelne ;)
A z tym jednym mamy zabezpieczenie na wypadek, gdyby jakaś
podarchitektura zaczęła mieć strony >=128kB
(poprzednia wersja odczytywałaby wtedy jakiegoś śmiecia z pamięci).


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/




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