diff options
Diffstat (limited to '3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp')
-rw-r--r-- | 3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp b/3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp index 33377e9f98b..04d09807076 100644 --- a/3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp +++ b/3rdparty/asmjit/src/asmjit/x86/x86compiler.cpp @@ -1,72 +1,38 @@ -// AsmJit - Machine code generation for C++ +// This file is part of AsmJit project <https://asmjit.com> // -// * Official AsmJit Home Page: https://asmjit.com -// * Official Github Repository: https://github.com/asmjit/asmjit -// -// Copyright (c) 2008-2020 The AsmJit Authors -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. +// See asmjit.h or LICENSE.md for license and copyright information +// SPDX-License-Identifier: Zlib #include "../core/api-build_p.h" -#if defined(ASMJIT_BUILD_X86) && !defined(ASMJIT_NO_COMPILER) +#if !defined(ASMJIT_NO_X86) && !defined(ASMJIT_NO_COMPILER) #include "../x86/x86assembler.h" #include "../x86/x86compiler.h" +#include "../x86/x86instapi_p.h" #include "../x86/x86rapass_p.h" ASMJIT_BEGIN_SUB_NAMESPACE(x86) -// ============================================================================ -// [asmjit::x86::Compiler - Construction / Destruction] -// ============================================================================ +// x86::Compiler - Construction & Destruction +// ========================================== Compiler::Compiler(CodeHolder* code) noexcept : BaseCompiler() { + _archMask = (uint64_t(1) << uint32_t(Arch::kX86)) | + (uint64_t(1) << uint32_t(Arch::kX64)) ; + assignEmitterFuncs(this); + if (code) code->attach(this); } Compiler::~Compiler() noexcept {} -// ============================================================================ -// [asmjit::x86::Compiler - Finalize] -// ============================================================================ - -Error Compiler::finalize() { - ASMJIT_PROPAGATE(runPasses()); - Assembler a(_code); - a.addEncodingOptions(encodingOptions()); - a.addValidationOptions(validationOptions()); - return serialize(&a); -} -// ============================================================================ -// [asmjit::x86::Compiler - Events] -// ============================================================================ +// x86::Compiler - Events +// ====================== Error Compiler::onAttach(CodeHolder* code) noexcept { - uint32_t arch = code->arch(); - if (!Environment::isFamilyX86(arch)) - return DebugUtils::errored(kErrorInvalidArch); - ASMJIT_PROPAGATE(Base::onAttach(code)); - - bool is32Bit = Environment::is32Bit(arch); - _gpRegInfo.setSignature(is32Bit ? uint32_t(Gpd::kSignature) - : uint32_t(Gpq::kSignature)); - Error err = addPassT<X86RAPass>(); + if (ASMJIT_UNLIKELY(err)) { onDetach(code); return err; @@ -75,6 +41,21 @@ Error Compiler::onAttach(CodeHolder* code) noexcept { return kErrorOk; } +Error Compiler::onDetach(CodeHolder* code) noexcept { + return Base::onDetach(code); +} + +// x86::Compiler - Finalize +// ======================== + +Error Compiler::finalize() { + ASMJIT_PROPAGATE(runPasses()); + Assembler a(_code); + a.addEncodingOptions(encodingOptions()); + a.addDiagnosticOptions(diagnosticOptions()); + return serializeTo(&a); +} + ASMJIT_END_SUB_NAMESPACE -#endif // ASMJIT_BUILD_X86 && !ASMJIT_NO_COMPILER +#endif // !ASMJIT_NO_X86 && !ASMJIT_NO_COMPILER |