/src/WasmEdge/include/experimental/bit.hpp
Line | Count | Source |
1 | | // SPDX-License-Identifier: CC0-1.0 |
2 | | /// |
3 | | // bit - A C++20 implementation of std::bit_cast |
4 | | // |
5 | | // To the extent possible under law, the author(s) have dedicated all |
6 | | // copyright and related and neighboring rights to this software to the |
7 | | // public domain worldwide. This software is distributed without any warranty. |
8 | | // |
9 | | // You should have received a copy of the CC0 Public Domain Dedication |
10 | | // along with this software. If not, see |
11 | | // <http://creativecommons.org/publicdomain/zero/1.0/>. |
12 | | /// |
13 | | |
14 | | #pragma once |
15 | | |
16 | | #include <cstring> |
17 | | #include <type_traits> |
18 | | #if __cplusplus > 201703L && __has_include(<bit>) |
19 | | #include <bit> |
20 | | #endif |
21 | | |
22 | | #if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L |
23 | | namespace cxx20 { |
24 | | using std::bit_cast; |
25 | | } // namespace cxx20 |
26 | | #else |
27 | | |
28 | | #if defined(__has_builtin) |
29 | | #if __has_builtin(__builtin_bit_cast) |
30 | | #define CXX20_HAS_BUILTIN_BIT_CAST 1 |
31 | | #endif |
32 | | #endif |
33 | | #if !defined(CXX20_HAS_BUILTIN_BIT_CAST) && defined(_MSC_VER) && \ |
34 | | _MSC_VER >= 1927 |
35 | | #define CXX20_HAS_BUILTIN_BIT_CAST 1 |
36 | | #endif |
37 | | |
38 | | namespace cxx20 { |
39 | | |
40 | | template <class To, class From> |
41 | | #if defined(CXX20_HAS_BUILTIN_BIT_CAST) |
42 | | constexpr |
43 | | #endif |
44 | | std::enable_if_t<sizeof(To) == sizeof(From) && |
45 | | std::is_trivially_copyable_v<To> && |
46 | | std::is_trivially_copyable_v<From>, |
47 | 0 | To> bit_cast(const From &Src) noexcept { |
48 | 0 | #if defined(CXX20_HAS_BUILTIN_BIT_CAST) |
49 | 0 | return __builtin_bit_cast(To, Src); |
50 | | #else |
51 | | static_assert(std::is_trivially_default_constructible_v<To>); |
52 | | To Dst; |
53 | | std::memcpy(static_cast<void *>(&Dst), &Src, sizeof(To)); |
54 | | return Dst; |
55 | | #endif |
56 | 0 | } Unexecuted instantiation: _ZN5cxx208bit_castIN8WasmEdge7ValTypeEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayImLm2EEEDv2_mEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS6_Esr3stdE23is_trivially_copyable_vIS7_EES6_E4typeERKS7_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIiNS2_6detail14vector_ext_abiILi4EEEEENS3_IsNS5_ILi8EEEEEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISC_Esr3stdE23is_trivially_copyable_vISD_EESC_E4typeERKSD_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIfNS2_6detail14vector_ext_abiILi4EEEEENSt3__15arrayINS3_IfNS5_ILi2EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIfNS4_6detail14vector_ext_abiILi2EEEEELm2EEENS5_IfNS7_ILi4EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIfjEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS3_Esr3stdE23is_trivially_copyable_vIS4_EES3_E4typeERKS4_ Unexecuted instantiation: _ZN5cxx208bit_castIjfEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS3_Esr3stdE23is_trivially_copyable_vIS4_EES3_E4typeERKS4_ Unexecuted instantiation: _ZN5cxx208bit_castIdmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS3_Esr3stdE23is_trivially_copyable_vIS4_EES3_E4typeERKS4_ Unexecuted instantiation: _ZN5cxx208bit_castImdEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS3_Esr3stdE23is_trivially_copyable_vIS4_EES3_E4typeERKS4_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIaNS2_6detail14vector_ext_abiILi8EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIhNS2_6detail14vector_ext_abiILi8EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIsNS2_6detail14vector_ext_abiILi4EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecItNS2_6detail14vector_ext_abiILi4EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIiNS2_6detail14vector_ext_abiILi2EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIjNS2_6detail14vector_ext_abiILi2EEEEEmEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIhNS2_6detail14vector_ext_abiILi16EEEEENS3_IaS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIaNS2_6detail14vector_ext_abiILi16EEEEES7_EENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecItNS2_6detail14vector_ext_abiILi8EEEEENS3_IsS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIsNS2_6detail14vector_ext_abiILi8EEEEES7_EENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIjNS2_6detail14vector_ext_abiILi4EEEEENS3_IiS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIiNS2_6detail14vector_ext_abiILi4EEEEES7_EENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecImNS2_6detail14vector_ext_abiILi2EEEEENS3_IlS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIlNS2_6detail14vector_ext_abiILi2EEEEES7_EENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISA_Esr3stdE23is_trivially_copyable_vISB_EESA_E4typeERKSB_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIfNS2_6detail14vector_ext_abiILi4EEEEENS3_IiS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIdNS2_6detail14vector_ext_abiILi2EEEEENS3_IlS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv16_aEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIaNS2_6detail14vector_ext_abiILi16EEEEENSt3__15arrayINS3_IaNS5_ILi8EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIhNS2_6detail14vector_ext_abiILi16EEEEENSt3__15arrayINS3_IhNS5_ILi8EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIaNS2_6detail14vector_ext_abiILi16EEEEENS3_IhS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv8_sEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIsNS2_6detail14vector_ext_abiILi8EEEEENSt3__15arrayINS3_IsNS5_ILi4EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecItNS2_6detail14vector_ext_abiILi8EEEEENSt3__15arrayINS3_ItNS5_ILi4EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIaNS4_6detail14vector_ext_abiILi8EEEEELm2EEENS5_IaNS7_ILi16EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIhNS4_6detail14vector_ext_abiILi8EEEEELm2EEENS5_IhNS7_ILi16EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIsNS2_6detail14vector_ext_abiILi8EEEEENS3_ItS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv4_iEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIsNS4_6detail14vector_ext_abiILi4EEEEELm2EEENS5_IsNS7_ILi8EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecItNS4_6detail14vector_ext_abiILi4EEEEELm2EEENS5_ItNS7_ILi8EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv2_lEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIiNS4_6detail14vector_ext_abiILi2EEEEELm2EEENS5_IiNS7_ILi4EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castINSt3__15arrayIN5cxx264simd9basic_vecIjNS4_6detail14vector_ext_abiILi2EEEEELm2EEENS5_IjNS7_ILi4EEEEEEENS1_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIfNS2_6detail14vector_ext_abiILi4EEEEENS3_IjS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIjNS2_6detail14vector_ext_abiILi4EEEEENS3_IfS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIDv4_fDv2_xEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv4_fEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIdNS2_6detail14vector_ext_abiILi2EEEEENS3_ImS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecImNS2_6detail14vector_ext_abiILi2EEEEENS3_IdS6_EEEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISB_Esr3stdE23is_trivially_copyable_vISC_EESB_E4typeERKSC_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_dDv2_xEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIDv2_xDv2_dEENSt3__19enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vIS5_Esr3stdE23is_trivially_copyable_vIS6_EES5_E4typeERKS6_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIiNS2_6detail14vector_ext_abiILi4EEEEENSt3__15arrayINS3_IiNS5_ILi2EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ Unexecuted instantiation: _ZN5cxx208bit_castIN5cxx264simd9basic_vecIjNS2_6detail14vector_ext_abiILi4EEEEENSt3__15arrayINS3_IjNS5_ILi2EEEEELm2EEEEENS8_9enable_ifIXaaaaeqstT_stT0_sr3stdE23is_trivially_copyable_vISE_Esr3stdE23is_trivially_copyable_vISF_EESE_E4typeERKSF_ |
57 | | |
58 | | } // namespace cxx20 |
59 | | |
60 | | #undef CXX20_HAS_BUILTIN_BIT_CAST |
61 | | #endif |