diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 20:55:56 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 20:55:56 -0800 |
commit | b78563b607f3a851dee9495ad21307b23e2c2666 (patch) | |
tree | 12a4a6740987a7abcbc360976cd5023ccca6d2c2 /src/wasm-interpreter.h | |
parent | 2298da8a685268e0f4bdf6a7a03e47429c39105a (diff) | |
download | binaryen-b78563b607f3a851dee9495ad21307b23e2c2666.tar.gz binaryen-b78563b607f3a851dee9495ad21307b23e2c2666.tar.bz2 binaryen-b78563b607f3a851dee9495ad21307b23e2c2666.zip |
64-bit popcnt
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 2c8a2bacd..0ca4d9674 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -334,20 +334,19 @@ public: } if (value.type == i64) { int64_t v = value.geti64(); + int32_t high = v >> 32, low = v; switch (curr->op) { case Clz: { if (v == 0) return Literal((int64_t)64); - int32_t high = v >> 32, low = v; if (high == 0) return Literal(32+(int64_t)safe_clz(low)); return Literal((int64_t)safe_clz(high)); } case Ctz: { if (v == 0) return Literal((int64_t)64); - int32_t high = v >> 32, low = v; if (low == 0) return Literal(32+(int64_t)safe_ctz(high)); return Literal((int64_t)safe_ctz(low)); } - case Popcnt: return Literal((int64_t)__builtin_popcount(v)); + case Popcnt: return Literal(int64_t(__builtin_popcount(low) + __builtin_popcount(high))); default: abort(); } } |