zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

tbmintrin.h (3507B) - Raw


      1 /*===---- tbmintrin.h - TBM intrinsics -------------------------------------===
      2  *
      3  * 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
      6  *
      7  *===-----------------------------------------------------------------------===
      8  */
      9 
     10 #ifndef __X86INTRIN_H
     11 #error "Never use <tbmintrin.h> directly; include <x86intrin.h> instead."
     12 #endif
     13 
     14 #ifndef __TBMINTRIN_H
     15 #define __TBMINTRIN_H
     16 
     17 /* Define the default attributes for the functions in this file. */
     18 #if defined(__cplusplus) && (__cplusplus >= 201103L)
     19 #define __DEFAULT_FN_ATTRS                                                     \
     20   __attribute__((__always_inline__, __nodebug__, __target__("tbm"))) constexpr
     21 #else
     22 #define __DEFAULT_FN_ATTRS                                                     \
     23   __attribute__((__always_inline__, __nodebug__, __target__("tbm")))
     24 #endif
     25 
     26 #define __bextri_u32(a, b) \
     27   ((unsigned int)__builtin_ia32_bextri_u32((unsigned int)(a), \
     28                                            (unsigned int)(b)))
     29 
     30 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     31 __blcfill_u32(unsigned int __a) {
     32   return __a & (__a + 1);
     33 }
     34 
     35 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     36 __blci_u32(unsigned int __a) {
     37   return __a | ~(__a + 1);
     38 }
     39 
     40 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     41 __blcic_u32(unsigned int __a) {
     42   return ~__a & (__a + 1);
     43 }
     44 
     45 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     46 __blcmsk_u32(unsigned int __a) {
     47   return __a ^ (__a + 1);
     48 }
     49 
     50 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     51 __blcs_u32(unsigned int __a) {
     52   return __a | (__a + 1);
     53 }
     54 
     55 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     56 __blsfill_u32(unsigned int __a) {
     57   return __a | (__a - 1);
     58 }
     59 
     60 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     61 __blsic_u32(unsigned int __a) {
     62   return ~__a | (__a - 1);
     63 }
     64 
     65 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     66 __t1mskc_u32(unsigned int __a) {
     67   return ~__a | (__a + 1);
     68 }
     69 
     70 static __inline__ unsigned int __DEFAULT_FN_ATTRS
     71 __tzmsk_u32(unsigned int __a) {
     72   return ~__a & (__a - 1);
     73 }
     74 
     75 #ifdef __x86_64__
     76 #define __bextri_u64(a, b) \
     77   ((unsigned long long)__builtin_ia32_bextri_u64((unsigned long long)(a), \
     78                                                  (unsigned long long)(b)))
     79 
     80 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
     81 __blcfill_u64(unsigned long long __a) {
     82   return __a & (__a + 1);
     83 }
     84 
     85 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
     86 __blci_u64(unsigned long long __a) {
     87   return __a | ~(__a + 1);
     88 }
     89 
     90 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
     91 __blcic_u64(unsigned long long __a) {
     92   return ~__a & (__a + 1);
     93 }
     94 
     95 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
     96 __blcmsk_u64(unsigned long long __a) {
     97   return __a ^ (__a + 1);
     98 }
     99 
    100 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
    101 __blcs_u64(unsigned long long __a) {
    102   return __a | (__a + 1);
    103 }
    104 
    105 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
    106 __blsfill_u64(unsigned long long __a) {
    107   return __a | (__a - 1);
    108 }
    109 
    110 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
    111 __blsic_u64(unsigned long long __a) {
    112   return ~__a | (__a - 1);
    113 }
    114 
    115 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
    116 __t1mskc_u64(unsigned long long __a) {
    117   return ~__a | (__a + 1);
    118 }
    119 
    120 static __inline__ unsigned long long __DEFAULT_FN_ATTRS
    121 __tzmsk_u64(unsigned long long __a) {
    122   return ~__a & (__a - 1);
    123 }
    124 #endif
    125 
    126 #undef __DEFAULT_FN_ATTRS
    127 
    128 #endif /* __TBMINTRIN_H */