Skip to content

Commit a4b8c36

Browse files
authored
Merge pull request #221 from TarasHots/xd_dev_x64
Corrected precision control for x64 architecture on Windows
2 parents dcb8fe8 + 6755560 commit a4b8c36

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/xrCore/_math.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ namespace FPU
7272
XRCORE_API void m24()
7373
{
7474
#if defined(WINDOWS)
75+
#ifndef XR_X64
7576
_controlfp(_PC_24, MCW_PC);
77+
#endif
7678
_controlfp(_RC_CHOP, MCW_RC);
7779
#elif defined(LINUX)
7880
fpu_control_t fpu_cw;
@@ -85,7 +87,9 @@ XRCORE_API void m24()
8587
XRCORE_API void m24r()
8688
{
8789
#if defined(WINDOWS)
90+
#ifndef XR_X64
8891
_controlfp(_PC_24, MCW_PC);
92+
#endif
8993
_controlfp(_RC_NEAR, MCW_RC);
9094
#elif defined(LINUX)
9195
fpu_control_t fpu_cw;
@@ -98,7 +102,9 @@ XRCORE_API void m24r()
98102
XRCORE_API void m53()
99103
{
100104
#if defined(WINDOWS)
105+
#ifndef XR_X64
101106
_controlfp(_PC_53, MCW_PC);
107+
#endif
102108
_controlfp(_RC_CHOP, MCW_RC);
103109
#elif defined(LINUX)
104110
fpu_control_t fpu_cw;
@@ -111,7 +117,9 @@ XRCORE_API void m53()
111117
XRCORE_API void m53r()
112118
{
113119
#if defined(WINDOWS)
120+
#ifndef XR_X64
114121
_controlfp(_PC_53, MCW_PC);
122+
#endif
115123
_controlfp(_RC_NEAR, MCW_RC);
116124
#elif defined(LINUX)
117125
fpu_control_t fpu_cw;
@@ -124,7 +132,9 @@ XRCORE_API void m53r()
124132
XRCORE_API void m64()
125133
{
126134
#if defined(WINDOWS)
135+
#ifndef XR_X64
127136
_controlfp(_PC_64, MCW_PC);
137+
#endif
128138
_controlfp(_RC_CHOP, MCW_RC);
129139
#elif defined(LINUX)
130140
fpu_control_t fpu_cw;
@@ -137,7 +147,9 @@ XRCORE_API void m64()
137147
XRCORE_API void m64r()
138148
{
139149
#if defined(WINDOWS)
150+
#ifndef XR_X64
140151
_controlfp(_PC_64, MCW_PC);
152+
#endif
141153
_controlfp(_RC_NEAR, MCW_RC);
142154
#elif defined(LINUX)
143155
fpu_control_t fpu_cw;
@@ -247,8 +259,10 @@ void Detect()
247259
clk_per_milisec = clk_per_second / 1000;
248260
clk_per_microsec = clk_per_milisec / 1000;
249261

262+
#ifndef XR_X64
250263
_control87(_PC_64, MCW_PC);
251-
// _control87 ( _RC_CHOP, MCW_RC );
264+
#endif
265+
252266
double a, b;
253267
a = 1;
254268
b = double(clk_per_second);

0 commit comments

Comments
 (0)