[M3devel] "C-generating backend progress report, that nobody asked for" :)

Jay jay.krell at cornell.edu
Sun Sep 9 22:05:05 CEST 2012


Alignment: I'd like to understand what the runtime really needs. Can't it produce data structures that contain the addresses of things, no matter where they end up? Or offsets? 



As well, can't we have the frontend be very conservative? Align each basic int & float type to its size, even if not required? Didn't I already do that? E.g. 64 bit ints don't generally need 64bit alignment on 32 bit targets, but I'm ok giving it. Front end can insert padding explicitly. (this area bit me, you may recall, gcc/cygwin was aligning 64bit double float to 64bits, adding in padding where frontend didn't..I had to peel the onion quite a bit to debug that...)


We could also generate compile-time asserts that frontend & backend layouts match. ?


Anyway, yes, gcc and Visual C++ have extensions that inhibit any padding-for-alignment.
If push-comes-to shove, we can use such extensions. gcc extensions are commonly available in other compilers also. Probably in Sun cc & clang for example.


I'm not sure we need this, but it is available. In the shorter term the need is maybe more likely.


(eventually, I still dream of testing on AIX, VMs, Irix, HPUX -- not gcc, & maybe a K&R option. :) )


I also wonder about a hybrid where the frontend computes suggested but not mandatory offsets/layout. Provide integers & symbols, like. So to keep existing backends working more easily. Maybe that is a waste of effort.


Packing: indeed, I would like to eliminate the endian-dependentness in the frontend. And word-size knowledge. (Yes, I know I repeat myself.)


 - Jay (briefly/pocket-sized-computer-aka-phone)

On Sep 9, 2012, at 11:49 AM, Dragiša Durić <dragisha at m3w.org> wrote:

> Can we have network order packing too, while you are lifting level of description?
> 
> 
> On Sep 9, 2012, at 5:05 PM, Antony Hosking wrote:
> 
>> Yes, agreed, these need to be properly typed too.
>> First step will be to lift the M3CG interface.
>> Problem: The compiler needs to control layout so that the run-time system knows where to find things.  This means that we need to assert alignments and layouts produced by the backend are the same as those in the front-end.  LLVM has nice ways to do this.  How will we do it in the C backend?  Does C have sufficient control over alignment?
>> 
>> On Sep 9, 2012, at 10:53 AM, Jay <jay.krell at cornell.edu> wrote:
>> 
>>> Btw, can this include "segment"/globals? Can they each be separate named variables? At least some of them?
>>> 
>>> 
>>>  - Jay (briefly/pocket-sized-computer-aka-phone)
>>> 
>>> On Sep 9, 2012, at 7:48 AM, Antony Hosking <hosking at cs.purdue.edu> wrote:
>>> 
>>>> I’m looking at it...
>>>> 
>>>> First step is to lift slightly the level of M3CG to use properly typed memory access, instead of untyped address + offset.
>>>> 
>>>> On Sep 9, 2012, at 2:32 AM, Dragiša Durić <dragisha at m3w.org> wrote:
>>>> 
>>>>> I hope somebody will take on LLVM :).
>>>>> 
>>>> 
>> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20120909/c0c7675f/attachment-0002.html>


More information about the M3devel mailing list