[fpc-devel] AVR calling convention for shortstring result type

Florian Klämpfl florian at freepascal.org
Mon Dec 11 22:44:29 CET 2017


Am 11.12.2017 um 21:58 schrieb Christo:
> I'm trying to write an assembler function to read a string from program memory using LPM and
> return a shortstring result.  Consider the following prototype function:
> 
> function readProgmemStr(constref s: shortstring): shortstring;
> 
> It appears from the generated code as if the function result location is assigned before the
> function is called, with the reference to the function result passed as first parameter (in
> R24:R25) and the reference to s passed as the second parameter (in R22:R23). Is this indeed the
> current parameter handling for shortstring function result type?

Yes.

> 
> If so it probably warrants a mention on the AVR wiki page.  Are there any other data types that
> deviates from the GCC AVR calling convention in this way?

Where do the GCC AVR calling say something about how to pass shortstrings? FPC always use a first
"hidden" parameter to pass e.g. pointers to storage space for data types not being returned in
registers.




More information about the fpc-devel mailing list