linux-libc-headers: include/asm-arm26/page.h, include/asm-ia64/pag...
Paweł Sikora
pluto w ds14.agh.edu.pl
Nie, 29 Sie 2004, 17:54:55 CEST
On Sunday 29 of August 2004 17:30, Jakub Bogusz wrote:
> 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]))
co więcej. taki kod zjada kawałek stosu ;)
#define PAGE_SHIFT \
((PAGE_SIZE > 65536) ? (-1) \
: ((unsigned long[]){12,13,14,-1,15,-1,-1,-1,16}[PAGE_SIZE>>13]))
#define PAGE_SIZE 32768
int test() { return PAGE_SHIFT; }
test:
subl $60, %esp
movl $15, %eax
addl $60, %esp
ret
--
/* Copyright (C) 2003, SCO, Inc. This is valuable Intellectual Property. */
#define say(x) lie(x)
Więcej informacji o liście dyskusyjnej pld-devel-pl