╭ raointintrin.h ───────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
.. llvm_libc_wrappers/ openmp_wrappers/ ppc_wrappers/ __clang_spirv_builtins.h __float_float.h __float_header_macro.h __float_infinity_nan.h __stdarg___gnuc_va_list.h __stdarg___va_copy.h __stdarg_header_macro.h __stdarg_va_arg.h __stdarg_va_copy.h __stdarg_va_list.h __stddef_header_macro.h __stddef_max_align_t.h __stddef_null.h __stddef_nullptr_t.h __stddef_offsetof.h __stddef_ptrdiff_t.h __stddef_rsize_t.h __stddef_size_t.h __stddef_unreachable.h __stddef_wchar_t.h __stddef_wint_t.h __wmmintrin_aes.h __wmmintrin_pclmul.h adcintrin.h adxintrin.h altivec.h ammintrin.h amo.h amxavx512intrin.h amxcomplexintrin.h amxfp16intrin.h amxfp8intrin.h amxintrin.h amxmovrsintrin.h amxtf32intrin.h andes_vector.h arm64intr.h arm_acle.h arm_bf16.h arm_cde.h arm_cmse.h arm_fp16.h arm_mve.h arm_neon.h arm_neon_sve_bridge.h arm_sme.h arm_sve.h arm_vector_types.h armintr.h avx10_2_512bf16intrin.h avx10_2_512convertintrin.h avx10_2_512minmaxintrin.h avx10_2_512niintrin.h avx10_2_512satcvtdsintrin.h avx10_2_512satcvtintrin.h avx10_2bf16intrin.h avx10_2convertintrin.h avx10_2copyintrin.h avx10_2minmaxintrin.h avx10_2niintrin.h avx10_2satcvtdsintrin.h avx10_2satcvtintrin.h avx2intrin.h avx512bf16intrin.h avx512bitalgintrin.h avx512bwintrin.h avx512cdintrin.h avx512dqintrin.h avx512fintrin.h avx512fp16intrin.h avx512ifmaintrin.h avx512ifmavlintrin.h avx512vbmi2intrin.h avx512vbmiintrin.h avx512vbmivlintrin.h avx512vlbf16intrin.h avx512vlbitalgintrin.h avx512vlbwintrin.h avx512vlcdintrin.h avx512vldqintrin.h avx512vlfp16intrin.h avx512vlintrin.h avx512vlvbmi2intrin.h avx512vlvnniintrin.h avx512vlvp2intersectintrin.h avx512vnniintrin.h avx512vp2intersectintrin.h avx512vpopcntdqintrin.h avx512vpopcntdqvlintrin.h avxifmaintrin.h avxintrin.h avxneconvertintrin.h avxvnniint16intrin.h avxvnniint8intrin.h avxvnniintrin.h bmi2intrin.h bmiintrin.h builtins.h cet.h cetintrin.h cldemoteintrin.h clflushoptintrin.h clwbintrin.h clzerointrin.h cmpccxaddintrin.h cpuid.h crc32intrin.h emmintrin.h enqcmdintrin.h f16cintrin.h float.h fma4intrin.h fmaintrin.h fxsrintrin.h gfniintrin.h hexagon_circ_brev_intrinsics.h hexagon_protos.h hexagon_types.h hresetintrin.h htmintrin.h htmxlintrin.h hvx_hexagon_protos.h ia32intrin.h immintrin.h intrin.h intrin0.h inttypes.h invpcidintrin.h iso646.h keylockerintrin.h larchintrin.h lasxintrin.h limits.h lsxintrin.h lwpintrin.h lzcntintrin.h mm3dnow.h mm_malloc.h mmintrin.h module.modulemap movdirintrin.h movrs_avx10_2_512intrin.h movrs_avx10_2intrin.h movrsintrin.h msa.h mwaitxintrin.h nmmintrin.h pconfigintrin.h pkuintrin.h pmmintrin.h popcntintrin.h prfchiintrin.h prfchwintrin.h ptrauth.h ptwriteintrin.h ╭─────────────────────────────────╮ │raointintrin.h │ ╰─────────────────────────────────╯ rdpruintrin.h rdseedintrin.h riscv_bitmanip.h riscv_corev_alu.h riscv_crypto.h riscv_mips.h riscv_nds.h riscv_ntlh.h riscv_vector.h rtmintrin.h s390intrin.h serializeintrin.h sgxintrin.h sha512intrin.h shaintrin.h sifive_vector.h sm3intrin.h sm4evexintrin.h sm4intrin.h smmintrin.h spirvintrin.h stdalign.h stdarg.h stdatomic.h stdbool.h stdckdint.h stdcountof.h stddef.h stddefer.h stdint.h stdnoreturn.h tbmintrin.h tgmath.h tmmintrin.h tsxldtrkintrin.h uintrintrin.h unwind.h usermsrintrin.h vadefs.h vaesintrin.h varargs.h vecintrin.h velintrin.h velintrin_approx.h velintrin_gen.h vpclmulqdqintrin.h waitpkgintrin.h wasm_simd128.h wbnoinvdintrin.h wmmintrin.h x86gprintrin.h x86intrin.h xmmintrin.h xopintrin.h xsavecintrin.h xsaveintrin.h xsaveoptintrin.h xsavesintrin.h xtestintrin.h yvals_core.h
1 /*===----------------------- raointintrin.h - RAOINT ------------------------=== 2 * 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 6 * 7 *===-----------------------------------------------------------------------=== 8 */ 9 10 #ifndef __X86GPRINTRIN_H 11 #error "Never use <raointintrin.h> directly; include <x86gprintrin.h> instead." 12 #endif // __X86GPRINTRIN_H 13 14 #ifndef __RAOINTINTRIN_H 15 #define __RAOINTINTRIN_H 16 17 #define __DEFAULT_FN_ATTRS \ 18 __attribute__((__always_inline__, __nodebug__, __target__("raoint"))) 19 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); 40 } 41 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); 62 } 63 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); 84 } 85 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. 100 /// 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); 106 } 107 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. 111 /// 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. 114 /// 115 /// \headerfile <x86intrin.h> 116 /// 117 /// This intrinsic corresponds to the \c AADD instruction. 118 /// 119 /// \param __A 120 /// A pointer to a 64-bit memory location. 121 /// \param __B 122 /// A 64-bit integer value. 123 /// 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); 130 } 131 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. 134 /// 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. 137 /// 138 /// \headerfile <x86intrin.h> 139 /// 140 /// This intrinsic corresponds to the \c AAND instruction. 141 /// 142 /// \param __A 143 /// A pointer to a 64-bit memory location. 144 /// \param __B 145 /// A 64-bit integer value. 146 /// 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); 153 } 154 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. 157 /// 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. 160 /// 161 /// \headerfile <x86intrin.h> 162 /// 163 /// This intrinsic corresponds to the \c AOR instruction. 164 /// 165 /// \param __A 166 /// A pointer to a 64-bit memory location. 167 /// \param __B 168 /// A 64-bit integer value. 169 /// 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); 176 } 177 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. 180 /// 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. 183 /// 184 /// \headerfile <x86intrin.h> 185 /// 186 /// This intrinsic corresponds to the \c AXOR instruction. 187 /// 188 /// \param __A 189 /// A pointer to a 64-bit memory location. 190 /// \param __B 191 /// A 64-bit integer value. 192 /// 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); 199 } 200 #endif // __x86_64__ 201 202 #undef __DEFAULT_FN_ATTRS 203 #endif // __RAOINTINTRIN_H 204