brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · cf92d5a Raw
129 lines · c
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-exception6 *7 *===-----------------------------------------------------------------------===8 */9 10#ifndef __X86INTRIN_H11#error "Never use <tbmintrin.h> directly; include <x86intrin.h> instead."12#endif13 14#ifndef __TBMINTRIN_H15#define __TBMINTRIN_H16 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"))) constexpr21#else22#define __DEFAULT_FN_ATTRS                                                     \23  __attribute__((__always_inline__, __nodebug__, __target__("tbm")))24#endif25 26#define __bextri_u32(a, b) \27  ((unsigned int)__builtin_ia32_bextri_u32((unsigned int)(a), \28                                           (unsigned int)(b)))29 30static __inline__ unsigned int __DEFAULT_FN_ATTRS31__blcfill_u32(unsigned int __a) {32  return __a & (__a + 1);33}34 35static __inline__ unsigned int __DEFAULT_FN_ATTRS36__blci_u32(unsigned int __a) {37  return __a | ~(__a + 1);38}39 40static __inline__ unsigned int __DEFAULT_FN_ATTRS41__blcic_u32(unsigned int __a) {42  return ~__a & (__a + 1);43}44 45static __inline__ unsigned int __DEFAULT_FN_ATTRS46__blcmsk_u32(unsigned int __a) {47  return __a ^ (__a + 1);48}49 50static __inline__ unsigned int __DEFAULT_FN_ATTRS51__blcs_u32(unsigned int __a) {52  return __a | (__a + 1);53}54 55static __inline__ unsigned int __DEFAULT_FN_ATTRS56__blsfill_u32(unsigned int __a) {57  return __a | (__a - 1);58}59 60static __inline__ unsigned int __DEFAULT_FN_ATTRS61__blsic_u32(unsigned int __a) {62  return ~__a | (__a - 1);63}64 65static __inline__ unsigned int __DEFAULT_FN_ATTRS66__t1mskc_u32(unsigned int __a) {67  return ~__a | (__a + 1);68}69 70static __inline__ unsigned int __DEFAULT_FN_ATTRS71__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 80static __inline__ unsigned long long __DEFAULT_FN_ATTRS81__blcfill_u64(unsigned long long __a) {82  return __a & (__a + 1);83}84 85static __inline__ unsigned long long __DEFAULT_FN_ATTRS86__blci_u64(unsigned long long __a) {87  return __a | ~(__a + 1);88}89 90static __inline__ unsigned long long __DEFAULT_FN_ATTRS91__blcic_u64(unsigned long long __a) {92  return ~__a & (__a + 1);93}94 95static __inline__ unsigned long long __DEFAULT_FN_ATTRS96__blcmsk_u64(unsigned long long __a) {97  return __a ^ (__a + 1);98}99 100static __inline__ unsigned long long __DEFAULT_FN_ATTRS101__blcs_u64(unsigned long long __a) {102  return __a | (__a + 1);103}104 105static __inline__ unsigned long long __DEFAULT_FN_ATTRS106__blsfill_u64(unsigned long long __a) {107  return __a | (__a - 1);108}109 110static __inline__ unsigned long long __DEFAULT_FN_ATTRS111__blsic_u64(unsigned long long __a) {112  return ~__a | (__a - 1);113}114 115static __inline__ unsigned long long __DEFAULT_FN_ATTRS116__t1mskc_u64(unsigned long long __a) {117  return ~__a | (__a + 1);118}119 120static __inline__ unsigned long long __DEFAULT_FN_ATTRS121__tzmsk_u64(unsigned long long __a) {122  return ~__a & (__a - 1);123}124#endif125 126#undef __DEFAULT_FN_ATTRS127 128#endif /* __TBMINTRIN_H */129