blob: b7af62f609aecb910b34d0925a8db76260e75f5b [file] [log] [blame]
Craig Topperf2855ad2011-12-25 06:25:37 +00001/*===---- bmiintrin.h - BMI intrinsics -------------------------------------===
2 *
Chandler Carruth4cf57432019-04-08 20:51:30 +00003 * 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
Craig Topperf2855ad2011-12-25 06:25:37 +00006 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
11#error "Never use <bmiintrin.h> directly; include <x86intrin.h> instead."
12#endif
13
Craig Topperf2855ad2011-12-25 06:25:37 +000014#ifndef __BMIINTRIN_H
15#define __BMIINTRIN_H
16
Sanjay Patel1585fb92014-05-28 20:26:57 +000017#define _tzcnt_u16(a) (__tzcnt_u16((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000018
Sanjay Patel1585fb92014-05-28 20:26:57 +000019#define _andn_u32(a, b) (__andn_u32((a), (b)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000020
Sanjay Patel1585fb92014-05-28 20:26:57 +000021/* _bextr_u32 != __bextr_u32 */
22#define _blsi_u32(a) (__blsi_u32((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000023
Sanjay Patel1585fb92014-05-28 20:26:57 +000024#define _blsmsk_u32(a) (__blsmsk_u32((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000025
Sanjay Patel1585fb92014-05-28 20:26:57 +000026#define _blsr_u32(a) (__blsr_u32((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000027
Sanjay Patel1585fb92014-05-28 20:26:57 +000028#define _tzcnt_u32(a) (__tzcnt_u32((a)))
29
Eric Christopher4d1851682015-06-17 07:09:20 +000030/* Define the default attributes for the functions in this file. */
Michael Kupersteine45af542015-06-30 13:36:19 +000031#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("bmi")))
Eric Christopher4d1851682015-06-17 07:09:20 +000032
Hans Wennborg1acf9552015-11-17 18:46:48 +000033/* Allow using the tzcnt intrinsics even for non-BMI targets. Since the TZCNT
34 instruction behaves as BSF on non-BMI targets, there is code that expects
35 to use it as a potentially faster version of BSF. */
36#define __RELAXED_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
37
Adrian Prantl9fc8faf2018-05-09 01:00:01 +000038/// Counts the number of trailing zero bits in the operand.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000039///
40/// \headerfile <x86intrin.h>
41///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +000042/// This intrinsic corresponds to the <c> TZCNT </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000043///
44/// \param __X
45/// An unsigned 16-bit integer whose trailing zeros are to be counted.
46/// \returns An unsigned 16-bit integer containing the number of trailing zero
47/// bits in the operand.
Hans Wennborg1acf9552015-11-17 18:46:48 +000048static __inline__ unsigned short __RELAXED_FN_ATTRS
Craig Topper6490bdc2012-07-02 06:52:51 +000049__tzcnt_u16(unsigned short __X)
Craig Topperf2855ad2011-12-25 06:25:37 +000050{
Craig Topperfb5d9f22018-09-26 17:01:44 +000051 return __builtin_ia32_tzcnt_u16(__X);
Craig Topperf2855ad2011-12-25 06:25:37 +000052}
53
Adrian Prantl9fc8faf2018-05-09 01:00:01 +000054/// Performs a bitwise AND of the second operand with the one's
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000055/// complement of the first operand.
56///
57/// \headerfile <x86intrin.h>
58///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +000059/// This intrinsic corresponds to the <c> ANDN </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000060///
61/// \param __X
62/// An unsigned integer containing one of the operands.
63/// \param __Y
64/// An unsigned integer containing one of the operands.
65/// \returns An unsigned integer containing the bitwise AND of the second
66/// operand with the one's complement of the first operand.
Michael Kupersteine45af542015-06-30 13:36:19 +000067static __inline__ unsigned int __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +000068__andn_u32(unsigned int __X, unsigned int __Y)
69{
70 return ~__X & __Y;
71}
72
Sanjay Patel1585fb92014-05-28 20:26:57 +000073/* AMD-specified, double-leading-underscore version of BEXTR */
Adrian Prantl9fc8faf2018-05-09 01:00:01 +000074/// Extracts the specified bits from the first operand and returns them
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000075/// in the least significant bits of the result.
76///
77/// \headerfile <x86intrin.h>
78///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +000079/// This intrinsic corresponds to the <c> BEXTR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000080///
81/// \param __X
82/// An unsigned integer whose bits are to be extracted.
83/// \param __Y
84/// An unsigned integer used to specify which bits are extracted. Bits [7:0]
85/// specify the index of the least significant bit. Bits [15:8] specify the
86/// number of bits to be extracted.
87/// \returns An unsigned integer whose least significant bits contain the
88/// extracted bits.
Ekaterina Romanova9b412152018-05-23 06:33:22 +000089/// \see _bextr_u32
Michael Kupersteine45af542015-06-30 13:36:19 +000090static __inline__ unsigned int __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +000091__bextr_u32(unsigned int __X, unsigned int __Y)
92{
93 return __builtin_ia32_bextr_u32(__X, __Y);
94}
95
Sanjay Patel1585fb92014-05-28 20:26:57 +000096/* Intel-specified, single-leading-underscore version of BEXTR */
Adrian Prantl9fc8faf2018-05-09 01:00:01 +000097/// Extracts the specified bits from the first operand and returns them
Ekaterina Romanovac8976d52016-03-08 01:36:59 +000098/// in the least significant bits of the result.
99///
100/// \headerfile <x86intrin.h>
101///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000102/// This intrinsic corresponds to the <c> BEXTR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000103///
104/// \param __X
105/// An unsigned integer whose bits are to be extracted.
106/// \param __Y
107/// An unsigned integer used to specify the index of the least significant
108/// bit for the bits to be extracted. Bits [7:0] specify the index.
109/// \param __Z
110/// An unsigned integer used to specify the number of bits to be extracted.
111/// Bits [7:0] specify the number of bits.
112/// \returns An unsigned integer whose least significant bits contain the
113/// extracted bits.
Ekaterina Romanova9b412152018-05-23 06:33:22 +0000114/// \see __bextr_u32
Michael Kupersteine45af542015-06-30 13:36:19 +0000115static __inline__ unsigned int __DEFAULT_FN_ATTRS
Sanjay Patel1585fb92014-05-28 20:26:57 +0000116_bextr_u32(unsigned int __X, unsigned int __Y, unsigned int __Z)
117{
118 return __builtin_ia32_bextr_u32 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
119}
120
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000121/// Clears all bits in the source except for the least significant bit
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000122/// containing a value of 1 and returns the result.
123///
124/// \headerfile <x86intrin.h>
125///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000126/// This intrinsic corresponds to the <c> BLSI </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000127///
128/// \param __X
129/// An unsigned integer whose bits are to be cleared.
130/// \returns An unsigned integer containing the result of clearing the bits from
131/// the source operand.
Michael Kupersteine45af542015-06-30 13:36:19 +0000132static __inline__ unsigned int __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000133__blsi_u32(unsigned int __X)
134{
135 return __X & -__X;
136}
137
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000138/// Creates a mask whose bits are set to 1, using bit 0 up to and
Ekaterina Romanovacb3603a2017-06-06 22:58:01 +0000139/// including the least significant bit that is set to 1 in the source
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000140/// operand and returns the result.
141///
142/// \headerfile <x86intrin.h>
143///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000144/// This intrinsic corresponds to the <c> BLSMSK </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000145///
146/// \param __X
147/// An unsigned integer used to create the mask.
148/// \returns An unsigned integer containing the newly created mask.
Michael Kupersteine45af542015-06-30 13:36:19 +0000149static __inline__ unsigned int __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000150__blsmsk_u32(unsigned int __X)
151{
152 return __X ^ (__X - 1);
153}
154
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000155/// Clears the least significant bit that is set to 1 in the source
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000156/// operand and returns the result.
157///
158/// \headerfile <x86intrin.h>
159///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000160/// This intrinsic corresponds to the <c> BLSR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000161///
162/// \param __X
163/// An unsigned integer containing the operand to be cleared.
164/// \returns An unsigned integer containing the result of clearing the source
165/// operand.
Michael Kupersteine45af542015-06-30 13:36:19 +0000166static __inline__ unsigned int __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000167__blsr_u32(unsigned int __X)
168{
169 return __X & (__X - 1);
170}
171
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000172/// Counts the number of trailing zero bits in the operand.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000173///
174/// \headerfile <x86intrin.h>
175///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000176/// This intrinsic corresponds to the <c> TZCNT </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000177///
178/// \param __X
179/// An unsigned 32-bit integer whose trailing zeros are to be counted.
180/// \returns An unsigned 32-bit integer containing the number of trailing zero
181/// bits in the operand.
Hans Wennborg1acf9552015-11-17 18:46:48 +0000182static __inline__ unsigned int __RELAXED_FN_ATTRS
Craig Topper6490bdc2012-07-02 06:52:51 +0000183__tzcnt_u32(unsigned int __X)
Craig Topperf2855ad2011-12-25 06:25:37 +0000184{
Craig Topperfb5d9f22018-09-26 17:01:44 +0000185 return __builtin_ia32_tzcnt_u32(__X);
Craig Topperf2855ad2011-12-25 06:25:37 +0000186}
187
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000188/// Counts the number of trailing zero bits in the operand.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000189///
190/// \headerfile <x86intrin.h>
191///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000192/// This intrinsic corresponds to the <c> TZCNT </c> instruction.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000193///
194/// \param __X
195/// An unsigned 32-bit integer whose trailing zeros are to be counted.
Ekaterina Romanovadffe45b2016-12-27 00:49:38 +0000196/// \returns An 32-bit integer containing the number of trailing zero bits in
197/// the operand.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000198static __inline__ int __RELAXED_FN_ATTRS
199_mm_tzcnt_32(unsigned int __X)
200{
Craig Topperfb5d9f22018-09-26 17:01:44 +0000201 return __builtin_ia32_tzcnt_u32(__X);
Michael Zuckerman716859a2016-06-22 12:32:43 +0000202}
203
Craig Topperf2855ad2011-12-25 06:25:37 +0000204#ifdef __x86_64__
Sanjay Patel1585fb92014-05-28 20:26:57 +0000205
206#define _andn_u64(a, b) (__andn_u64((a), (b)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000207
Sanjay Patel1585fb92014-05-28 20:26:57 +0000208/* _bextr_u64 != __bextr_u64 */
209#define _blsi_u64(a) (__blsi_u64((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000210
Sanjay Patel1585fb92014-05-28 20:26:57 +0000211#define _blsmsk_u64(a) (__blsmsk_u64((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000212
Sanjay Patel1585fb92014-05-28 20:26:57 +0000213#define _blsr_u64(a) (__blsr_u64((a)))
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000214
Sanjay Patel1585fb92014-05-28 20:26:57 +0000215#define _tzcnt_u64(a) (__tzcnt_u64((a)))
216
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000217/// Performs a bitwise AND of the second operand with the one's
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000218/// complement of the first operand.
219///
220/// \headerfile <x86intrin.h>
221///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000222/// This intrinsic corresponds to the <c> ANDN </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000223///
224/// \param __X
225/// An unsigned 64-bit integer containing one of the operands.
226/// \param __Y
227/// An unsigned 64-bit integer containing one of the operands.
228/// \returns An unsigned 64-bit integer containing the bitwise AND of the second
229/// operand with the one's complement of the first operand.
Michael Kupersteine45af542015-06-30 13:36:19 +0000230static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000231__andn_u64 (unsigned long long __X, unsigned long long __Y)
232{
233 return ~__X & __Y;
234}
235
Sanjay Patel1585fb92014-05-28 20:26:57 +0000236/* AMD-specified, double-leading-underscore version of BEXTR */
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000237/// Extracts the specified bits from the first operand and returns them
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000238/// in the least significant bits of the result.
239///
240/// \headerfile <x86intrin.h>
241///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000242/// This intrinsic corresponds to the <c> BEXTR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000243///
244/// \param __X
245/// An unsigned 64-bit integer whose bits are to be extracted.
246/// \param __Y
247/// An unsigned 64-bit integer used to specify which bits are extracted. Bits
248/// [7:0] specify the index of the least significant bit. Bits [15:8] specify
249/// the number of bits to be extracted.
250/// \returns An unsigned 64-bit integer whose least significant bits contain the
251/// extracted bits.
Ekaterina Romanova9b412152018-05-23 06:33:22 +0000252/// \see _bextr_u64
Michael Kupersteine45af542015-06-30 13:36:19 +0000253static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000254__bextr_u64(unsigned long long __X, unsigned long long __Y)
255{
256 return __builtin_ia32_bextr_u64(__X, __Y);
257}
258
Sanjay Patel1585fb92014-05-28 20:26:57 +0000259/* Intel-specified, single-leading-underscore version of BEXTR */
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000260/// Extracts the specified bits from the first operand and returns them
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000261/// in the least significant bits of the result.
262///
263/// \headerfile <x86intrin.h>
264///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000265/// This intrinsic corresponds to the <c> BEXTR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000266///
267/// \param __X
268/// An unsigned 64-bit integer whose bits are to be extracted.
269/// \param __Y
270/// An unsigned integer used to specify the index of the least significant
271/// bit for the bits to be extracted. Bits [7:0] specify the index.
272/// \param __Z
273/// An unsigned integer used to specify the number of bits to be extracted.
274/// Bits [7:0] specify the number of bits.
275/// \returns An unsigned 64-bit integer whose least significant bits contain the
276/// extracted bits.
Ekaterina Romanova9b412152018-05-23 06:33:22 +0000277/// \see __bextr_u64
Michael Kupersteine45af542015-06-30 13:36:19 +0000278static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Sanjay Patel1585fb92014-05-28 20:26:57 +0000279_bextr_u64(unsigned long long __X, unsigned int __Y, unsigned int __Z)
280{
281 return __builtin_ia32_bextr_u64 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
282}
283
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000284/// Clears all bits in the source except for the least significant bit
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000285/// containing a value of 1 and returns the result.
286///
287/// \headerfile <x86intrin.h>
288///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000289/// This intrinsic corresponds to the <c> BLSI </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000290///
291/// \param __X
292/// An unsigned 64-bit integer whose bits are to be cleared.
293/// \returns An unsigned 64-bit integer containing the result of clearing the
294/// bits from the source operand.
Michael Kupersteine45af542015-06-30 13:36:19 +0000295static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000296__blsi_u64(unsigned long long __X)
297{
298 return __X & -__X;
299}
300
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000301/// Creates a mask whose bits are set to 1, using bit 0 up to and
Ekaterina Romanovacb3603a2017-06-06 22:58:01 +0000302/// including the least significant bit that is set to 1 in the source
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000303/// operand and returns the result.
304///
305/// \headerfile <x86intrin.h>
306///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000307/// This intrinsic corresponds to the <c> BLSMSK </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000308///
309/// \param __X
310/// An unsigned 64-bit integer used to create the mask.
Ekaterina Romanova03ecd772017-07-12 20:18:55 +0000311/// \returns An unsigned 64-bit integer containing the newly created mask.
Michael Kupersteine45af542015-06-30 13:36:19 +0000312static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000313__blsmsk_u64(unsigned long long __X)
314{
315 return __X ^ (__X - 1);
316}
317
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000318/// Clears the least significant bit that is set to 1 in the source
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000319/// operand and returns the result.
320///
321/// \headerfile <x86intrin.h>
322///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000323/// This intrinsic corresponds to the <c> BLSR </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000324///
325/// \param __X
326/// An unsigned 64-bit integer containing the operand to be cleared.
327/// \returns An unsigned 64-bit integer containing the result of clearing the
328/// source operand.
Michael Kupersteine45af542015-06-30 13:36:19 +0000329static __inline__ unsigned long long __DEFAULT_FN_ATTRS
Craig Toppera06d4a12011-12-25 07:27:12 +0000330__blsr_u64(unsigned long long __X)
331{
332 return __X & (__X - 1);
333}
334
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000335/// Counts the number of trailing zero bits in the operand.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000336///
337/// \headerfile <x86intrin.h>
338///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000339/// This intrinsic corresponds to the <c> TZCNT </c> instruction.
Ekaterina Romanovac8976d52016-03-08 01:36:59 +0000340///
341/// \param __X
342/// An unsigned 64-bit integer whose trailing zeros are to be counted.
343/// \returns An unsigned 64-bit integer containing the number of trailing zero
344/// bits in the operand.
Hans Wennborg1acf9552015-11-17 18:46:48 +0000345static __inline__ unsigned long long __RELAXED_FN_ATTRS
Craig Topper6490bdc2012-07-02 06:52:51 +0000346__tzcnt_u64(unsigned long long __X)
Craig Topperf2855ad2011-12-25 06:25:37 +0000347{
Craig Topperfb5d9f22018-09-26 17:01:44 +0000348 return __builtin_ia32_tzcnt_u64(__X);
Craig Topperf2855ad2011-12-25 06:25:37 +0000349}
Sanjay Patel1585fb92014-05-28 20:26:57 +0000350
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000351/// Counts the number of trailing zero bits in the operand.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000352///
353/// \headerfile <x86intrin.h>
354///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000355/// This intrinsic corresponds to the <c> TZCNT </c> instruction.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000356///
357/// \param __X
358/// An unsigned 64-bit integer whose trailing zeros are to be counted.
Ekaterina Romanovadffe45b2016-12-27 00:49:38 +0000359/// \returns An 64-bit integer containing the number of trailing zero bits in
360/// the operand.
Michael Zuckerman716859a2016-06-22 12:32:43 +0000361static __inline__ long long __RELAXED_FN_ATTRS
362_mm_tzcnt_64(unsigned long long __X)
363{
Craig Topperfb5d9f22018-09-26 17:01:44 +0000364 return __builtin_ia32_tzcnt_u64(__X);
Michael Zuckerman716859a2016-06-22 12:32:43 +0000365}
366
Sanjay Patel1585fb92014-05-28 20:26:57 +0000367#endif /* __x86_64__ */
Craig Topperf2855ad2011-12-25 06:25:37 +0000368
Michael Kupersteine45af542015-06-30 13:36:19 +0000369#undef __DEFAULT_FN_ATTRS
Hans Wennborg1acf9552015-11-17 18:46:48 +0000370#undef __RELAXED_FN_ATTRS
Eric Christopher4d1851682015-06-17 07:09:20 +0000371
Craig Topperf2855ad2011-12-25 06:25:37 +0000372#endif /* __BMIINTRIN_H */