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