Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: A clean way to account for machine word sizes in XS code?

by tonyc (Pilgrim)
on Aug 14, 2009 at 01:50 UTC ( #788483=note: print w/replies, xml ) Need Help??

in reply to A clean way to account for machine word sizes in XS code?

For the typemap you need to add typemap entries that map your types to the same as the other int types, eg. in typemap:

gf2_u8 T_UV gf2_u16 T_UV gf2_u32 T_UV gf2_s8 T_IV gf2_s16 T_IV gf2_s32 T_IV

ExtUtils::MakeMaker should pick up the type map automatically when you run Makefile.PL.

As to whether those types are the correct types, one possibility is stdint.h, which requires a C99 compiler/libc, but in most cases, if the C compiler has 8 and 16 bit int types, char and short will be them.

Unfortunately perl doesn't probe for stdint.h, so it's something you'd need to probe for yourself.

For 32-bit, long might be 64-bit*, so in the absence of inttypes.h you could use limits.h:

#include <limits.h> #if USHRT_MAX > 0x80000000 typedef unsigned short gf2_u32; #elif UINT_MAX > 0x80000000 typedef unsigned gf2_u32; #else typedef unsigned long gf2_u32; #endif

* According to the standard, they could all be 128-bit, but most likely char is 8 bit if the compiler has an 8-bit type, and unless the compiler has stdint.h, short will be the 16 bit type if there is one.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://788483]
and John Coltrane plays...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (9)
As of 2017-06-26 10:32 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (577 votes). Check out past polls.