Fastcall calling convention
Paul Chitescu
paulc at voip.null.ro
Tue Mar 23 04:15:21 CDT 2010
On Tuesday 23 March 2010 10:59:56 am Damjan Jovanovic wrote:
> Hi
>
> Wine doesn't seem to support the fastcall calling convention:
>
> include/winternl.h:
> /* These are implemented as __fastcall, so we can't let Winelib apps
> link with them */
>
> dlls/hal/hal.c:
> #ifdef __i386__
> #define DEFINE_FASTCALL1_ENTRYPOINT( name ) \
> __ASM_STDCALL_FUNC( name, 4, \
> "popl %eax\n\t" \
> "pushl %ecx\n\t" \
> "pushl %eax\n\t" \
> "jmp " __ASM_NAME("__regs_") #name __ASM_STDCALL(4))
>
> GCC seems to support fastcall from version 3.4:
> http://www.ohse.de/uwe/articles/gcc-attributes.html
>
> Should we support it? Its absence makes kernel driver code a lot
> uglier (eg. irp->Tail.Overlay.s.u2.CurrentStackLocation instead of
> IoGetCurrentIrpStackLocation()). We also can't declare fastcall
> functions in header files, so some functions that are actually
> implemented are missing from header files and thus unusable from
> inside Wine.
>
> Thank you
> Damjan Jovanovic
Unfortunately GCC's fastcall is different from the Microsoft's fastcall so
it's not usable in exported functions:
http://gcc.gnu.org/ml/gcc-bugs/2009-08/msg00837.html
More information about the wine-devel
mailing list