Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Fastcall and inline functions optimization bug in VC++?

Author: Bo Persson

Date: 09:56:55 01/14/02

Go up one level in this thread


On January 14, 2002 at 04:39:15, Marcus Heidkamp wrote:

>To some Visual C++ 6 experts:
>
>I tried to write a function that used the __fastcall calling convention so that
>function arguments will be provided in edx and ecx registers rather than pushing
>those onto the stack. Further, I wanted that function to be inlined. So far so
>good.
>But as I rewrote the function body in inline assembler, the compiler did not
>provide the function parameters anymore! VC++ thought, the arguments were not
>referenced in the function. Because they should already be in edx/ecx there is
>no need to explicitly load them from the parameter list into a register using
>assembler. So the compiler simply "optimized" the code by not initializing the
>registers with the appropriate values when calling the function.
>
>The only workarounds I found so far are the following:
>1) Don't do __fastcall.
>2) Don't do inline assembler
>3) Turn off global optimization for that function.
>But that is not what I want.
>
>Has anyone experienced the same, and is there a good solution for this? E.g. can
>I tell the compiler somehow, that those parameters are not explicitly, but
>implicitly used?
>
>Thanks in advance.
>
>Marcus

I have tried this too, but not found any good way of doing it. I ended up with
option 1).

BTW, have you noticed that using inline assembly also interferes with the
compiler's optimizations for any C code in the same function? Any gain by using
assembly might be lost in other code being worse...

Bo Persson
bop2@telia.com



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.