aboutsummaryrefslogtreecommitdiff
path: root/win32/lib
diff options
context:
space:
mode:
authorgrischka <grischka>2013-08-28 22:55:05 +0200
committergrischka <grischka>2013-08-28 22:55:05 +0200
commit73faaea227a53e365dd75f1dba7a5071c7b5e541 (patch)
treeb7ff7cfd171d27d24ec4ceb4df8cf98f3341fd82 /win32/lib
parent69c2e7f96c95ba088657ce8bb9754c12c3e89397 (diff)
downloadtinycc-73faaea227a53e365dd75f1dba7a5071c7b5e541.tar.gz
tinycc-73faaea227a53e365dd75f1dba7a5071c7b5e541.tar.bz2
i386-gen: preserve fp control word in gen_cvt_ftoi
- Use runtime function for conversion - Also initialize fp with tcc -run on windows This fixes a bug where double x = 1.0; double y = 1.0000000000000001; double z = x < y ? 0 : sqrt (x*x - y*y); caused a bad sqrt because rounding precision for the x < y comparison was different to the one used within the sqrt function. This also fixes a bug where printf("%d, %d", (int)pow(10, 2), (int)pow(10, 2)); would print 100, 99 Unrelated: win32: document relative include & lib lookup win32: normalize_slashes: do not mirror silly gcc behavior This reverts part of commit 8a81f9e1036637e21a47e14fb56bf64133546890 winapi: add missing WINAPI decl. for some functions
Diffstat (limited to 'win32/lib')
-rw-r--r--win32/lib/crt1.c6
-rw-r--r--win32/lib/wincrt1.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/win32/lib/crt1.c b/win32/lib/crt1.c
index 3e1d17f..cde3910 100644
--- a/win32/lib/crt1.c
+++ b/win32/lib/crt1.c
@@ -31,4 +31,10 @@ int _start(void)
exit(ret);
}
+int _runmain(int argc, char **argv)
+{
+ _controlfp(0x10000, 0x30000);
+ return main(argc, argv, NULL);
+}
+
// =============================================
diff --git a/win32/lib/wincrt1.c b/win32/lib/wincrt1.c
index 77e74b8..663fd33 100644
--- a/win32/lib/wincrt1.c
+++ b/win32/lib/wincrt1.c
@@ -59,6 +59,6 @@ int _runwinmain(int argc, char **argv)
szCmd = "";
else if (szCmd > p && szCmd[-1] == '\"')
--szCmd;
+ _controlfp(0x10000, 0x30000);
return WinMain(GetModuleHandle(NULL), NULL, szCmd, SW_SHOWDEFAULT);
}
-