[fpc-pascal] issue when enabling -O2

Matias Vara matiasevara at gmail.com
Wed Jan 10 18:00:15 CET 2018


BTW, this only applies to inline assembler functions rigth? In the case of
normal procedures that contains a block asm end; there is no problem, Am I
right?

Matias

2018-01-10 17:51 GMT+01:00 Matias Vara <matiasevara at gmail.com>:

> Thank you very much Karol, I completly missed this point during the
> development of my kernel (Or maybe I had in mind sometime ago but I forgot
> it)
> It was only when I decided to play with -02 that all these issues arrised.
>
> Matias
>
> 2018-01-10 17:34 GMT+01:00 Karoly Balogh (Charlie/SGR) <
> charlie at scenergy.dfmk.hu>:
>
>> Hi,
>>
>> On Wed, 10 Jan 2018, Matias Vara wrote:
>>
>> > Hi Karol and thanks you very much! I got confused with the function
>> > names, I feel very sorry.As I said in my previous email, I fixed by
>> > rewriting the assembler function. However, I don't why it worked.
>>
>> By accident. Simply the register/stack/memory layout being different upon
>> entry, and it worked by pure luck.
>>
>> > So I understand you correctly, if I use assembler in my procedures there
>> > could be a risk that I trash a variable that the compiler is using.
>>
>> Yes. All operating systems and CPU architectures define a so called ABI or
>> calling convention, which functions must respect. This details which
>> registers are the parameters to be passed on, and which registers are free
>> to destroy in a function and which ones *MUST* be saved/preserved (usually
>> on the stack). There's no way around this. The compiler will expect that
>> your assembly subfunctions play by the rules.
>>
>> See here, for example, for x86:
>> https://en.wikipedia.org/wiki/X86_calling_conventions
>>
>> > Is  the compiler warning me about this?
>>
>> No. Assembly is quite a minefield in this regard. If you use assembler,
>> the compiler assumes you know what you're doing, and doesn't analyze the
>> assembler function. You have to respect the ABI of your CPU *AND* target
>> platform by hand, and save the nonvolatile registers.
>>
>> (This is BTW, not Free Pascal specific. Delphi does the same, or more or
>> less any other language which supports inline assembly.)
>>
>> Charlie
>>
>> _______________________________________________
>> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
>> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20180110/52c89166/attachment.html>


More information about the fpc-pascal mailing list