STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
bmiintrin.h
Go to the documentation of this file.
1 /* Copyright (C) 2010-2013 Free Software Foundation, Inc.
2 
3  This file is part of GCC.
4 
5  GCC is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 3, or (at your option)
8  any later version.
9 
10  GCC is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  Under Section 7 of GPL version 3, you are granted additional
16  permissions described in the GCC Runtime Library Exception, version
17  3.1, as published by the Free Software Foundation.
18 
19  You should have received a copy of the GNU General Public License and
20  a copy of the GCC Runtime Library Exception along with this program;
21  see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22  <http://www.gnu.org/licenses/>. */
23 
24 #if !defined _X86INTRIN_H_INCLUDED && !defined _IMMINTRIN_H_INCLUDED
25 # error "Never use <bmiintrin.h> directly; include <x86intrin.h> instead."
26 #endif
27 
28 #ifndef __BMI__
29 # error "BMI instruction set not enabled"
30 #endif /* __BMI__ */
31 
32 #ifndef _BMIINTRIN_H_INCLUDED
33 #define _BMIINTRIN_H_INCLUDED
34 
35 extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
36 __tzcnt_u16 (unsigned short __X)
37 {
38  return __builtin_ctzs (__X);
39 }
40 
41 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
42 __andn_u32 (unsigned int __X, unsigned int __Y)
43 {
44  return ~__X & __Y;
45 }
46 
47 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
48 __bextr_u32 (unsigned int __X, unsigned int __Y)
49 {
50  return __builtin_ia32_bextr_u32 (__X, __Y);
51 }
52 
53 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
54 _bextr_u32 (unsigned int __X, unsigned int __Y, unsigned __Z)
55 {
56  return __builtin_ia32_bextr_u32 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
57 }
58 
59 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
60 __blsi_u32 (unsigned int __X)
61 {
62  return __X & -__X;
63 }
64 
65 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
66 _blsi_u32 (unsigned int __X)
67 {
68  return __blsi_u32 (__X);
69 }
70 
71 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
72 __blsmsk_u32 (unsigned int __X)
73 {
74  return __X ^ (__X - 1);
75 }
76 
77 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
78 _blsmsk_u32 (unsigned int __X)
79 {
80  return __blsmsk_u32 (__X);
81 }
82 
83 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
84 __blsr_u32 (unsigned int __X)
85 {
86  return __X & (__X - 1);
87 }
88 
89 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
90 _blsr_u32 (unsigned int __X)
91 {
92  return __blsr_u32 (__X);
93 }
94 
95 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
96 __tzcnt_u32 (unsigned int __X)
97 {
98  return __builtin_ctz (__X);
99 }
100 
101 extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
102 _tzcnt_u32 (unsigned int __X)
103 {
104  return __builtin_ctz (__X);
105 }
106 
107 
108 #ifdef __x86_64__
109 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
110 __andn_u64 (unsigned long long __X, unsigned long long __Y)
111 {
112  return ~__X & __Y;
113 }
114 
115 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
116 __bextr_u64 (unsigned long long __X, unsigned long long __Y)
117 {
118  return __builtin_ia32_bextr_u64 (__X, __Y);
119 }
120 
121 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
122 _bextr_u64 (unsigned long long __X, unsigned int __Y, unsigned int __Z)
123 {
124  return __builtin_ia32_bextr_u64 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
125 }
126 
127 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
128 __blsi_u64 (unsigned long long __X)
129 {
130  return __X & -__X;
131 }
132 
133 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
134 _blsi_u64 (unsigned long long __X)
135 {
136  return __blsi_u64 (__X);
137 }
138 
139 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
140 __blsmsk_u64 (unsigned long long __X)
141 {
142  return __X ^ (__X - 1);
143 }
144 
145 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
146 _blsmsk_u64 (unsigned long long __X)
147 {
148  return __blsmsk_u64 (__X);
149 }
150 
151 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
152 __blsr_u64 (unsigned long long __X)
153 {
154  return __X & (__X - 1);
155 }
156 
157 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
158 _blsr_u64 (unsigned long long __X)
159 {
160  return __blsr_u64 (__X);
161 }
162 
163 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
164 __tzcnt_u64 (unsigned long long __X)
165 {
166  return __builtin_ctzll (__X);
167 }
168 
169 extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
170 _tzcnt_u64 (unsigned long long __X)
171 {
172  return __builtin_ctzll (__X);
173 }
174 
175 #endif /* __x86_64__ */
176 
177 #endif /* _BMIINTRIN_H_INCLUDED */
__inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__)) __tzcnt_u16(unsigned short __X)
Definition: bmiintrin.h:35
__inline unsigned int unsigned int __Y
Definition: bmiintrin.h:43
__inline unsigned int unsigned int unsigned __Z
Definition: bmiintrin.h:55
__inline unsigned char unsigned int __X
Definition: adxintrin.h:33