[AMDGPU] Infer amdgpu-no-flat-scratch-init attribute in AMDGPUAttributor (#94647)
[llvm-project.git] / clang / lib / Headers / raointintrin.h
blobd3290eb62abf8c0bbf5bc1929bad4854fa8b4275
1 /*===----------------------- raointintrin.h - RAOINT ------------------------===
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 *===-----------------------------------------------------------------------===
8 */
10 #ifndef __X86GPRINTRIN_H
11 #error "Never use <raointintrin.h> directly; include <x86gprintrin.h> instead."
12 #endif // __X86GPRINTRIN_H
14 #ifndef __RAOINTINTRIN_H
15 #define __RAOINTINTRIN_H
17 #define __DEFAULT_FN_ATTRS \
18 __attribute__((__always_inline__, __nodebug__, __target__("raoint")))
20 /// Atomically add a 32-bit value at memory operand \a __A and a 32-bit \a __B,
21 /// and store the result to the same memory location.
22 ///
23 /// This intrinsic should be used for contention or weak ordering. It may
24 /// result in bad performance for hot data used by single thread only.
25 ///
26 /// \headerfile <x86intrin.h>
27 ///
28 /// This intrinsic corresponds to the \c AADD instruction.
29 ///
30 /// \param __A
31 /// A pointer to a 32-bit memory location.
32 /// \param __B
33 /// A 32-bit integer value.
34 ///
35 /// \code{.operation}
36 /// MEM[__A+31:__A] := MEM[__A+31:__A] + __B[31:0]
37 /// \endcode
38 static __inline__ void __DEFAULT_FN_ATTRS _aadd_i32(int *__A, int __B) {
39 __builtin_ia32_aadd32((int *)__A, __B);
42 /// Atomically and a 32-bit value at memory operand \a __A and a 32-bit \a __B,
43 /// and store the result to the same memory location.
44 ///
45 /// This intrinsic should be used for contention or weak ordering. It may
46 /// result in bad performance for hot data used by single thread only.
47 ///
48 /// \headerfile <x86intrin.h>
49 ///
50 /// This intrinsic corresponds to the \c AAND instruction.
51 ///
52 /// \param __A
53 /// A pointer to a 32-bit memory location.
54 /// \param __B
55 /// A 32-bit integer value.
56 ///
57 /// \code{.operation}
58 /// MEM[__A+31:__A] := MEM[__A+31:__A] AND __B[31:0]
59 /// \endcode
60 static __inline__ void __DEFAULT_FN_ATTRS _aand_i32(int *__A, int __B) {
61 __builtin_ia32_aand32((int *)__A, __B);
64 /// Atomically or a 32-bit value at memory operand \a __A and a 32-bit \a __B,
65 /// and store the result to the same memory location.
66 ///
67 /// This intrinsic should be used for contention or weak ordering. It may
68 /// result in bad performance for hot data used by single thread only.
69 ///
70 /// \headerfile <x86intrin.h>
71 ///
72 /// This intrinsic corresponds to the \c AOR instruction.
73 ///
74 /// \param __A
75 /// A pointer to a 32-bit memory location.
76 /// \param __B
77 /// A 32-bit integer value.
78 ///
79 /// \code{.operation}
80 /// MEM[__A+31:__A] := MEM[__A+31:__A] OR __B[31:0]
81 /// \endcode
82 static __inline__ void __DEFAULT_FN_ATTRS _aor_i32(int *__A, int __B) {
83 __builtin_ia32_aor32((int *)__A, __B);
86 /// Atomically xor a 32-bit value at memory operand \a __A and a 32-bit \a __B,
87 /// and store the result to the same memory location.
88 ///
89 /// This intrinsic should be used for contention or weak ordering. It may
90 /// result in bad performance for hot data used by single thread only.
91 ///
92 /// \headerfile <x86intrin.h>
93 ///
94 /// This intrinsic corresponds to the \c AXOR instruction.
95 ///
96 /// \param __A
97 /// A pointer to a 32-bit memory location.
98 /// \param __B
99 /// A 32-bit integer value.
101 /// \code{.operation}
102 /// MEM[__A+31:__A] := MEM[__A+31:__A] XOR __B[31:0]
103 /// \endcode
104 static __inline__ void __DEFAULT_FN_ATTRS _axor_i32(int *__A, int __B) {
105 __builtin_ia32_axor32((int *)__A, __B);
108 #ifdef __x86_64__
109 /// Atomically add a 64-bit value at memory operand \a __A and a 64-bit \a __B,
110 /// and store the result to the same memory location.
112 /// This intrinsic should be used for contention or weak ordering. It may
113 /// result in bad performance for hot data used by single thread only.
115 /// \headerfile <x86intrin.h>
117 /// This intrinsic corresponds to the \c AADD instruction.
119 /// \param __A
120 /// A pointer to a 64-bit memory location.
121 /// \param __B
122 /// A 64-bit integer value.
124 /// \code{.operation}
125 /// MEM[__A+63:__A] := MEM[__A+63:__A] + __B[63:0]
126 /// \endcode
127 static __inline__ void __DEFAULT_FN_ATTRS _aadd_i64(long long *__A,
128 long long __B) {
129 __builtin_ia32_aadd64((long long *)__A, __B);
132 /// Atomically and a 64-bit value at memory operand \a __A and a 64-bit \a __B,
133 /// and store the result to the same memory location.
135 /// This intrinsic should be used for contention or weak ordering. It may
136 /// result in bad performance for hot data used by single thread only.
138 /// \headerfile <x86intrin.h>
140 /// This intrinsic corresponds to the \c AAND instruction.
142 /// \param __A
143 /// A pointer to a 64-bit memory location.
144 /// \param __B
145 /// A 64-bit integer value.
147 /// \code{.operation}
148 /// MEM[__A+63:__A] := MEM[__A+63:__A] AND __B[63:0]
149 /// \endcode
150 static __inline__ void __DEFAULT_FN_ATTRS _aand_i64(long long *__A,
151 long long __B) {
152 __builtin_ia32_aand64((long long *)__A, __B);
155 /// Atomically or a 64-bit value at memory operand \a __A and a 64-bit \a __B,
156 /// and store the result to the same memory location.
158 /// This intrinsic should be used for contention or weak ordering. It may
159 /// result in bad performance for hot data used by single thread only.
161 /// \headerfile <x86intrin.h>
163 /// This intrinsic corresponds to the \c AOR instruction.
165 /// \param __A
166 /// A pointer to a 64-bit memory location.
167 /// \param __B
168 /// A 64-bit integer value.
170 /// \code{.operation}
171 /// MEM[__A+63:__A] := MEM[__A+63:__A] OR __B[63:0]
172 /// \endcode
173 static __inline__ void __DEFAULT_FN_ATTRS _aor_i64(long long *__A,
174 long long __B) {
175 __builtin_ia32_aor64((long long *)__A, __B);
178 /// Atomically xor a 64-bit value at memory operand \a __A and a 64-bit \a __B,
179 /// and store the result to the same memory location.
181 /// This intrinsic should be used for contention or weak ordering. It may
182 /// result in bad performance for hot data used by single thread only.
184 /// \headerfile <x86intrin.h>
186 /// This intrinsic corresponds to the \c AXOR instruction.
188 /// \param __A
189 /// A pointer to a 64-bit memory location.
190 /// \param __B
191 /// A 64-bit integer value.
193 /// \code{.operation}
194 /// MEM[__A+63:__A] := MEM[__A+63:__A] XOR __B[63:0]
195 /// \endcode
196 static __inline__ void __DEFAULT_FN_ATTRS _axor_i64(long long *__A,
197 long long __B) {
198 __builtin_ia32_axor64((long long *)__A, __B);
200 #endif // __x86_64__
202 #undef __DEFAULT_FN_ATTRS
203 #endif // __RAOINTINTRIN_H