[m-rev.] for review: fix float field structure padding/packing problems

Julien Fischer juliensf at csse.unimelb.edu.au
Wed Dec 7 03:01:04 AEDT 2011



On Tue, 6 Dec 2011, Julien Fischer wrote:

>
> On Tue, 6 Dec 2011, Paul Bone wrote:
>
>> On Mon, Dec 05, 2011 at 05:50:36PM +1100, Peter Wang wrote:
>>> Can someone apply this and test with MSVC and MinGW?
>>> I've only tested the single precision floats on 64-bit Linux part.
>>> 
>>> Would it be worth avoiding the C extensions when
>>> sizeof(MR_Float) == sizeof(MR_Word)?  That can't be evaluated by the C
>>> preprocessor, though.
>>> 
>> 
>> If this is possible then there's an improvement below (see my in-line 
>> reply)
>> that can be made.
>> 
>>> diff --git a/runtime/mercury_float.h b/runtime/mercury_float.h
>>> index 049477f..28d5728 100644
>>> --- a/runtime/mercury_float.h
>>> +++ b/runtime/mercury_float.h
>>> @@ -29,6 +29,21 @@
>>>  #define MR_FLOAT_WORDS		((sizeof(MR_Float) + sizeof(MR_Word) 
>>> - 1) \
>>>  					/ sizeof(MR_Word))
>>> 
>>> +  /*
>>> +  ** MR_Float_Aligned is a word-aligned version of MR_Float.  This is 
>>> necessary
>>> +  ** when MR_Float is single precision on a 64-bit platform to avoid 
>>> packing
>>> +  ** consecutive float fields, or when MR_Float is double precision on 
>>> some
>>> +  ** 32-bit platforms (e.g. Win32) to avoid introducing padding.
>>> +  */
>>> +#if defined(MR_GNUC) || defined(MR_CLANG)
>>> +  typedef MR_Float MR_Float_Aligned 
>>> __attribute__((aligned(sizeof(MR_Word))));
>>> +#elif defined(MR_MSVC)
>>> +  typedef _declspec(align(sizeof(MR_Word))) MR_Float MR_Float_Aligned;
>>> +#else
>>> +  /* Hope for the best. */
>>> +  typedef MR_Float MR_Float_Aligned;
>>> +#endif
>>> +
>> 
>> This last alternative could raise an error to tell the user that we don't
>> support his/her compiler on this combination of word size and float size.
>
> Raising an error at this point would prevent Mercury from working with
> any but the three C compilers listed.  That seems a bit rough given that
> this problem only affects certain problems or grades.

s/problems/compilers/ in that last sentence in order for it to make
sense.

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



More information about the reviews mailing list