11188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker/*===---- adxintrin.h - ADX intrinsics -------------------------------------===
21188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker *
31188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * Permission is hereby granted, free of charge, to any person obtaining a copy
41188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * of this software and associated documentation files (the "Software"), to deal
51188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * in the Software without restriction, including without limitation the rights
61188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
71188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * copies of the Software, and to permit persons to whom the Software is
81188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * furnished to do so, subject to the following conditions:
91188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker *
101188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * The above copyright notice and this permission notice shall be included in
111188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * all copies or substantial portions of the Software.
121188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker *
131188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
141188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
151188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
161188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
171188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
181188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
191188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker * THE SOFTWARE.
201188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker *
211188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker *===-----------------------------------------------------------------------===
221188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker */
231188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
241188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifndef __IMMINTRIN_H
251188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#error "Never use <adxintrin.h> directly; include <immintrin.h> instead."
261188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif
271188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
281188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifndef __ADXINTRIN_H
291188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#define __ADXINTRIN_H
301188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
311188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker/* Define the default attributes for the functions in this file. */
321188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
331188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
341188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker/* Intrinsics that are available only if __ADX__ defined */
351188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx")))
361188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y,
371188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker               unsigned int *__p)
381188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
391188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_addcarryx_u32(__cf, __x, __y, __p);
401188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
411188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
421188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifdef __x86_64__
431188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __attribute__((__always_inline__, __nodebug__, __target__("adx")))
441188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_addcarryx_u64(unsigned char __cf, unsigned long long __x,
451188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker               unsigned long long __y, unsigned long long  *__p)
461188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
471188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_addcarryx_u64(__cf, __x, __y, __p);
481188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
491188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif
501188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
511188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker/* Intrinsics that are also available if __ADX__ undefined */
521188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __DEFAULT_FN_ATTRS
531188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y,
541188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker              unsigned int *__p)
551188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
561188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_addcarry_u32(__cf, __x, __y, __p);
571188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
581188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
591188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifdef __x86_64__
601188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __DEFAULT_FN_ATTRS
611188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_addcarry_u64(unsigned char __cf, unsigned long long __x,
621188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker              unsigned long long __y, unsigned long long  *__p)
631188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
641188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_addcarry_u64(__cf, __x, __y, __p);
651188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
661188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif
671188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
681188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __DEFAULT_FN_ATTRS
691188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_subborrow_u32(unsigned char __cf, unsigned int __x, unsigned int __y,
701188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker              unsigned int *__p)
711188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
721188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_subborrow_u32(__cf, __x, __y, __p);
731188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
741188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
751188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#ifdef __x86_64__
761188dcf30923cb444143ffa4b83dc951037e76agitbuildkickerstatic __inline unsigned char __DEFAULT_FN_ATTRS
771188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker_subborrow_u64(unsigned char __cf, unsigned long long __x,
781188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker               unsigned long long __y, unsigned long long  *__p)
791188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker{
801188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker  return __builtin_ia32_subborrow_u64(__cf, __x, __y, __p);
811188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker}
821188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif
831188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
841188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#undef __DEFAULT_FN_ATTRS
851188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker
861188dcf30923cb444143ffa4b83dc951037e76agitbuildkicker#endif /* __ADXINTRIN_H */
87