Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
serge-sans-paille committed Dec 6, 2023
1 parent 3866662 commit 6aa4137
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions include/xsimd/arch/xsimd_wasm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,32 @@ namespace xsimd
0xFFFFFF00,
0xFFFFFFFF,
};
alignas(A::alignment()) static const uint32_t lut16[][4] = {
{ 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
{ 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000 },
{ 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000 },
{ 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000 },
{ 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000 },
{ 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0x00000000 },
{ 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000 },
{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000 },
{ 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF },
{ 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF },
{ 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF },
{ 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF },
{ 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF },
{ 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF },
{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF },
};
alignas(A::alignment()) static const uint64_t lut8[][4] = {
{ 0x0000000000000000ul, 0x0000000000000000ul },
{ 0xFFFFFFFFFFFFFFFFul, 0x0000000000000000ul },
{ 0x0000000000000000ul, 0xFFFFFFFFFFFFFFFFul },
{ 0xFFFFFFFFFFFFFFFFul, 0xFFFFFFFFFFFFFFFFul },
};
assert(!(mask & ~0x3ul) && "inbound mask");
return wasm_v128_load((const v128_t*)lut[mask]);
XSIMD_IF_CONSTEXPR(sizeof(T) == 1)
{
assert(!(mask & ~0xFFFF) && "inbound mask");
Expand All @@ -591,11 +617,13 @@ namespace xsimd
}
else XSIMD_IF_CONSTEXPR(sizeof(T) == 4)
{
return batch_bool_cast(from_mask(batch_bool<float, A> {}, mask, wasm {}), batch_bool<T, A>{}, wasm{});
assert(!(mask & ~0xFul) && "inbound mask");
return wasm_v128_load((const v128_t*)lut16[mask]);
}
else XSIMD_IF_CONSTEXPR(sizeof(T) == 8)
{
return batch_bool_cast(from_mask(batch_bool<double, A> {}, mask, wasm {}), batch_bool<T, A>{}, wasm{});
assert(!(mask & ~0x3ul) && "inbound mask");
return wasm_v128_load((const v128_t*)lut8[mask]);
}
}

Expand Down

0 comments on commit 6aa4137

Please sign in to comment.