1 /* SPDX-License-Identifier: MIT
2 *
3 * Permission is hereby granted, free of charge, to any person
4 * obtaining a copy of this software and associated documentation
5 * files (the "Software"), to deal in the Software without
6 * restriction, including without limitation the rights to use, copy,
7 * modify, merge, publish, distribute, sublicense, and/or sell copies
8 * of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be
12 * included in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 *
23 * Copyright:
24 * 2020 Evan Nemerson <evan@nemerson.com>
25 */
26
27 #if !defined(SIMDE_X86_AVX512_STORE_H)
28 #define SIMDE_X86_AVX512_STORE_H
29
30 #include "types.h"
31
32 HEDLEY_DIAGNOSTIC_PUSH
33 SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
34 SIMDE_BEGIN_DECLS_
35
36 SIMDE_FUNCTION_ATTRIBUTES
37 void
simde_mm512_store_ps(void * mem_addr,simde__m512 a)38 simde_mm512_store_ps (void * mem_addr, simde__m512 a) {
39 #if defined(SIMDE_X86_AVX512F_NATIVE)
40 _mm512_store_ps(mem_addr, a);
41 #else
42 simde_memcpy(SIMDE_ALIGN_ASSUME_LIKE(mem_addr, simde__m512), &a, sizeof(a));
43 #endif
44 }
45 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
46 #undef _mm512_store_ps
47 #define _mm512_store_ps(mem_addr, a) simde_mm512_store_ps(mem_addr, a)
48 #endif
49
50 SIMDE_FUNCTION_ATTRIBUTES
51 void
simde_mm512_store_pd(void * mem_addr,simde__m512d a)52 simde_mm512_store_pd (void * mem_addr, simde__m512d a) {
53 #if defined(SIMDE_X86_AVX512F_NATIVE)
54 _mm512_store_pd(mem_addr, a);
55 #else
56 simde_memcpy(SIMDE_ALIGN_ASSUME_LIKE(mem_addr, simde__m512d), &a, sizeof(a));
57 #endif
58 }
59 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
60 #undef _mm512_store_pd
61 #define _mm512_store_pd(mem_addr, a) simde_mm512_store_pd(mem_addr, a)
62 #endif
63
64 SIMDE_FUNCTION_ATTRIBUTES
65 void
simde_mm512_store_si512(void * mem_addr,simde__m512i a)66 simde_mm512_store_si512 (void * mem_addr, simde__m512i a) {
67 #if defined(SIMDE_X86_AVX512F_NATIVE)
68 _mm512_store_si512(HEDLEY_REINTERPRET_CAST(void*, mem_addr), a);
69 #else
70 simde_memcpy(SIMDE_ALIGN_ASSUME_LIKE(mem_addr, simde__m512i), &a, sizeof(a));
71 #endif
72 }
73 #define simde_mm512_store_epi8(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
74 #define simde_mm512_store_epi16(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
75 #define simde_mm512_store_epi32(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
76 #define simde_mm512_store_epi64(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
77 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
78 #undef _mm512_store_epi8
79 #undef _mm512_store_epi16
80 #undef _mm512_store_epi32
81 #undef _mm512_store_epi64
82 #undef _mm512_store_si512
83 #define _mm512_store_si512(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
84 #define _mm512_store_epi8(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
85 #define _mm512_store_epi16(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
86 #define _mm512_store_epi32(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
87 #define _mm512_store_epi64(mem_addr, a) simde_mm512_store_si512(mem_addr, a)
88 #endif
89
90 SIMDE_END_DECLS_
91 HEDLEY_DIAGNOSTIC_POP
92
93 #endif /* !defined(SIMDE_X86_AVX512_STORE_H) */
94