[M3devel] <*LAZYALIGN*>

Tony Hosking hosking at cs.purdue.edu
Mon Feb 18 22:32:46 CET 2008


On Feb 18, 2008, at 3:01 PM, Darko wrote:

> The alignment behaviour is absolutely crucial to programming  
> natively in Mac OS X and should be kept. I have a great need for it.
>
> The PRGAMA is of no use and can be removed.
>
> Does anyone have any objections to making this alignment behaviour  
> standard?

What do you mean make LAZYALIGN standard?  Why wouldn't we go with  
the standard gcc-backend alignment?  Perhaps I don't understand what  
it is you are doing or trying to do.  Again, please remind me what it  
is that LAZYALIGN does and why it is needed.

> On 19/02/2008, at 4:36 AM, Tony Hosking wrote:
>
>> Can someone remind me again why we need LAZYALIGN?  I concur with  
>> Randy that if it is rarely used and moreso breaks things I would  
>> argue to abandon it.
>>
>> On Feb 18, 2008, at 10:56 AM, Randy Coleburn wrote:
>>
>>> I use pickles extensively and they are used also by network objects.
>>> I've never used LAZYALIGN.
>>> My vote is that we don't break something (pickles/netobj) to add  
>>> support for something that is rarely used.
>>> Regards,
>>> Randy
>>>
>>> >>> "Rodney M. Bates" <rodney.bates at wichita.edu> 2/15/2008 5:06  
>>> PM >>>
>>> I'll put it in comments in the code.  I am sure I can fix it to
>>> handle LAZYALIGN too,  just not sure whether I can do it without
>>> requiring existing pickle files to be regenerated and/or existing
>>> code that reads/writes pickles to need recompilation.
>>>
>>> Anybody on this list who has code that might be affected if pickles
>>> or compiled code were invalidated by a change?
>>>
>>> I do propose we change the way of telling the compiler to do
>>> LAZYALIGN so that it is a property of a type and affects all
>>> variables of that type.
>>>
>>> Olaf Wagner wrote:
>>> > Perhaps we should check-in this description somewhere near the
>>> > actual code? Or is there enough documentation already?
>>> >
>>> > Olaf
>>> >
>>> > PS: Based on your description, I'd say we should abandon  
>>> LAZYALIGN.
>>> >     Or at least put a big sticker on that it will break pickles.
>>> >
>>> > Quoting "Rodney M. Bates" <rodney.bates at wichita.edu>:
>>> >
>>> >> The word "Packing" in RTPacking is perhaps misleading.  Using  
>>> BITSIZE,
>>> >> etc. only works for getting object layouts as on the machine  
>>> executing
>>> >> the code, which is all that is needed when writing a pickle.
>>> >>
>>> >> When reading, Pickle code needs to know the layouts of a type  
>>> both as
>>> >> it is on the reading machine and as it was on the machine that  
>>> wrote
>>> >> the pickle.  The type description that the compiler generates is
>>> >> excerpted and contains no field displacements, just lists of  
>>> field
>>> >> types (which are either recursive type descriptions or builtin  
>>> types).
>>> >> So it is independent of word sizes, etc.
>>> >>
>>> >> Pickles regenerates the displacements using the few target  
>>> machine
>>> >> characteristics in a RTPacking.T  It traverses a type  
>>> description and
>>> >> simultaneously computes two sets of field displacements, both  
>>> as they
>>> >> are on the reading machine and on the writing machine.  For  
>>> the latter,
>>> >> the value of RTPacking.T is (after a compact bit encoding)  
>>> stored in the
>>> >> header of the pickle file.  For the former, it's gotten by  
>>> techniques
>>> >> like
>>> >> using BITSIZE.  This is actually all done in RTTipe, part of  
>>> m3core, and
>>> >> called by Pickle code.
>>> >>
>>> >> This is very fragile.  RTTipe has to duplicate the compiler's  
>>> layout
>>> >> behavior.  There is no shared code.  Making it common would  
>>> involve
>>> >> quite a bit of rework, as the two use substantially different  
>>> data
>>> >> structure and code organization.  It will be obvious what kind  
>>> of bit
>>> >> damage could occur if the two algorithms didn't agree.
>>> >>
>>> >> This is why I am obsessing over LAZYALIGN.  I have been  
>>> comparing the
>>> >> field displacement computations in RTTipe and in the  
>>> compiler.  The
>>> >> former is oblivious to LAZYALIGN.
>>> >>
>>> >> Note that all this is required even without any packing of  
>>> small fields
>>> >> within words.  E.G., a record with two INTEGER fields, pickled  
>>> on a
>>> >> 32-bit machine and unpickled on a 64.
>>> >>
>>> >> Tony Hosking wrote:
>>> >>
>>> >>> Rodney,
>>> >>>
>>> >>> Why does there need to be an entry for LONGINT in RTPacking?  I
>>> >>> would  have thought all packing is done on word-sized units  
>>> anyway.
>>> >>>  Each  side of the connection can check BITSIZE(LONGINT) to  
>>> figure
>>> >>> out what  to do presumably no differently from the way  
>>> INTEGER is
>>> >>> communicated  between 32-bit and 64-bit machines.  Am I missing
>>> >>> something?
>>> >>>
>>> >>> -- Tony
>>> >>>
>>> >>> On Feb 15, 2008, at 10:51 AM, Tony Hosking wrote:
>>> >>>
>>> >>>> Ah, OK.  I don't much delve in pickle-land.  Anything I can  
>>> help with?
>>> >>>>
>>> >>>> On Feb 14, 2008, at 11:02 PM, Rodney M. Bates wrote:
>>> >>>>
>>> >>>>> 1) RTPacking.T and needs to have a separate size for LONGINT,
>>> >>>>>   (which can vary independently of the size of INTEGER).
>>> >>>>> 2) Variable length values of subrange bounds found in type
>>> >>>>>   descriptions (in TipeDesc.i3) can now have values beyond
>>> >>>>>   what the native word size can represent.
>>> >>>>> 3) RTType.Kind.Longint (which I presume you, Tony, added  
>>> recently)
>>> >>>>>   is not handled by Pickles.
>>> >>>>>
>>> >>>>> I have done some coding on this, but have been interrupted.
>>> >>>>>
>>> >>>>> Tony Hosking wrote:
>>> >>>>>
>>> >>>>>> Why is LONGINT for pickles not yet supported?
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> --
>>> >>>>> -------------------------------------------------------------
>>> >>>>> Rodney M. Bates, retired assistant professor
>>> >>>>> Dept. of Computer Science, Wichita State University
>>> >>>>> Wichita, KS 67260-0083
>>> >>>>> 316-978-3922
>>> >>>>> rodney.bates at wichita.edu
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >> --
>>> >> -------------------------------------------------------------
>>> >> Rodney M. Bates, retired assistant professor
>>> >> Dept. of Computer Science, Wichita State University
>>> >> Wichita, KS 67260-0083
>>> >> 316-978-3922
>>> >> rodney.bates at wichita.edu
>>> >
>>> >
>>> >
>>> >
>>>
>>> -- 
>>> -------------------------------------------------------------
>>> Rodney M. Bates, retired assistant professor
>>> Dept. of Computer Science, Wichita State University
>>> Wichita, KS 67260-0083
>>> 316-978-3922
>>> rodney.bates at wichita.edu
>>>
>>




More information about the M3devel mailing list