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) {...@@ -32,7 +32,7 @@ static inline __float128 strtoflt128(const char *s, char **sp) {
3232
33static inline int quadmath_snprintf(char *s, size_t size, const char *format, ...) {33static inline int quadmath_snprintf(char *s, size_t size, const char *format, ...) {
34 va_list args;34 va_list args;
35 va_start(format, args);35 va_start(args, format);
36 int result = vsnprintf(s, size, format, args);36 int result = vsnprintf(s, size, format, args);
37 va_end(args);37 va_end(args);
38 return result;38 return result;
src/util.hpp+19-15
...@@ -24,27 +24,12 @@...@@ -24,27 +24,12 @@
24#define ATTRIBUTE_RETURNS_NOALIAS __declspec(restrict)24#define ATTRIBUTE_RETURNS_NOALIAS __declspec(restrict)
25#define ATTRIBUTE_NORETURN __declspec(noreturn)25#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}
41#else27#else
4228
43#define ATTRIBUTE_COLD __attribute__((cold))29#define ATTRIBUTE_COLD __attribute__((cold))
44#define ATTRIBUTE_PRINTF(a, b) __attribute__((format(printf, a, b)))30#define ATTRIBUTE_PRINTF(a, b) __attribute__((format(printf, a, b)))
45#define ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))31#define ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))
46#define ATTRIBUTE_NORETURN __attribute__((noreturn))32#define ATTRIBUTE_NORETURN __attribute__((noreturn))
47#define clzll(x) __builtin_clzll(x)
4833
49#endif34#endif
5035
...@@ -61,6 +46,25 @@ static inline void zig_unreachable(void) {...@@ -61,6 +46,25 @@ static inline void zig_unreachable(void) {
61 zig_panic("unreachable");46 zig_panic("unreachable");
62}47}
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
64template<typename T>68template<typename T>
65ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate_nonzero(size_t count) {69ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate_nonzero(size_t count) {
66 T *ptr = reinterpret_cast<T*>(malloc(count * sizeof(T)));70 T *ptr = reinterpret_cast<T*>(malloc(count * sizeof(T)));