Trying again... (#235)

This commit is contained in:
Daniel Lemire
2019-07-29 13:55:13 -04:00
committed by GitHub
parent c328afee57
commit 771e9cd68a
3 changed files with 20 additions and 20 deletions
@@ -24,46 +24,46 @@ really_inline void flatten_bits(uint32_t *base_ptr, uint32_t &base,
// Unfortunately, in other cases,
// it helps tremendously.
if(bits == 0) return;
uint32_t cnt = _popcnt64(bits);
uint32_t cnt = _mm_popcnt_u64(bits);
uint32_t next_base = base + cnt;
idx -= 64;
base_ptr += base;
{
base_ptr[0] = idx + __tzcnt_u64(bits);
base_ptr[0] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[1] = idx + __tzcnt_u64(bits);
base_ptr[1] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[2] = idx + __tzcnt_u64(bits);
base_ptr[2] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[3] = idx + __tzcnt_u64(bits);
base_ptr[3] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[4] = idx + __tzcnt_u64(bits);
base_ptr[4] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[5] = idx + __tzcnt_u64(bits);
base_ptr[5] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[6] = idx + __tzcnt_u64(bits);
base_ptr[6] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[7] = idx + __tzcnt_u64(bits);
base_ptr[7] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr += 8;
}
// We hope that the next branch is easily predicted.
if (cnt > 8) {
base_ptr[0] = idx + __tzcnt_u64(bits);
base_ptr[0] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[1] = idx + __tzcnt_u64(bits);
base_ptr[1] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[2] = idx + __tzcnt_u64(bits);
base_ptr[2] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[3] = idx + __tzcnt_u64(bits);
base_ptr[3] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[4] = idx + __tzcnt_u64(bits);
base_ptr[4] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[5] = idx + __tzcnt_u64(bits);
base_ptr[5] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[6] = idx + __tzcnt_u64(bits);
base_ptr[6] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr[7] = idx + __tzcnt_u64(bits);
base_ptr[7] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr += 8;
}
@@ -71,7 +71,7 @@ really_inline void flatten_bits(uint32_t *base_ptr, uint32_t &base,
// since it means having one structural or pseudo-structral element
// every 4 characters (possible with inputs like "","","",...).
do {
base_ptr[0] = idx + __tzcnt_u64(bits);
base_ptr[0] = idx + _tzcnt_u64(bits);
bits = _blsr_u64(bits);
base_ptr++;
} while(bits != 0);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "simdjson/stage1_find_marks.h"
#include "simdjson/stage1_find_marks_macros.h"
#include "simdjson/stage1_find_marks_flatten.h"
#include "simdjson/stage1_find_marks_flatten_haswell.h"
#include "simdjson/simdutf8check_haswell.h"
#ifdef IS_X86_64
+1 -1
View File
@@ -9,7 +9,7 @@ TARGET_HASWELL
namespace simdjson {
template<>
int find_structural_bits<architecture::haswell>(const uint8_t *buf, size_t len, ParsedJson &pj) {
FIND_STRUCTURAL_BITS(architecture::haswell, buf, len, pj, simdjson::flatten_bits);
FIND_STRUCTURAL_BITS(architecture::haswell, buf, len, pj, simdjson::haswell::flatten_bits);
}
} // simdjson
UNTARGET_REGION