clang 22.0.0git
hlsl_detail.h
Go to the documentation of this file.
1//===----- hlsl_detail.h - HLSL definitions for 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#ifndef _HLSL_HLSL_DETAILS_H_
10#define _HLSL_HLSL_DETAILS_H_
11
12namespace hlsl {
13
14namespace __detail {
15
16template <typename T, typename U> struct is_same {
17 static const bool value = false;
18};
19
20template <typename T> struct is_same<T, T> {
21 static const bool value = true;
22};
23
24template <bool B, typename T> struct enable_if {};
25
26template <typename T> struct enable_if<true, T> {
27 using Type = T;
28};
29
30template <bool B, class T = void>
32
33template <typename U, typename T, int N>
34constexpr enable_if_t<sizeof(U) == sizeof(T), vector<U, N>>
35bit_cast(vector<T, N> V) {
36 return __builtin_bit_cast(vector<U, N>, V);
37}
38
39template <typename U, typename T>
40constexpr enable_if_t<sizeof(U) == sizeof(T), U> bit_cast(T F) {
41 return __builtin_bit_cast(U, F);
42}
43
44template <typename T> struct is_arithmetic {
45 static const bool Value = __is_arithmetic(T);
46};
47
48template <typename T, int N>
50 vector<__detail::enable_if_t<(N > 1 && N <= 4), T>, N>;
51
52} // namespace __detail
53} // namespace hlsl
54#endif //_HLSL_HLSL_DETAILS_H_
#define V(N, I)
typename enable_if< B, T >::Type enable_if_t
Definition hlsl_detail.h:31
vector< __detail::enable_if_t<(N > 1 &&N<=4), T >, N > HLSL_FIXED_VECTOR
Definition hlsl_detail.h:49
constexpr enable_if_t< sizeof(U)==sizeof(T), vector< U, N > > bit_cast(vector< T, N > V)
Definition hlsl_detail.h:35
#define true
Definition stdbool.h:25
static const bool value
Definition hlsl_detail.h:17