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
30static inline __m128i mm_set_epu32(uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4)
31{
32 return _mm_set_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val1), WINPR_CXX_COMPAT_CAST(int32_t, val2),
33 WINPR_CXX_COMPAT_CAST(int32_t, val3),
34 WINPR_CXX_COMPAT_CAST(int32_t, val4));
35}
36
37static inline __m128i mm_set_epu8(uint8_t val1, uint8_t val2, uint8_t val3, uint8_t val4,
38 uint8_t val5, uint8_t val6, uint8_t val7, uint8_t val8,
39 uint8_t val9, uint8_t val10, uint8_t val11, uint8_t val12,
40 uint8_t val13, uint8_t val14, uint8_t val15, uint8_t val16)
41{
42 return _mm_set_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val1), WINPR_CXX_COMPAT_CAST(int8_t, val2),
43 WINPR_CXX_COMPAT_CAST(int8_t, val3), WINPR_CXX_COMPAT_CAST(int8_t, val4),
44 WINPR_CXX_COMPAT_CAST(int8_t, val5), WINPR_CXX_COMPAT_CAST(int8_t, val6),
45 WINPR_CXX_COMPAT_CAST(int8_t, val7), WINPR_CXX_COMPAT_CAST(int8_t, val8),
46 WINPR_CXX_COMPAT_CAST(int8_t, val9), WINPR_CXX_COMPAT_CAST(int8_t, val10),
47 WINPR_CXX_COMPAT_CAST(int8_t, val11), WINPR_CXX_COMPAT_CAST(int8_t, val12),
48 WINPR_CXX_COMPAT_CAST(int8_t, val13), WINPR_CXX_COMPAT_CAST(int8_t, val14),
49 WINPR_CXX_COMPAT_CAST(int8_t, val15), WINPR_CXX_COMPAT_CAST(int8_t, val16));
50}
51
52static inline __m128i mm_set1_epu32(uint32_t val)
53{
54 return _mm_set1_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val));
55}
56
57static inline __m128i mm_set1_epu8(uint8_t val)
58{
59 return _mm_set1_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val));
60}
61
62static inline __m128i LOAD_SI128(const void* ptr)
63{
64 const __m128i* mptr = WINPR_CXX_COMPAT_CAST(const __m128i*, ptr);
65 return _mm_lddqu_si128(mptr);
66}
67
68static inline void STORE_SI128(void* ptr, __m128i val)
69{
70 __m128i* mptr = WINPR_CXX_COMPAT_CAST(__m128i*, ptr);
71 _mm_storeu_si128(mptr, val);
72}
73
74#endif