lkml.org 
[lkml]   [2008]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/2] Add C99-style constructor macros for specific-sized integers
    On Mon, Mar 03, 2008 at 11:43:10AM +0000, Russell King wrote:
    > On Mon, Mar 03, 2008 at 10:57:32AM +0000, David Howells wrote:
    > > H. Peter Anvin <hpa@zytor.com> wrote:
    > >
    > > > +#define S8_C(x) x
    > > > +#define U8_C(x) x ## U
    > > > +#define S16_C(x) x
    > > > +#define U16_C(x) x ## U
    > > > +#define S32_C(x) x
    > > > +#define U32_C(x) x ## U
    > > > +#define S64_C(x) x ## LL
    > > > +#define U64_C(x) x ## ULL
    > >
    > > And #if defined(__ASSEMBLY__), just splat x through as is.
    >
    > We already have something like this on ARM - include/asm-arm/memory.h
    >
    > /*
    > * Allow for constants defined here to be used from assembly code
    > * by prepending the UL suffix only with actual C code compilation.
    > */
    > #ifndef __ASSEMBLY__
    > #define UL(x) (x##UL)
    > #else
    > #define UL(x) (x)
    > #endif

    And in linux/const.h we have yet another variant:
    /* Some constant macros are used in both assembler and
    * C code. Therefore we cannot annotate them always with
    * 'UL' and other type specifiers unilaterally. We
    * use the following macros to deal with this.
    *
    * Similarly, _AT() will cast an expression with a type in C, but
    * leave it unchanged in asm.
    */

    #ifdef __ASSEMBLY__
    #define _AC(X,Y) X
    #define _AT(T,X) X
    #else
    #define __AC(X,Y) (X##Y)
    #define _AC(X,Y) __AC(X,Y)
    #define _AT(T,X) ((T)(X))
    #endif

    Not as typestrict as hpa's and arm's version but
    used in a few placed already.

    Sam


    \
     
     \ /
      Last update: 2008-03-03 13:43    [W:0.023 / U:30.116 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site