[m-rev.] [zs at unimelb.edu.au: Re: for review: Conform to memory alignment requirements on doubles.]

Zoltan Somogyi zs at unimelb.edu.au
Wed Oct 9 08:27:28 AEDT 2013


I accidentally sent to this only to Paul, instead of the whole list.

Zoltan.

----- Forwarded message from Zoltan Somogyi <zs at unimelb.edu.au> -----

Date: Wed, 9 Oct 2013 08:25:14 +1100
From: Zoltan Somogyi <zs at unimelb.edu.au>
To: Paul Bone <paul at bone.id.au>
Subject: Re: [m-rev.] for review: Conform to memory alignment requirements
	on doubles.

On 08-Oct-2013, Paul Bone <paul at bone.id.au> wrote:
> Is it easy to move this hidden word to the end of the cell or add padding?

The hidden word cannot be moved without redesign of the term size profiling
system. However, I don't see any problem with disabling term size profiling
on 32 bit systems, which should be easy to do.

> > It would be trickier for the nondet stack.  Multiple frame types exist
> > on the nondet stack, and the different frame types are identified by
> > their sizes: 3-word and 4-word temporary frames, and 5/6+ word ordinary
> > frames. Rather than rounding up frame sizes to even numbers of words,
> > we would probably want to dynamically pad ordinary frame allocations,
> > such that any doubles in the frame will be at aligned addresses.
> > 
> > However, in this change, we simply store box floats on the nondet stack.

I think that is the only pragmatic solution. Any other solution would
require some other way to distinguish the different frame types, and I don't
see how that could be without imposing a cost (in both space and time)
that would have to be paid even if the absence of float variables.

In Mercury programs, both nondet code and floats are fairly rare; the
combination should be rarer still. That's why I think the performance
impact of this change shouldn't be too bad.

> > 	Remember det_stack_float_width in exprn_opts.
> 
> What does this mean?  Is this a reminder to yourself?

The exprn_opts data structure stores information that the code generator
needs when generating code for things that look like expressions in a typical
compiler (though in Mercury, they are all terms). I presume that sentence
means that this change adds a flag about the treatment of floats in det stack
slots to this data structure. Though I do agree with Paul, that this should
be reworded.

> I will read the rest after this is anwsered.

I haven't read the diff itself either, but the log message looks good.

Zoltan.

----- End forwarded message -----



More information about the reviews mailing list