summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h')
-rw-r--r--3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h105
1 files changed, 42 insertions, 63 deletions
diff --git a/3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h b/3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h
index 99093ab69f8..67227a1a619 100644
--- a/3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h
+++ b/3rdparty/asmjit/src/asmjit/x86/x86rapass_p.h
@@ -1,25 +1,7 @@
-// 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
#ifndef ASMJIT_X86_X86RAPASS_P_H_INCLUDED
#define ASMJIT_X86_X86RAPASS_P_H_INCLUDED
@@ -32,78 +14,75 @@
#include "../core/rapass_p.h"
#include "../x86/x86assembler.h"
#include "../x86/x86compiler.h"
+#include "../x86/x86emithelper_p.h"
ASMJIT_BEGIN_SUB_NAMESPACE(x86)
//! \cond INTERNAL
-
-//! \brief X86/X64 register allocation.
-
-//! \addtogroup asmjit_ra
+//! \addtogroup asmjit_x86
//! \{
-// ============================================================================
-// [asmjit::X86RAPass]
-// ============================================================================
-
//! X86 register allocation pass.
//!
-//! Takes care of generating function prologs and epilogs, and also performs
-//! register allocation.
-class X86RAPass : public RAPass {
+//! Takes care of generating function prologs and epilogs, and also performs register allocation.
+class X86RAPass : public BaseRAPass {
public:
ASMJIT_NONCOPYABLE(X86RAPass)
- typedef RAPass Base;
+ typedef BaseRAPass Base;
- bool _avxEnabled;
+ EmitHelper _emitHelper;
- // --------------------------------------------------------------------------
- // [Construction / Destruction]
- // --------------------------------------------------------------------------
+ //! \name Construction & Destruction
+ //! \{
X86RAPass() noexcept;
- virtual ~X86RAPass() noexcept;
+ ~X86RAPass() noexcept override;
- // --------------------------------------------------------------------------
- // [Accessors]
- // --------------------------------------------------------------------------
+ //! \}
+
+ //! \name Accessors
+ //! \{
//! Returns the compiler casted to `x86::Compiler`.
- inline Compiler* cc() const noexcept { return static_cast<Compiler*>(_cb); }
+ ASMJIT_INLINE_NODEBUG Compiler* cc() const noexcept { return static_cast<Compiler*>(_cb); }
+
+ //! Returns emit helper.
+ ASMJIT_INLINE_NODEBUG EmitHelper* emitHelper() noexcept { return &_emitHelper; }
+
+ ASMJIT_INLINE_NODEBUG bool avxEnabled() const noexcept { return _emitHelper._avxEnabled; }
+ ASMJIT_INLINE_NODEBUG bool avx512Enabled() const noexcept { return _emitHelper._avx512Enabled; }
+
+ //! \}
- // --------------------------------------------------------------------------
- // [Utilities]
- // --------------------------------------------------------------------------
+ //! \name Utilities
+ //! \{
- inline uint32_t choose(uint32_t sseInstId, uint32_t avxInstId) noexcept {
- return _avxEnabled ? avxInstId : sseInstId;
+ ASMJIT_INLINE_NODEBUG InstId choose(InstId sseInstId, InstId avxInstId) noexcept {
+ return avxEnabled() ? avxInstId : sseInstId;
}
- // --------------------------------------------------------------------------
- // [OnInit / OnDone]
- // --------------------------------------------------------------------------
+ //! \}
+
+ //! \name Interface
+ //! \{
void onInit() noexcept override;
void onDone() noexcept override;
- // --------------------------------------------------------------------------
- // [CFG]
- // --------------------------------------------------------------------------
-
Error buildCFG() noexcept override;
- // --------------------------------------------------------------------------
- // [Emit]
- // --------------------------------------------------------------------------
+ Error _rewrite(BaseNode* first, BaseNode* stop) noexcept override;
+
+ Error emitMove(uint32_t workId, uint32_t dstPhysId, uint32_t srcPhysId) noexcept override;
+ Error emitSwap(uint32_t aWorkId, uint32_t aPhysId, uint32_t bWorkId, uint32_t bPhysId) noexcept override;
- Error onEmitMove(uint32_t workId, uint32_t dstPhysId, uint32_t srcPhysId) noexcept override;
- Error onEmitSwap(uint32_t aWorkId, uint32_t aPhysId, uint32_t bWorkId, uint32_t bPhysId) noexcept override;
+ Error emitLoad(uint32_t workId, uint32_t dstPhysId) noexcept override;
+ Error emitSave(uint32_t workId, uint32_t srcPhysId) noexcept override;
- Error onEmitLoad(uint32_t workId, uint32_t dstPhysId) noexcept override;
- Error onEmitSave(uint32_t workId, uint32_t srcPhysId) noexcept override;
+ Error emitJump(const Label& label) noexcept override;
+ Error emitPreCall(InvokeNode* invokeNode) noexcept override;
- Error onEmitJump(const Label& label) noexcept override;
- Error onEmitPreCall(InvokeNode* invokeNode) noexcept override;
+ //! \}
};
//! \}