difforig Win32-API-0.58 diff -u Win32-API-0.58/API.xs.orig --- Win32-API-0.58/API.xs.orig 2008-10-16 21:33:11.000000000 +0200 +++ Win32-API-0.58/API.xs 2009-06-28 14:12:33.015625000 +0200 @@ -609,15 +609,19 @@ #if (defined(_MSC_VER) || defined(__BORLANDC__)) /* _asm { - call dword ptr [ApiFunctionFloat] - fstp qword ptr [fReturn] + call dword ptr [ApiFunctionDouble] + fstp qword ptr [dReturn] } */ - fReturn = ApiFunctionDouble(); + dReturn = ApiFunctionDouble(); #elif (defined(__GNUC__)) - asm ("call *%0"::"g"(ApiFunctionDouble)); - asm ("fstpl %0"::"g"(fReturn)); - /* XST_mNV(0, (float) fReturn); */ + dReturn = ApiFunctionDouble(); + /* + asm ("call *%0"::"g" (ApiFunctionDouble)); + asm ("fstpl %st(0)"); + asm ("movl %0,(%esp)"); + */ + /* XST_mNV(0, (double) dReturn); */ #endif #ifdef WIN32_API_DEBUG printf("(XS)Win32::API::Call: ApiFunctionDouble returned %f\n", dReturn); @@ -741,8 +745,12 @@ } /* XSRETURN_NV(dReturn); */ #elif (defined(__GNUC__)) - asm ("call *%0"::"g"(ApiFunctionDouble)); - asm ("fstpl %0"::"g"(dReturn)); + dReturn = ApiFunctionDouble(); + /* + asm ("call *%0"::"g" (ApiFunctionDouble)); + asm ("fstpl %st(0)"); + asm ("movl %0,(%esp)"); + */ /* XST_mNV(0, dReturn); */ #endif break;