C/C++ Compiler (cl.hlp) (Table of Contents; Topic list)
Fastcall Calling Convention (/Gr)
                                             Up Contents Index Back
─────C/C++ Compiler─────────────────────────────────────────────────────────
 
     Usually, your program passes parameters to functions on the stack.
     The /Gr option causes your program to pass parameters in registers
     instead. Normally, this calling convention decreases execution
     time, but it gives no advantage if you compile with the Fast
     Compile (/f) option. Therefore, use the /Gr option only for final
     compilations that require the full optimizing capabilities of
     Microsoft C/C++.
 
     Passing parameters in registers is not appropriate for all
     functions. The /Gr option enables register passing for all
     eligible functions, and the __fastcall keyword enables it on a
     function-by-function basis. You cannot use the __fastcall keyword
     with the __pascal, __fortran, or __cdecl keywords.
 
     Because the 80x86 processor has a limited number of registers,
     only the first three parameters are passed in registers; the
     remaining parameters are passed using the FORTRAN/Pascal calling
     convention (see the /Gc option).
 
     NOTES:
 
        ■ The varargs and stdargs macros are incompatible with the
          Fastcall convention.
 
        ■ You can cause individual functions to observe the Fastcall
          conventions by declaring them with the __fastcall keyword.
 
        ■ The Fastcall calling convention requires that you provide
          function prototypes for external functions. Until you provide
          these prototypes, consider compiling without the /Gr option.
          See: Generate Function Prototypes (/Zg)
 
        ■ The Fastcall calling convention is not supported by p-code.
 
        ■ Be careful when using the register calling convention for any
          function written in inline assembly language. Your use of
          registers in assembly language could conflict with the
          compiler's use of registers for storing parameters.
 
     See also: C Calling Convention
               Pascal Calling Convention
                                    -♦-