summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2019-02-23 13:53:12 +0800
committerJohn Hodge <tpg@mutabah.net>2019-02-23 13:53:12 +0800
commit9b706e3beaa59db561008fd5ad13f2674da12861 (patch)
tree827a6c6a8983673e47d7f19690f9000417b3749a /src/trans/codegen_c.cpp
parent0158e0e303cf2b9ba38a8e482df9bacb4fd4c779 (diff)
downloadmrust-9b706e3beaa59db561008fd5ad13f2674da12861.tar.gz
Codegen C - Fix msvc clz/ctz
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 84a538d5..56b03f9c 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -305,7 +305,7 @@ namespace {
// 64-bit bit ops (gcc intrinsics)
m_of
<< "static inline uint64_t __builtin_clz64(uint64_t v) {\n"
- << "\treturn (v >> 32 != 0 ? __builtin_clz(v>>32) : 32 + __builtin_clz(v));\n"
+ << "\treturn ( (v >> 32) != 0 ? __builtin_clz(v>>32) : 32 + __builtin_clz(v));\n"
<< "}\n"
<< "static inline uint64_t __builtin_ctz64(uint64_t v) {\n"
<< "\treturn ((v&0xFFFFFFFF) == 0 ? __builtin_ctz(v>>32) + 32 : __builtin_ctz(v));\n"
@@ -317,10 +317,10 @@ namespace {
<< "static inline uint64_t __builtin_popcount(uint64_t v) {\n"
<< "\treturn (v >> 32 != 0 ? __popcnt64(v>>32) : 32 + __popcnt64(v));\n"
<< "}\n"
- << "static inline int __builtin_ctz(uint32_t v) { int rv; _BitScanReverse(&rv, v); return rv; }\n"
- << "static inline int __builtin_clz(uint32_t v) { int rv; _BitScanForward(&rv, v); return rv; }\n"
+ << "static inline int __builtin_ctz(uint32_t v) { int rv; _BitScanForward(&rv, v); return rv; }\n"
+ << "static inline int __builtin_clz(uint32_t v) { int rv; _BitScanReverse(&rv, v); return 31 - rv; }\n"
<< "static inline uint64_t __builtin_clz64(uint64_t v) {\n"
- << "\treturn (v >> 32 != 0 ? __builtin_clz(v>>32) : 32 + __builtin_clz(v));\n"
+ << "\treturn ( (v >> 32) != 0 ? __builtin_clz(v>>32) : 32 + __builtin_clz(v) );\n"
<< "}\n"
<< "static inline uint64_t __builtin_ctz64(uint64_t v) {\n"
<< "\treturn ((v&0xFFFFFFFF) == 0 ? __builtin_ctz(v>>32) + 32 : __builtin_ctz(v));\n"
@@ -1935,7 +1935,11 @@ namespace {
(String,
m_of << "{ ";
this->print_escaped_string(e);
- m_of << ", " << e.size() << "}";
+ // TODO: Better type checking?
+ if( !ty.m_data.is_Array() ) {
+ m_of << ", " << e.size();
+ }
+ m_of << "}";
)
)
}