[m-dev.] What's the deal with integer types in Mercury's C source.

Julien Fischer juliensf at csse.unimelb.edu.au
Fri Sep 9 16:02:08 AEST 2011

On Fri, 9 Sep 2011, Paul Bone wrote:

> Hi guys.
> In C source we often use MR_Integer and MR_Unsigned, these are guaranteed to be
> at least pointer-sized.  We also use MR_uint_least32_t and friends when we want
> something at least that particular size.
> I want an integer that is exactly 32 bits on 32 and 64 bit platforms.  I'm
> trying to make some inline assembler things as compatible as possible with
> different C compilers on i386 and x86_64.  The assembly code it's self is
> compatible with either i386 or x86_64 but I'd also like it's parameter to be
> exactly 32 bits to match the operand size I'm using in the assembly code.
> How portable is uint32_t?  Or should I use some other type to get _exactly_ a
> 32bit unsigned int?

uint32_t is C99; most C compilers provide it;  MSVC 2010 provides stdint
and hence uint32_t, older versions of MSVC do not.
For older versions of MSVC (and indeed for 2010) you could use the
unsigned __int32 type.

I suggest adding MR_uint32_t etc to runtime/mercury_types.h and defining
them appropriately.  (That at least gives us a way of dealing with older
or broken C compilers.)

mercury-developers mailing list
Post messages to:       mercury-developers at csse.unimelb.edu.au
Administrative Queries: owner-mercury-developers at csse.unimelb.edu.au
Subscriptions:          mercury-developers-request at csse.unimelb.edu.au

More information about the developers mailing list