Skip to content

Commit b23a229

Browse files
committed
precompute dl with avx
1 parent 961f428 commit b23a229

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

test/experimental/jumpdest_analysis.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,8 @@ bitset32 build_jumpdest_map_simd3(const uint8_t* code, size_t code_size)
583583

584584
bitset32 build_jumpdest_map_simd4(const uint8_t* code, size_t code_size)
585585
{
586+
alignas(32) uint8_t tmp[32];
587+
586588
static constexpr auto v_size = 32;
587589

588590
bitset32 jumpdest_map(code_size);
@@ -603,15 +605,17 @@ bitset32 build_jumpdest_map_simd4(const uint8_t* code, size_t code_size)
603605
const auto v_is_push = _mm256_cmpgt_epi8(v_fragment, v_push0_op);
604606
auto m_is_push = (unsigned)_mm256_movemask_epi8(v_is_push);
605607

608+
const auto v_dl = _mm256_sub_epi8(v_fragment, v_push0_op);
609+
_mm256_store_si256((__m256i*)tmp, v_dl);
610+
606611
m_is_push &= ~clear_next;
607612
uint64_t datamask = clear_next;
608613

609614
// #pragma unroll 1
610615
while (m_is_push != 0)
611616
{
612617
const auto p = __builtin_ctz(m_is_push);
613-
const auto op = ptr[p];
614-
const auto dl = op - OP_PUSH0;
618+
const auto dl = tmp[p];
615619
const auto dm = ((uint64_t{2} << dl) - 1) << p;
616620
datamask |= dm;
617621
m_is_push &= ~static_cast<unsigned>(dm);

0 commit comments

Comments
 (0)