[M3devel] bind_segment vs. declare_segment?

Tony Hosking hosking at cs.purdue.edu
Tue Nov 23 03:59:29 CET 2010


On Nov 22, 2010, at 8:51 PM, Jay K wrote:

> 
> Are you saying, like, the frontend has n passes, and one of them is codegen, and both of these actions happen within codegen.
> And, it could be "fixed" by adding an additional pass?

No, it wouldn't make sense to do that.  Better to defer the type until it is *known*.

> And, you didn't say this, we very well could/should, if all the backends needed it?
>  Or if it was cheap enough?
> 
> 
> 
> You know, effectively, I've added the extra pass anyway, in the backend that "needs" it.
>  Or at least in the backend that could easily benefit from it.
>  But actually there's probably another way.
>  I could probably still do it one pass, just be sure to remember the type in declare and fill it in more in bind (instead of replacing it, after it has been used).

Yes, I think that would be better.

> I think I'll try that. I'm not going to throw out the multi-pass ability, and I think it will have other better motivated uses, but this one might not really be needed.
>   (Though it might yet be the multi-pass isn't needed. I thought I saw types referenced before defined. I'm pretty sure. It could be that the frontend could address that easily, or that it doesn't actually happen. Anyway, we'll see.

It's inevitable that we have types referenced before defined because of recursion in the type definitions.

> 
> 
> 
> - Jay
> 
> 
> 
> ----------------------------------------
>> From: hosking at cs.purdue.edu
>> Date: Mon, 22 Nov 2010 20:17:54 -0500
>> To: jay.krell at cornell.edu
>> CC: m3devel at elegosoft.com
>> Subject: Re: [M3devel] bind_segment vs. declare_segment?
>> 
>> It doesn't do multiple passes at code generation time. It simply declares the segment at beginning of code generation, and once it is done binds the size of the segment.
>> 
>> Antony Hosking | Associate Professor | Computer Science | Purdue University
>> 305 N. University Street | West Lafayette | IN 47907 | USA
>> Office +1 765 494 6001 | Mobile +1 765 427 5484
>> 
>> 
>> 
>> 
>> On Nov 22, 2010, at 7:23 PM, Jay K wrote:
>> 
>>> 
>>> Tony, What surprises me a bit here is that the frontend already makes multiple passes over everything.
>>> I think. Right?
>>> So here it could do that just as well. Right?
>>> 
>>> - Jay
>>> 
>>> 
>>> ________________________________
>>>> From: hosking at cs.purdue.edu
>>>> Date: Fri, 19 Nov 2010 09:43:03 -0500
>>>> To: jay.krell at cornell.edu
>>>> CC: m3devel at elegosoft.com
>>>> Subject: Re: [M3devel] bind_segment vs. declare_segment?
>>>> 
>>>> declare_segment doesn't have the size because it is unknown at the time
>>>> of the declaration, which comes before the module is compiled.
>>>> Only as the module is compiled does the size become known, with
>>>> Bind_segment emitted at the end.
>>>> 
>>>> 
>>>> On Nov 19, 2010, at 5:01 AM, Jay K wrote:
>>>> 
>>>> I'm not looking at m3front. I should.
>>>> 
>>>> Why does declare_segment not have the size?
>>>> 
>>>> I'm going to just live with whatever the frontend does for now.
>>>> Make an extra pass to find the bind_segments, so that when
>>>> I do things "for real", declare_segment can set the size correctly.
>>>> 
>>>> Later I'll do better -- making the segment contain fields.
>>>> So that globals become debuggable, in stock gdb (as big records).
>>>> 
>>>> But first I want configure enable-checking to work.
>>>> (with one exception, the static link stuff..)
>>>> 
>>>> - Jay
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>> 		 	   		  




More information about the M3devel mailing list