<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Dec 31, 2020 at 9:42 PM Jonas Maebe via fpc-devel <<a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 31/12/2020 20:32, Christo Crause via fpc-devel wrote:<br>
<br>
> For example I do not know how to generate the equivalent to the<br>
> following user assembler code:<br>
>   lds r0, EECR<br>
> where EECR is defined as follows in a different unit:<br>
> var EECR: byte absolute $1F;<br>
> <br>
> The following line illustrates what I'm attempting to do:<br>
>   list.concat(taicpu.op_reg_ref(A_LDS,tmpreg,tmpref));<br>
> where tempref should reference the EECR symbol in another unit.<br>
> <br>
> How do I build such a reference in the code generator so that the<br>
> reference can resolve to the appropriate address?<br>
<br>
While possible, the code generator is the wrong abstraction level for<br>
this. Can't you generate a load node for that variable instead? What<br>
triggers this code generation?<br></blockquote><div> </div><div>Jonas,</div><div><br></div><div>Thank you for your help.  I'm trying to implement compiler support for different address spaces (flash and eeprom memory at the moment), mostly relevant to embedded and freertos type targets.  My current approach is to check for specific section names of references in the code generator and then generate the appropriate access code in tavr.g_concatcopy tavr.a_load_ref_reg and so forth.  Example code I want to support:</div><div><br></div><div>program store_restarts;</div><div>var</div><div>  numrestarts: byte; section '.eeprom';<br></div><div></div><div>begin</div><div>  numrestarts := 42;</div><div>end;</div><div><br></div><div>Reading from section .progmem closely follows the semantics of accessing general RAM so it was relatively easy to extend the existing code generator for that.  EEPROM access requires more code (not a problem) but also controller specific register addresses (here is my problem,  the information sits in a different unit).  I haven't thought of modifying or creating a the load node since I'm much more familiar with the code generator side of the compiler (but still no expert...).  <br></div><div><br></div><div>Any further hints or examples in the compiler I can study to tackle this via a load node would be appreciated.<br></div><div><br></div><div>Christo<br></div></div></div>