<div dir="auto">Thanks for the information!<div><br><div class="gmail_extra"><br><div class="gmail_quote">On Oct 12, 2017 18:31, "Chris Burrows" <<a href="mailto:chris@cfbsoftware.com">chris@cfbsoftware.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">><br>
> From: Luca Boasso [mailto:<a href="mailto:luke.boasso@gmail.com">luke.boasso@gmail.com</a>]<br>
> Sent: Friday, 13 October 2017 10:06 AM<br>
> To: <a href="mailto:chris@cfbsoftware.com">chris@cfbsoftware.com</a>; ETH Oberon and related systems<br>
> Subject: Re: [Oberon] Dynamic local array implementation<br>
<div class="quoted-text">><br>
><br>
> The Astrobe compiler does use a frame pointer. Given the local<br>
> variable 'a' declared as:<br>
><br>
> VAR<br>
>   a: ARRAY OF INTEGER;<br>
><br>
> The code generated by NEW(a, 10) is as follows:<br>
><br>
>     MOV      r10,10<br>
>     STR      r10,[fp,-8]<br>
>     MOV      r10,r10 lsl 2<br>
>     SUB      sp,sp,r10<br>
>     STR      sp,[fp,-4]<br>
><br>
><br>
> I see, that is similar to what I was expecting.<br>
> If my understanding is correct,  [fp, -8] and [fp, -4] represent an<br>
> array descriptor, where you store the length and address on the stack<br>
> respectively. SP is decremented by length*element size to make space<br>
> for the array.Very neat!<br>
> Is [fp,-4] the beginning or the end of the array "a"?<br>
><br>
<br>
</div>[fp,-4] corresponds to a[0]<br>
<div class="quoted-text"><br>
> I have checked "An Oberon Compiler for the ARM Processor" p. 26 and<br>
> it seems like in that compiler dynamic arrays are allocated on the<br>
> heap:<br>
><br>
<br>
</div>No - global dynamic arrays were allocated on the heap but local dynamic arrays were allocated on the stack. In that compiler a corresponding call was generated to the procedure MAU.AllocH or MAU.AllocS respectively. Astrobe used to do the same but now generates inline code for local dynamic array variables instead.<br>
<div class="quoted-text"><br>
><br>
> Do you know if that system had a garbage collector?<br>
<br>
</div>Apparently not (p. 25 of the same document):<br>
<br>
"It is used for recording the hierarchy of extensions of a type (see below), and contains the necessary meta information about the type that is needed by a garbage collector. The latter information is not generated in this current implementation, with the exception of the record’s size."<br>
<div class="elided-text"><br>
Regards,<br>
Chris Burrows<br>
CFB Software<br>
<a href="http://www.astrobe.com" rel="noreferrer" target="_blank">http://www.astrobe.com</a><br>
<br>
<br>
--<br>
<a href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems<br>
<a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" rel="noreferrer" target="_blank">https://lists.inf.ethz.ch/<wbr>mailman/listinfo/oberon</a><br>
</div></blockquote></div><br></div></div></div>