1*344a7f5eSAndroid Build Coastguard Worker /*===---- arm_acle.h - ARM Non-Neon intrinsics -----------------------------===
2*344a7f5eSAndroid Build Coastguard Worker *
3*344a7f5eSAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy
4*344a7f5eSAndroid Build Coastguard Worker * of this software and associated documentation files (the "Software"), to deal
5*344a7f5eSAndroid Build Coastguard Worker * in the Software without restriction, including without limitation the rights
6*344a7f5eSAndroid Build Coastguard Worker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7*344a7f5eSAndroid Build Coastguard Worker * copies of the Software, and to permit persons to whom the Software is
8*344a7f5eSAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions:
9*344a7f5eSAndroid Build Coastguard Worker *
10*344a7f5eSAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in
11*344a7f5eSAndroid Build Coastguard Worker * all copies or substantial portions of the Software.
12*344a7f5eSAndroid Build Coastguard Worker *
13*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14*344a7f5eSAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*344a7f5eSAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16*344a7f5eSAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17*344a7f5eSAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18*344a7f5eSAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE.
20*344a7f5eSAndroid Build Coastguard Worker *
21*344a7f5eSAndroid Build Coastguard Worker *===-----------------------------------------------------------------------===
22*344a7f5eSAndroid Build Coastguard Worker */
23*344a7f5eSAndroid Build Coastguard Worker
24*344a7f5eSAndroid Build Coastguard Worker #ifndef __ARM_ACLE_H
25*344a7f5eSAndroid Build Coastguard Worker #define __ARM_ACLE_H
26*344a7f5eSAndroid Build Coastguard Worker
27*344a7f5eSAndroid Build Coastguard Worker #ifndef __ARM_ACLE
28*344a7f5eSAndroid Build Coastguard Worker #error "ACLE intrinsics support not enabled."
29*344a7f5eSAndroid Build Coastguard Worker #endif
30*344a7f5eSAndroid Build Coastguard Worker
31*344a7f5eSAndroid Build Coastguard Worker #include <stdint.h>
32*344a7f5eSAndroid Build Coastguard Worker
33*344a7f5eSAndroid Build Coastguard Worker #if defined(__cplusplus)
34*344a7f5eSAndroid Build Coastguard Worker extern "C" {
35*344a7f5eSAndroid Build Coastguard Worker #endif
36*344a7f5eSAndroid Build Coastguard Worker
37*344a7f5eSAndroid Build Coastguard Worker /* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */
38*344a7f5eSAndroid Build Coastguard Worker /* 8.3 Memory barriers */
39*344a7f5eSAndroid Build Coastguard Worker #if !defined(_MSC_VER)
40*344a7f5eSAndroid Build Coastguard Worker #define __dmb(i) __builtin_arm_dmb(i)
41*344a7f5eSAndroid Build Coastguard Worker #define __dsb(i) __builtin_arm_dsb(i)
42*344a7f5eSAndroid Build Coastguard Worker #define __isb(i) __builtin_arm_isb(i)
43*344a7f5eSAndroid Build Coastguard Worker #endif
44*344a7f5eSAndroid Build Coastguard Worker
45*344a7f5eSAndroid Build Coastguard Worker /* 8.4 Hints */
46*344a7f5eSAndroid Build Coastguard Worker
47*344a7f5eSAndroid Build Coastguard Worker #if !defined(_MSC_VER)
__wfi(void)48*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfi(void) {
49*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_wfi();
50*344a7f5eSAndroid Build Coastguard Worker }
51*344a7f5eSAndroid Build Coastguard Worker
__wfe(void)52*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __wfe(void) {
53*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_wfe();
54*344a7f5eSAndroid Build Coastguard Worker }
55*344a7f5eSAndroid Build Coastguard Worker
__sev(void)56*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sev(void) {
57*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_sev();
58*344a7f5eSAndroid Build Coastguard Worker }
59*344a7f5eSAndroid Build Coastguard Worker
__sevl(void)60*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __sevl(void) {
61*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_sevl();
62*344a7f5eSAndroid Build Coastguard Worker }
63*344a7f5eSAndroid Build Coastguard Worker
__yield(void)64*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __yield(void) {
65*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_yield();
66*344a7f5eSAndroid Build Coastguard Worker }
67*344a7f5eSAndroid Build Coastguard Worker #endif
68*344a7f5eSAndroid Build Coastguard Worker
69*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
70*344a7f5eSAndroid Build Coastguard Worker #define __dbg(t) __builtin_arm_dbg(t)
71*344a7f5eSAndroid Build Coastguard Worker #endif
72*344a7f5eSAndroid Build Coastguard Worker
73*344a7f5eSAndroid Build Coastguard Worker /* 8.5 Swap */
74*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__swp(uint32_t __x,volatile uint32_t * __p)75*344a7f5eSAndroid Build Coastguard Worker __swp(uint32_t __x, volatile uint32_t *__p) {
76*344a7f5eSAndroid Build Coastguard Worker uint32_t v;
77*344a7f5eSAndroid Build Coastguard Worker do
78*344a7f5eSAndroid Build Coastguard Worker v = __builtin_arm_ldrex(__p);
79*344a7f5eSAndroid Build Coastguard Worker while (__builtin_arm_strex(__x, __p));
80*344a7f5eSAndroid Build Coastguard Worker return v;
81*344a7f5eSAndroid Build Coastguard Worker }
82*344a7f5eSAndroid Build Coastguard Worker
83*344a7f5eSAndroid Build Coastguard Worker /* 8.6 Memory prefetch intrinsics */
84*344a7f5eSAndroid Build Coastguard Worker /* 8.6.1 Data prefetch */
85*344a7f5eSAndroid Build Coastguard Worker #define __pld(addr) __pldx(0, 0, 0, addr)
86*344a7f5eSAndroid Build Coastguard Worker
87*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
88*344a7f5eSAndroid Build Coastguard Worker #define __pldx(access_kind, cache_level, retention_policy, addr) \
89*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_prefetch(addr, access_kind, 1)
90*344a7f5eSAndroid Build Coastguard Worker #else
91*344a7f5eSAndroid Build Coastguard Worker #define __pldx(access_kind, cache_level, retention_policy, addr) \
92*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_prefetch(addr, access_kind, cache_level, retention_policy, 1)
93*344a7f5eSAndroid Build Coastguard Worker #endif
94*344a7f5eSAndroid Build Coastguard Worker
95*344a7f5eSAndroid Build Coastguard Worker /* 8.6.2 Instruction prefetch */
96*344a7f5eSAndroid Build Coastguard Worker #define __pli(addr) __plix(0, 0, addr)
97*344a7f5eSAndroid Build Coastguard Worker
98*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
99*344a7f5eSAndroid Build Coastguard Worker #define __plix(cache_level, retention_policy, addr) \
100*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_prefetch(addr, 0, 0)
101*344a7f5eSAndroid Build Coastguard Worker #else
102*344a7f5eSAndroid Build Coastguard Worker #define __plix(cache_level, retention_policy, addr) \
103*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_prefetch(addr, 0, cache_level, retention_policy, 0)
104*344a7f5eSAndroid Build Coastguard Worker #endif
105*344a7f5eSAndroid Build Coastguard Worker
106*344a7f5eSAndroid Build Coastguard Worker /* 8.7 NOP */
__nop(void)107*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __attribute__((__always_inline__, __nodebug__)) __nop(void) {
108*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_nop();
109*344a7f5eSAndroid Build Coastguard Worker }
110*344a7f5eSAndroid Build Coastguard Worker
111*344a7f5eSAndroid Build Coastguard Worker /* 9 DATA-PROCESSING INTRINSICS */
112*344a7f5eSAndroid Build Coastguard Worker /* 9.2 Miscellaneous data-processing intrinsics */
113*344a7f5eSAndroid Build Coastguard Worker /* ROR */
114*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__ror(uint32_t __x,uint32_t __y)115*344a7f5eSAndroid Build Coastguard Worker __ror(uint32_t __x, uint32_t __y) {
116*344a7f5eSAndroid Build Coastguard Worker __y %= 32;
117*344a7f5eSAndroid Build Coastguard Worker if (__y == 0)
118*344a7f5eSAndroid Build Coastguard Worker return __x;
119*344a7f5eSAndroid Build Coastguard Worker return (__x >> __y) | (__x << (32 - __y));
120*344a7f5eSAndroid Build Coastguard Worker }
121*344a7f5eSAndroid Build Coastguard Worker
122*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__rorll(uint64_t __x,uint32_t __y)123*344a7f5eSAndroid Build Coastguard Worker __rorll(uint64_t __x, uint32_t __y) {
124*344a7f5eSAndroid Build Coastguard Worker __y %= 64;
125*344a7f5eSAndroid Build Coastguard Worker if (__y == 0)
126*344a7f5eSAndroid Build Coastguard Worker return __x;
127*344a7f5eSAndroid Build Coastguard Worker return (__x >> __y) | (__x << (64 - __y));
128*344a7f5eSAndroid Build Coastguard Worker }
129*344a7f5eSAndroid Build Coastguard Worker
130*344a7f5eSAndroid Build Coastguard Worker static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
__rorl(unsigned long __x,uint32_t __y)131*344a7f5eSAndroid Build Coastguard Worker __rorl(unsigned long __x, uint32_t __y) {
132*344a7f5eSAndroid Build Coastguard Worker #if __SIZEOF_LONG__ == 4
133*344a7f5eSAndroid Build Coastguard Worker return __ror(__x, __y);
134*344a7f5eSAndroid Build Coastguard Worker #else
135*344a7f5eSAndroid Build Coastguard Worker return __rorll(__x, __y);
136*344a7f5eSAndroid Build Coastguard Worker #endif
137*344a7f5eSAndroid Build Coastguard Worker }
138*344a7f5eSAndroid Build Coastguard Worker
139*344a7f5eSAndroid Build Coastguard Worker
140*344a7f5eSAndroid Build Coastguard Worker /* CLZ */
141*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__clz(uint32_t __t)142*344a7f5eSAndroid Build Coastguard Worker __clz(uint32_t __t) {
143*344a7f5eSAndroid Build Coastguard Worker return __builtin_clz(__t);
144*344a7f5eSAndroid Build Coastguard Worker }
145*344a7f5eSAndroid Build Coastguard Worker
146*344a7f5eSAndroid Build Coastguard Worker static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
__clzl(unsigned long __t)147*344a7f5eSAndroid Build Coastguard Worker __clzl(unsigned long __t) {
148*344a7f5eSAndroid Build Coastguard Worker return __builtin_clzl(__t);
149*344a7f5eSAndroid Build Coastguard Worker }
150*344a7f5eSAndroid Build Coastguard Worker
151*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__clzll(uint64_t __t)152*344a7f5eSAndroid Build Coastguard Worker __clzll(uint64_t __t) {
153*344a7f5eSAndroid Build Coastguard Worker return __builtin_clzll(__t);
154*344a7f5eSAndroid Build Coastguard Worker }
155*344a7f5eSAndroid Build Coastguard Worker
156*344a7f5eSAndroid Build Coastguard Worker /* REV */
157*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__rev(uint32_t __t)158*344a7f5eSAndroid Build Coastguard Worker __rev(uint32_t __t) {
159*344a7f5eSAndroid Build Coastguard Worker return __builtin_bswap32(__t);
160*344a7f5eSAndroid Build Coastguard Worker }
161*344a7f5eSAndroid Build Coastguard Worker
162*344a7f5eSAndroid Build Coastguard Worker static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
__revl(unsigned long __t)163*344a7f5eSAndroid Build Coastguard Worker __revl(unsigned long __t) {
164*344a7f5eSAndroid Build Coastguard Worker #if __SIZEOF_LONG__ == 4
165*344a7f5eSAndroid Build Coastguard Worker return __builtin_bswap32(__t);
166*344a7f5eSAndroid Build Coastguard Worker #else
167*344a7f5eSAndroid Build Coastguard Worker return __builtin_bswap64(__t);
168*344a7f5eSAndroid Build Coastguard Worker #endif
169*344a7f5eSAndroid Build Coastguard Worker }
170*344a7f5eSAndroid Build Coastguard Worker
171*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__revll(uint64_t __t)172*344a7f5eSAndroid Build Coastguard Worker __revll(uint64_t __t) {
173*344a7f5eSAndroid Build Coastguard Worker return __builtin_bswap64(__t);
174*344a7f5eSAndroid Build Coastguard Worker }
175*344a7f5eSAndroid Build Coastguard Worker
176*344a7f5eSAndroid Build Coastguard Worker /* REV16 */
177*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__rev16(uint32_t __t)178*344a7f5eSAndroid Build Coastguard Worker __rev16(uint32_t __t) {
179*344a7f5eSAndroid Build Coastguard Worker return __ror(__rev(__t), 16);
180*344a7f5eSAndroid Build Coastguard Worker }
181*344a7f5eSAndroid Build Coastguard Worker
182*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__rev16ll(uint64_t __t)183*344a7f5eSAndroid Build Coastguard Worker __rev16ll(uint64_t __t) {
184*344a7f5eSAndroid Build Coastguard Worker return (((uint64_t)__rev16(__t >> 32)) << 32) | __rev16(__t);
185*344a7f5eSAndroid Build Coastguard Worker }
186*344a7f5eSAndroid Build Coastguard Worker
187*344a7f5eSAndroid Build Coastguard Worker static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
__rev16l(unsigned long __t)188*344a7f5eSAndroid Build Coastguard Worker __rev16l(unsigned long __t) {
189*344a7f5eSAndroid Build Coastguard Worker #if __SIZEOF_LONG__ == 4
190*344a7f5eSAndroid Build Coastguard Worker return __rev16(__t);
191*344a7f5eSAndroid Build Coastguard Worker #else
192*344a7f5eSAndroid Build Coastguard Worker return __rev16ll(__t);
193*344a7f5eSAndroid Build Coastguard Worker #endif
194*344a7f5eSAndroid Build Coastguard Worker }
195*344a7f5eSAndroid Build Coastguard Worker
196*344a7f5eSAndroid Build Coastguard Worker /* REVSH */
197*344a7f5eSAndroid Build Coastguard Worker static __inline__ int16_t __attribute__((__always_inline__, __nodebug__))
__revsh(int16_t __t)198*344a7f5eSAndroid Build Coastguard Worker __revsh(int16_t __t) {
199*344a7f5eSAndroid Build Coastguard Worker return __builtin_bswap16(__t);
200*344a7f5eSAndroid Build Coastguard Worker }
201*344a7f5eSAndroid Build Coastguard Worker
202*344a7f5eSAndroid Build Coastguard Worker /* RBIT */
203*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__rbit(uint32_t __t)204*344a7f5eSAndroid Build Coastguard Worker __rbit(uint32_t __t) {
205*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_rbit(__t);
206*344a7f5eSAndroid Build Coastguard Worker }
207*344a7f5eSAndroid Build Coastguard Worker
208*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint64_t __attribute__((__always_inline__, __nodebug__))
__rbitll(uint64_t __t)209*344a7f5eSAndroid Build Coastguard Worker __rbitll(uint64_t __t) {
210*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
211*344a7f5eSAndroid Build Coastguard Worker return (((uint64_t)__builtin_arm_rbit(__t)) << 32) |
212*344a7f5eSAndroid Build Coastguard Worker __builtin_arm_rbit(__t >> 32);
213*344a7f5eSAndroid Build Coastguard Worker #else
214*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_rbit64(__t);
215*344a7f5eSAndroid Build Coastguard Worker #endif
216*344a7f5eSAndroid Build Coastguard Worker }
217*344a7f5eSAndroid Build Coastguard Worker
218*344a7f5eSAndroid Build Coastguard Worker static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
__rbitl(unsigned long __t)219*344a7f5eSAndroid Build Coastguard Worker __rbitl(unsigned long __t) {
220*344a7f5eSAndroid Build Coastguard Worker #if __SIZEOF_LONG__ == 4
221*344a7f5eSAndroid Build Coastguard Worker return __rbit(__t);
222*344a7f5eSAndroid Build Coastguard Worker #else
223*344a7f5eSAndroid Build Coastguard Worker return __rbitll(__t);
224*344a7f5eSAndroid Build Coastguard Worker #endif
225*344a7f5eSAndroid Build Coastguard Worker }
226*344a7f5eSAndroid Build Coastguard Worker
227*344a7f5eSAndroid Build Coastguard Worker /*
228*344a7f5eSAndroid Build Coastguard Worker * 9.4 Saturating intrinsics
229*344a7f5eSAndroid Build Coastguard Worker *
230*344a7f5eSAndroid Build Coastguard Worker * FIXME: Change guard to their corrosponding __ARM_FEATURE flag when Q flag
231*344a7f5eSAndroid Build Coastguard Worker * intrinsics are implemented and the flag is enabled.
232*344a7f5eSAndroid Build Coastguard Worker */
233*344a7f5eSAndroid Build Coastguard Worker /* 9.4.1 Width-specified saturation intrinsics */
234*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
235*344a7f5eSAndroid Build Coastguard Worker #define __ssat(x, y) __builtin_arm_ssat(x, y)
236*344a7f5eSAndroid Build Coastguard Worker #define __usat(x, y) __builtin_arm_usat(x, y)
237*344a7f5eSAndroid Build Coastguard Worker #endif
238*344a7f5eSAndroid Build Coastguard Worker
239*344a7f5eSAndroid Build Coastguard Worker /* 9.4.2 Saturating addition and subtraction intrinsics */
240*344a7f5eSAndroid Build Coastguard Worker #if __ARM_32BIT_STATE
241*344a7f5eSAndroid Build Coastguard Worker static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
__qadd(int32_t __t,int32_t __v)242*344a7f5eSAndroid Build Coastguard Worker __qadd(int32_t __t, int32_t __v) {
243*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_qadd(__t, __v);
244*344a7f5eSAndroid Build Coastguard Worker }
245*344a7f5eSAndroid Build Coastguard Worker
246*344a7f5eSAndroid Build Coastguard Worker static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
__qsub(int32_t __t,int32_t __v)247*344a7f5eSAndroid Build Coastguard Worker __qsub(int32_t __t, int32_t __v) {
248*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_qsub(__t, __v);
249*344a7f5eSAndroid Build Coastguard Worker }
250*344a7f5eSAndroid Build Coastguard Worker
251*344a7f5eSAndroid Build Coastguard Worker static __inline__ int32_t __attribute__((__always_inline__, __nodebug__))
__qdbl(int32_t __t)252*344a7f5eSAndroid Build Coastguard Worker __qdbl(int32_t __t) {
253*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_qadd(__t, __t);
254*344a7f5eSAndroid Build Coastguard Worker }
255*344a7f5eSAndroid Build Coastguard Worker #endif
256*344a7f5eSAndroid Build Coastguard Worker
257*344a7f5eSAndroid Build Coastguard Worker /* 9.7 CRC32 intrinsics */
258*344a7f5eSAndroid Build Coastguard Worker #if __ARM_FEATURE_CRC32
259*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32b(uint32_t __a,uint8_t __b)260*344a7f5eSAndroid Build Coastguard Worker __crc32b(uint32_t __a, uint8_t __b) {
261*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32b(__a, __b);
262*344a7f5eSAndroid Build Coastguard Worker }
263*344a7f5eSAndroid Build Coastguard Worker
264*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32h(uint32_t __a,uint16_t __b)265*344a7f5eSAndroid Build Coastguard Worker __crc32h(uint32_t __a, uint16_t __b) {
266*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32h(__a, __b);
267*344a7f5eSAndroid Build Coastguard Worker }
268*344a7f5eSAndroid Build Coastguard Worker
269*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32w(uint32_t __a,uint32_t __b)270*344a7f5eSAndroid Build Coastguard Worker __crc32w(uint32_t __a, uint32_t __b) {
271*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32w(__a, __b);
272*344a7f5eSAndroid Build Coastguard Worker }
273*344a7f5eSAndroid Build Coastguard Worker
274*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32d(uint32_t __a,uint64_t __b)275*344a7f5eSAndroid Build Coastguard Worker __crc32d(uint32_t __a, uint64_t __b) {
276*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32d(__a, __b);
277*344a7f5eSAndroid Build Coastguard Worker }
278*344a7f5eSAndroid Build Coastguard Worker
279*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32cb(uint32_t __a,uint8_t __b)280*344a7f5eSAndroid Build Coastguard Worker __crc32cb(uint32_t __a, uint8_t __b) {
281*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32cb(__a, __b);
282*344a7f5eSAndroid Build Coastguard Worker }
283*344a7f5eSAndroid Build Coastguard Worker
284*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32ch(uint32_t __a,uint16_t __b)285*344a7f5eSAndroid Build Coastguard Worker __crc32ch(uint32_t __a, uint16_t __b) {
286*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32ch(__a, __b);
287*344a7f5eSAndroid Build Coastguard Worker }
288*344a7f5eSAndroid Build Coastguard Worker
289*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32cw(uint32_t __a,uint32_t __b)290*344a7f5eSAndroid Build Coastguard Worker __crc32cw(uint32_t __a, uint32_t __b) {
291*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32cw(__a, __b);
292*344a7f5eSAndroid Build Coastguard Worker }
293*344a7f5eSAndroid Build Coastguard Worker
294*344a7f5eSAndroid Build Coastguard Worker static __inline__ uint32_t __attribute__((__always_inline__, __nodebug__))
__crc32cd(uint32_t __a,uint64_t __b)295*344a7f5eSAndroid Build Coastguard Worker __crc32cd(uint32_t __a, uint64_t __b) {
296*344a7f5eSAndroid Build Coastguard Worker return __builtin_arm_crc32cd(__a, __b);
297*344a7f5eSAndroid Build Coastguard Worker }
298*344a7f5eSAndroid Build Coastguard Worker #endif
299*344a7f5eSAndroid Build Coastguard Worker
300*344a7f5eSAndroid Build Coastguard Worker /* 10.1 Special register intrinsics */
301*344a7f5eSAndroid Build Coastguard Worker #define __arm_rsr(sysreg) __builtin_arm_rsr(sysreg)
302*344a7f5eSAndroid Build Coastguard Worker #define __arm_rsr64(sysreg) __builtin_arm_rsr64(sysreg)
303*344a7f5eSAndroid Build Coastguard Worker #define __arm_rsrp(sysreg) __builtin_arm_rsrp(sysreg)
304*344a7f5eSAndroid Build Coastguard Worker #define __arm_wsr(sysreg, v) __builtin_arm_wsr(sysreg, v)
305*344a7f5eSAndroid Build Coastguard Worker #define __arm_wsr64(sysreg, v) __builtin_arm_wsr64(sysreg, v)
306*344a7f5eSAndroid Build Coastguard Worker #define __arm_wsrp(sysreg, v) __builtin_arm_wsrp(sysreg, v)
307*344a7f5eSAndroid Build Coastguard Worker
308*344a7f5eSAndroid Build Coastguard Worker #if defined(__cplusplus)
309*344a7f5eSAndroid Build Coastguard Worker }
310*344a7f5eSAndroid Build Coastguard Worker #endif
311*344a7f5eSAndroid Build Coastguard Worker
312*344a7f5eSAndroid Build Coastguard Worker #endif /* __ARM_ACLE_H */
313