/src/FreeRDP/libfreerdp/primitives/sse/prim_avxsse.h
Line | Count | Source (jump to first uncovered line) |
1 | | /** |
2 | | * FreeRDP: A Remote Desktop Protocol Implementation |
3 | | * FreeRDP primitives SSE implementation |
4 | | * |
5 | | * Copyright 2025 Armin Novak <armin.novak@thincast.com> |
6 | | * Copyright 2025 Thincast Technologies GmbH |
7 | | * |
8 | | * Licensed under the Apache License, Version 2.0 (the "License"); |
9 | | * you may not use this file except in compliance with the License. |
10 | | * You may obtain a copy of the License at |
11 | | * |
12 | | * http://www.apache.org/licenses/LICENSE-2.0 |
13 | | * |
14 | | * Unless required by applicable law or agreed to in writing, software |
15 | | * distributed under the License is distributed on an "AS IS" BASIS, |
16 | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
17 | | * See the License for the specific language governing permissions and |
18 | | * limitations under the License. |
19 | | */ |
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 | | |
30 | | static inline __m128i mm_set_epu32(uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4) |
31 | 0 | { |
32 | 0 | return _mm_set_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val1), WINPR_CXX_COMPAT_CAST(int32_t, val2), |
33 | 0 | WINPR_CXX_COMPAT_CAST(int32_t, val3), |
34 | 0 | WINPR_CXX_COMPAT_CAST(int32_t, val4)); |
35 | 0 | } Unexecuted instantiation: rfx_sse2.c:mm_set_epu32 Unexecuted instantiation: nsc_sse2.c:mm_set_epu32 Unexecuted instantiation: prim_colors_sse2.c:mm_set_epu32 Unexecuted instantiation: prim_set_sse2.c:mm_set_epu32 Unexecuted instantiation: prim_add_sse3.c:mm_set_epu32 Unexecuted instantiation: prim_alphaComp_sse3.c:mm_set_epu32 Unexecuted instantiation: prim_andor_sse3.c:mm_set_epu32 Unexecuted instantiation: prim_shift_sse3.c:mm_set_epu32 Unexecuted instantiation: prim_sign_ssse3.c:mm_set_epu32 Unexecuted instantiation: prim_YCoCg_ssse3.c:mm_set_epu32 Unexecuted instantiation: prim_copy_sse4_1.c:mm_set_epu32 Unexecuted instantiation: prim_YUV_sse4.1.c:mm_set_epu32 |
36 | | |
37 | | static 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 | 0 | { |
42 | 0 | return _mm_set_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val1), WINPR_CXX_COMPAT_CAST(int8_t, val2), |
43 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val3), WINPR_CXX_COMPAT_CAST(int8_t, val4), |
44 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val5), WINPR_CXX_COMPAT_CAST(int8_t, val6), |
45 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val7), WINPR_CXX_COMPAT_CAST(int8_t, val8), |
46 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val9), WINPR_CXX_COMPAT_CAST(int8_t, val10), |
47 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val11), WINPR_CXX_COMPAT_CAST(int8_t, val12), |
48 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val13), WINPR_CXX_COMPAT_CAST(int8_t, val14), |
49 | 0 | WINPR_CXX_COMPAT_CAST(int8_t, val15), WINPR_CXX_COMPAT_CAST(int8_t, val16)); |
50 | 0 | } Unexecuted instantiation: rfx_sse2.c:mm_set_epu8 Unexecuted instantiation: nsc_sse2.c:mm_set_epu8 Unexecuted instantiation: prim_colors_sse2.c:mm_set_epu8 Unexecuted instantiation: prim_set_sse2.c:mm_set_epu8 Unexecuted instantiation: prim_add_sse3.c:mm_set_epu8 Unexecuted instantiation: prim_alphaComp_sse3.c:mm_set_epu8 Unexecuted instantiation: prim_andor_sse3.c:mm_set_epu8 Unexecuted instantiation: prim_shift_sse3.c:mm_set_epu8 Unexecuted instantiation: prim_sign_ssse3.c:mm_set_epu8 Unexecuted instantiation: prim_YCoCg_ssse3.c:mm_set_epu8 Unexecuted instantiation: prim_copy_sse4_1.c:mm_set_epu8 Unexecuted instantiation: prim_YUV_sse4.1.c:mm_set_epu8 |
51 | | |
52 | | static inline __m128i mm_set1_epu32(uint32_t val) |
53 | 0 | { |
54 | 0 | return _mm_set1_epi32(WINPR_CXX_COMPAT_CAST(int32_t, val)); |
55 | 0 | } Unexecuted instantiation: rfx_sse2.c:mm_set1_epu32 Unexecuted instantiation: nsc_sse2.c:mm_set1_epu32 Unexecuted instantiation: prim_colors_sse2.c:mm_set1_epu32 Unexecuted instantiation: prim_set_sse2.c:mm_set1_epu32 Unexecuted instantiation: prim_add_sse3.c:mm_set1_epu32 Unexecuted instantiation: prim_alphaComp_sse3.c:mm_set1_epu32 Unexecuted instantiation: prim_andor_sse3.c:mm_set1_epu32 Unexecuted instantiation: prim_shift_sse3.c:mm_set1_epu32 Unexecuted instantiation: prim_sign_ssse3.c:mm_set1_epu32 Unexecuted instantiation: prim_YCoCg_ssse3.c:mm_set1_epu32 Unexecuted instantiation: prim_copy_sse4_1.c:mm_set1_epu32 Unexecuted instantiation: prim_YUV_sse4.1.c:mm_set1_epu32 |
56 | | |
57 | | static inline __m128i mm_set1_epu8(uint8_t val) |
58 | 0 | { |
59 | 0 | return _mm_set1_epi8(WINPR_CXX_COMPAT_CAST(int8_t, val)); |
60 | 0 | } Unexecuted instantiation: rfx_sse2.c:mm_set1_epu8 Unexecuted instantiation: nsc_sse2.c:mm_set1_epu8 Unexecuted instantiation: prim_colors_sse2.c:mm_set1_epu8 Unexecuted instantiation: prim_set_sse2.c:mm_set1_epu8 Unexecuted instantiation: prim_add_sse3.c:mm_set1_epu8 Unexecuted instantiation: prim_alphaComp_sse3.c:mm_set1_epu8 Unexecuted instantiation: prim_andor_sse3.c:mm_set1_epu8 Unexecuted instantiation: prim_shift_sse3.c:mm_set1_epu8 Unexecuted instantiation: prim_sign_ssse3.c:mm_set1_epu8 Unexecuted instantiation: prim_YCoCg_ssse3.c:mm_set1_epu8 Unexecuted instantiation: prim_copy_sse4_1.c:mm_set1_epu8 Unexecuted instantiation: prim_YUV_sse4.1.c:mm_set1_epu8 |
61 | | |
62 | | static inline __m128i LOAD_SI128(const void* ptr) |
63 | 0 | { |
64 | 0 | const __m128i* mptr = WINPR_CXX_COMPAT_CAST(const __m128i*, ptr); |
65 | 0 | return _mm_lddqu_si128(mptr); |
66 | 0 | } Unexecuted instantiation: rfx_sse2.c:LOAD_SI128 Unexecuted instantiation: nsc_sse2.c:LOAD_SI128 Unexecuted instantiation: prim_colors_sse2.c:LOAD_SI128 Unexecuted instantiation: prim_set_sse2.c:LOAD_SI128 Unexecuted instantiation: prim_add_sse3.c:LOAD_SI128 Unexecuted instantiation: prim_alphaComp_sse3.c:LOAD_SI128 Unexecuted instantiation: prim_andor_sse3.c:LOAD_SI128 Unexecuted instantiation: prim_shift_sse3.c:LOAD_SI128 Unexecuted instantiation: prim_sign_ssse3.c:LOAD_SI128 Unexecuted instantiation: prim_YCoCg_ssse3.c:LOAD_SI128 Unexecuted instantiation: prim_copy_sse4_1.c:LOAD_SI128 Unexecuted instantiation: prim_YUV_sse4.1.c:LOAD_SI128 |
67 | | |
68 | | static inline void STORE_SI128(void* ptr, __m128i val) |
69 | 0 | { |
70 | 0 | __m128i* mptr = WINPR_CXX_COMPAT_CAST(__m128i*, ptr); |
71 | 0 | _mm_storeu_si128(mptr, val); |
72 | 0 | } Unexecuted instantiation: rfx_sse2.c:STORE_SI128 Unexecuted instantiation: nsc_sse2.c:STORE_SI128 Unexecuted instantiation: prim_colors_sse2.c:STORE_SI128 Unexecuted instantiation: prim_set_sse2.c:STORE_SI128 Unexecuted instantiation: prim_add_sse3.c:STORE_SI128 Unexecuted instantiation: prim_alphaComp_sse3.c:STORE_SI128 Unexecuted instantiation: prim_andor_sse3.c:STORE_SI128 Unexecuted instantiation: prim_shift_sse3.c:STORE_SI128 Unexecuted instantiation: prim_sign_ssse3.c:STORE_SI128 Unexecuted instantiation: prim_YCoCg_ssse3.c:STORE_SI128 Unexecuted instantiation: prim_copy_sse4_1.c:STORE_SI128 Unexecuted instantiation: prim_YUV_sse4.1.c:STORE_SI128 |
73 | | |
74 | | #endif |