FreeRDP
Loading...
Searching...
No Matches
prim_avxsse.h
1
20#pragma once
21
22#include <winpr/cast.h>
23
24#include "../../core/simd.h"
25
26#if defined(SSE_AVX_INTRINSICS_ENABLED)
27#include <emmintrin.h>
28#include <pmmintrin.h>
29
30WINPR_ATTR_NODISCARD
31static inline __m128i mm_set_epu32(uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4)
32{
33 return _mm_set_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val1), WINPR_CXX_COMPAT_CAST(int32_t, val2),
34 WINPR_CXX_COMPAT_CAST(int32_t, val3),
35 WINPR_CXX_COMPAT_CAST(int32_t, val4));
36}
37
38WINPR_ATTR_NODISCARD
39static inline __m128i mm_set_epu8(uint8_t val1, uint8_t val2, uint8_t val3, uint8_t val4,
40 uint8_t val5, uint8_t val6, uint8_t val7, uint8_t val8,
41 uint8_t val9, uint8_t val10, uint8_t val11, uint8_t val12,
42 uint8_t val13, uint8_t val14, uint8_t val15, uint8_t val16)
43{
44 return _mm_set_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val1), WINPR_CXX_COMPAT_CAST(int8_t, val2),
45 WINPR_CXX_COMPAT_CAST(int8_t, val3), WINPR_CXX_COMPAT_CAST(int8_t, val4),
46 WINPR_CXX_COMPAT_CAST(int8_t, val5), WINPR_CXX_COMPAT_CAST(int8_t, val6),
47 WINPR_CXX_COMPAT_CAST(int8_t, val7), WINPR_CXX_COMPAT_CAST(int8_t, val8),
48 WINPR_CXX_COMPAT_CAST(int8_t, val9), WINPR_CXX_COMPAT_CAST(int8_t, val10),
49 WINPR_CXX_COMPAT_CAST(int8_t, val11), WINPR_CXX_COMPAT_CAST(int8_t, val12),
50 WINPR_CXX_COMPAT_CAST(int8_t, val13), WINPR_CXX_COMPAT_CAST(int8_t, val14),
51 WINPR_CXX_COMPAT_CAST(int8_t, val15), WINPR_CXX_COMPAT_CAST(int8_t, val16));
52}
53
54WINPR_ATTR_NODISCARD
55static inline __m128i mm_set1_epu32(uint32_t val)
56{
57 return _mm_set1_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val));
58}
59
60WINPR_ATTR_NODISCARD
61static inline __m128i mm_set1_epu8(uint8_t val)
62{
63 return _mm_set1_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val));
64}
65
66WINPR_ATTR_NODISCARD
67static inline __m128i LOAD_SI128(const void* ptr)
68{
69 const __m128i* mptr = WINPR_CXX_COMPAT_CAST(const __m128i*, ptr);
70 return _mm_lddqu_si128(mptr);
71}
72
73static inline void STORE_SI128(void* ptr, __m128i val)
74{
75 __m128i* mptr = WINPR_CXX_COMPAT_CAST(__m128i*, ptr);
76 _mm_storeu_si128(mptr, val);
77}
78
79#endif