aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJames Lyon <jamesly0n@hotmail.com>2013-04-24 02:19:15 +0100
committerJames Lyon <jamesly0n@hotmail.com>2013-04-24 02:19:15 +0100
commit5c35ba66c5ade4713bbd9c005e66889f6d7db293 (patch)
tree1d513aae71d8264643f8b1d7b5c31472653c0c2e /include
parent8a81f9e1036637e21a47e14fb56bf64133546890 (diff)
downloadtinycc-5c35ba66c5ade4713bbd9c005e66889f6d7db293.tar.gz
tinycc-5c35ba66c5ade4713bbd9c005e66889f6d7db293.tar.bz2
64-bit tests now pass (well, nearly).
tcctest1-3 fail, but this appears to be due to bugs in GCC rather than TCC (from manual inspection of the output).
Diffstat (limited to 'include')
-rw-r--r--include/stdarg.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/include/stdarg.h b/include/stdarg.h
index 666adf7..154030f 100644
--- a/include/stdarg.h
+++ b/include/stdarg.h
@@ -19,9 +19,9 @@ void __va_end(va_list ap);
#else /* _WIN64 */
typedef char *va_list;
-#define va_start(ap,last) ap = ((char *)&(last)) + ((sizeof(last)+7)&~7)
-#define va_arg(ap,type) (ap += (sizeof(type)+7)&~7, *(type *)(ap - ((sizeof(type)+7)&~7)))
-#define va_copy(dest, src) (dest) = (src)
+#define va_start(ap,last) __builtin_va_start(ap,last)
+#define va_arg(ap,type) (ap += 8, sizeof(type)<=8 ? *(type*)ap : **(type**)ap)
+#define va_copy(dest, src) ((dest) = (src))
#define va_end(ap)
#endif