authorgravatar for johnnymarler@gmail.comJonathan Marler <johnnymarler@gmail.com> 2017-09-13 21:59:09-06:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-13 23:59:09-04:00
logbb44e4b479c89f029fef44aac11a8202a457c1b2
tree9c49ebb12870d070996d1909c4c2c8af131a4927
parentd9eabde319bc035f710b106808022e9b5872f728

Fixed a couple compilation errors for MSVC 64-bit (#475)


2 files changed, 20 insertions(+), 16 deletions(-)

src/quadmath.hpp+1-1
......@@ -32,7 +32,7 @@ static inline __float128 strtoflt128(const char *s, char **sp) {
3232
3333static inline int quadmath_snprintf(char *s, size_t size, const char *format, ...) {
3434 va_list args;
35 va_start(format, args);
35 va_start(args, format);
3636 int result = vsnprintf(s, size, format, args);
3737 va_end(args);
3838 return result;
src/util.hpp+19-15
......@@ -24,27 +24,12 @@
2424#define ATTRIBUTE_RETURNS_NOALIAS __declspec(restrict)
2525#define ATTRIBUTE_NORETURN __declspec(noreturn)
2626
27static inline int clzll(unsigned long long mask) {
28 unsigned long lz;
29#if defined(_WIN64)
30 if (_BitScanReverse64(&lz, mask))
31 return static_cast<int>(63-lz);
32 zig_unreachable();
33#else
34 if (_BitScanReverse(&lz, mask >> 32))
35 lz += 32;
36 else
37 _BitScanReverse(&lz, mask & 0xffffffff);
38 return 63 - lz;
39#endif
40}
4127#else
4228
4329#define ATTRIBUTE_COLD __attribute__((cold))
4430#define ATTRIBUTE_PRINTF(a, b) __attribute__((format(printf, a, b)))
4531#define ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))
4632#define ATTRIBUTE_NORETURN __attribute__((noreturn))
47#define clzll(x) __builtin_clzll(x)
4833
4934#endif
5035
......@@ -61,6 +46,25 @@ static inline void zig_unreachable(void) {
6146 zig_panic("unreachable");
6247}
6348
49#if defined(_MSC_VER)
50static inline int clzll(unsigned long long mask) {
51 unsigned long lz;
52#if defined(_WIN64)
53 if (_BitScanReverse64(&lz, mask))
54 return static_cast<int>(63 - lz);
55 zig_unreachable();
56#else
57 if (_BitScanReverse(&lz, mask >> 32))
58 lz += 32;
59 else
60 _BitScanReverse(&lz, mask & 0xffffffff);
61 return 63 - lz;
62#endif
63}
64#else
65#define clzll(x) __builtin_clzll(x)
66#endif
67
6468template<typename T>
6569ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate_nonzero(size_t count) {
6670 T *ptr = reinterpret_cast<T*>(malloc(count * sizeof(T)));