Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Perl-Sensitive Sunglasses
 
PerlMonks  

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.


Comment on Re: A clean way to account for machine word sizes in XS code?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://788483]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (10)
As of 2014-04-23 18:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (551 votes), past polls