DJ Delorie wrote: > I strongly request we continue supporting the use of attribute((mode)) > to create pointers of different sizes, at least for copying and > passing. The m32c reset vector and interrupt table really want to be > set up like this example: > > typedef void (*ifunc)() __attribute__((mode(SI))); > ifunc __attribute__((section(".resetvec"))) reset_vector = start;
Maybe it is just me, but it seems more natural to have: typedef void (*long ifunc)(); i.e. in C or C++ have: int *stdptr; int *short ptr16bits; int *long ptr64bits; like: int *const constptr; int *volatile volatileptr; I am not sure about authorising dereferencing of short pointers or only use them when associated to a standard pointer - like: typedef void (*short func_t)(); func_t array_of_func_ptr[32]; void (*base)(); and then: (*base + array_of_func_ptr[i]) (); But short pointer have a use (reduce array size of pointers to local objects), exist on ia32/ia16 instruction set, and are the only pointer loaded atomic-ally in PPC (and other RISCs) (std pointers loaded by "lis r1,[EMAIL PROTECTED] ; addi r1,[EMAIL PROTECTED] "), so basic data structures (queues, stacks) are a lot easier to implement when the size is limited to 64 Kbytes. The short pointer may also be used as the difference in between two pointers, by a cast when the programmer knows the difference will fit: int array[100], *ptr1 = &array[10], *ptr2 = &array[20]; int *short diffptr = (int *short)(ptr2 - ptr1); The result of converting an "int *" to a "int *short" with a too big value should be the same as converting an "int" to a "short int" with a too big value. Sorry, just 2 cent ideas without implementation... Etienne. p4.vert.ukl.yahoo.com uncompressed/chunked Wed Aug 16 13:14:16 GMT 2006 ___________________________________________________________________________ Découvrez un nouveau moyen de poser toutes vos questions quelque soit le sujet ! Yahoo! Questions/Réponses pour partager vos connaissances, vos opinions et vos expériences. http://fr.answers.yahoo.com