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