Module: wine Branch: master Commit: 14a245690d333ed6ee7837b4d547790d50821c5d URL: http://source.winehq.org/git/wine.git/?a=commit;h=14a245690d333ed6ee7837b4d5...
Author: Stefan Dösinger stefan@codeweavers.com Date: Sat Sep 24 12:45:37 2011 +0200
d3d8: Implement FPUSETUP for msvc.
---
dlls/d3d8/device.c | 5 +++++ dlls/d3d8/tests/device.c | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 51c4ad7..8aeca94 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -3032,6 +3032,11 @@ static void setup_fpu(void) __asm__ volatile ("fnstcw %0" : "=m" (cw)); cw = (cw & ~0xf3f) | 0x3f; __asm__ volatile ("fldcw %0" : : "m" (cw)); +#elif defined(__i386__) && defined(_MSC_VER) + WORD cw; + __asm fnstcw cw; + cw = (cw & ~0xf3f) | 0x3f; + __asm fldcw cw; #else FIXME("FPU setup not implemented for this platform.\n"); #endif diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c index 42726aa..42d4dd0 100644 --- a/dlls/d3d8/tests/device.c +++ b/dlls/d3d8/tests/device.c @@ -2416,8 +2416,13 @@ done: static inline void set_fpu_cw(WORD cw) { #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define D3D8_TEST_SET_FPU_CW 1 __asm__ volatile ("fnclex"); __asm__ volatile ("fldcw %0" : : "m" (cw)); +#elif defined(__i386__) && defined(_MSC_VER) +#define D3D8_TEST_SET_FPU_CW 1 + __asm fnclex; + __asm fldcw cw; #endif }
@@ -2425,14 +2430,18 @@ static inline WORD get_fpu_cw(void) { WORD cw = 0; #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#define D3D8_TEST_GET_FPU_CW 1 __asm__ volatile ("fnstcw %0" : "=m" (cw)); +#elif defined(__i386__) && defined(_MSC_VER) +#define D3D8_TEST_GET_FPU_CW 1 + __asm fnstcw cw; #endif return cw; }
static void test_fpu_setup(void) { -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +#if defined(D3D8_TEST_SET_FPU_CW) && defined(D3D8_TEST_GET_FPU_CW) D3DPRESENT_PARAMETERS present_parameters; IDirect3DDevice8 *device; D3DDISPLAYMODE d3ddm;