HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
i8x16_x64v2.hpp
1// Copyright Take Vos 2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include <array>
8#include <emmintrin.h>
9#include <smmintrin.h>
10#include <xmmintrin.h>
11#include <pmmintrin.h>
12#include <immintrin.h>
13
14namespace tt {
15
16using i8x16_raw = std::array<int8_t, 16>;
17
18[[nodiscard]] inline i8x16_raw to_i8x16_raw(__m128i const &rhs) noexcept
19{
20 i8x16_raw r;
21 _mm_storeu_si128(reinterpret_cast<__m128i *>(r.data()), rhs);
22 return r;
23}
24
25[[nodiscard]] inline __m128i to_m128i(i8x16_raw const &rhs) noexcept
26{
27 return _mm_loadu_si128(reinterpret_cast<__m128i const *>(rhs.data()));
28}
29
32[[nodiscard]] inline i8x16_raw i8x16_x64v2_undefined() noexcept
33{
34 return to_i8x16_raw(_mm_undefined_si128());
35}
36
39[[nodiscard]] inline i8x16_raw i8x16_x64v2_or(i8x16_raw const &lhs, i8x16_raw const &rhs) noexcept
40{
41 return to_i8x16_raw(_mm_or_si128(to_m128i(lhs), to_m128i(rhs)));
42}
43
44} // namespace tt