1ef2a104cSTimm Baeder //===------------------ InterpBuiltinBitCast.h ------------------*- C++ -*-===// 2ef2a104cSTimm Baeder // 3ef2a104cSTimm Baeder // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ef2a104cSTimm Baeder // See https://llvm.org/LICENSE.txt for license information. 5ef2a104cSTimm Baeder // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ef2a104cSTimm Baeder // 7ef2a104cSTimm Baeder //===----------------------------------------------------------------------===// 8ef2a104cSTimm Baeder 98713914dSTimm Baeder #ifndef LLVM_CLANG_AST_INTERP_BUILTIN_BIT_CAST_H 108713914dSTimm Baeder #define LLVM_CLANG_AST_INTERP_BUILTIN_BIT_CAST_H 11ef2a104cSTimm Baeder 121fbbf4c4STimm Baeder #include "BitcastBuffer.h" 13ef2a104cSTimm Baeder #include <cstddef> 14ef2a104cSTimm Baeder 15ef2a104cSTimm Baeder namespace clang { 16ef2a104cSTimm Baeder namespace interp { 17ef2a104cSTimm Baeder class Pointer; 18ef2a104cSTimm Baeder class InterpState; 19ef2a104cSTimm Baeder class CodePtr; 208713914dSTimm Baeder class Context; 21ef2a104cSTimm Baeder 2230cbd09fSTimm Baeder inline static void swapBytes(std::byte *M, size_t N) { 2330cbd09fSTimm Baeder for (size_t I = 0; I != (N / 2); ++I) 2430cbd09fSTimm Baeder std::swap(M[I], M[N - 1 - I]); 2530cbd09fSTimm Baeder } 2630cbd09fSTimm Baeder 27ef2a104cSTimm Baeder bool DoBitCast(InterpState &S, CodePtr OpPC, const Pointer &Ptr, 281fbbf4c4STimm Baeder std::byte *Buff, Bits BitWidth, Bits FullBitWidth, 291fbbf4c4STimm Baeder bool &HasIndeterminateBits); 302588b8beSTimm Baeder bool DoBitCastPtr(InterpState &S, CodePtr OpPC, const Pointer &FromPtr, 312588b8beSTimm Baeder Pointer &ToPtr); 32abc27039STimm Baeder bool DoBitCastPtr(InterpState &S, CodePtr OpPC, const Pointer &FromPtr, 33abc27039STimm Baeder Pointer &ToPtr, size_t Size); 348713914dSTimm Baeder bool readPointerToBuffer(const Context &Ctx, const Pointer &FromPtr, 358713914dSTimm Baeder BitcastBuffer &Buffer, bool ReturnOnUninit); 36*1f2d9345STimm Baeder 37*1f2d9345STimm Baeder bool DoMemcpy(InterpState &S, CodePtr OpPC, const Pointer &SrcPtr, 38*1f2d9345STimm Baeder const Pointer &DestPtr, Bits Size); 39*1f2d9345STimm Baeder 40ef2a104cSTimm Baeder } // namespace interp 41ef2a104cSTimm Baeder } // namespace clang 42ef2a104cSTimm Baeder 43ef2a104cSTimm Baeder #endif 44