aboutsummaryrefslogtreecommitdiff
path: root/client/asmjit/core/target.h
diff options
context:
space:
mode:
authorauth12 <[email protected]>2020-07-19 11:45:43 -0700
committerauth12 <[email protected]>2020-07-19 11:45:43 -0700
commit4e6a09d486ed462ee4cf38c3735a12d530dc09d4 (patch)
treea67ccac41fef7a412b4357fbe54582cc4b692863 /client/asmjit/core/target.h
parentDeleted asmjit submodule (diff)
downloadloader-4e6a09d486ed462ee4cf38c3735a12d530dc09d4.tar.xz
loader-4e6a09d486ed462ee4cf38c3735a12d530dc09d4.zip
Added asmjit.
Fixed solution file.
Diffstat (limited to 'client/asmjit/core/target.h')
-rw-r--r--client/asmjit/core/target.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/client/asmjit/core/target.h b/client/asmjit/core/target.h
new file mode 100644
index 0000000..4d144c6
--- /dev/null
+++ b/client/asmjit/core/target.h
@@ -0,0 +1,175 @@
+// AsmJit - Machine code generation for C++
+//
+// * 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.
+
+#ifndef ASMJIT_CORE_TARGET_H_INCLUDED
+#define ASMJIT_CORE_TARGET_H_INCLUDED
+
+#include "../core/arch.h"
+#include "../core/func.h"
+
+ASMJIT_BEGIN_NAMESPACE
+
+//! \addtogroup asmjit_core
+//! \{
+
+// ============================================================================
+// [asmjit::CodeInfo]
+// ============================================================================
+
+#ifndef ASMJIT_NO_DEPRECATED
+//! Basic information about a code (or target). It describes its architecture,
+//! code generation mode (or optimization level), and base address.
+class ASMJIT_DEPRECATED_STRUCT("Use Environment instead of CodeInfo") CodeInfo {
+public:
+ //!< Environment information.
+ Environment _environment;
+ //! Base address.
+ uint64_t _baseAddress;
+
+ //! \name Construction & Destruction
+ //! \{
+
+ inline CodeInfo() noexcept
+ : _environment(),
+ _baseAddress(Globals::kNoBaseAddress) {}
+
+ inline explicit CodeInfo(uint32_t arch, uint32_t subArch = 0, uint64_t baseAddress = Globals::kNoBaseAddress) noexcept
+ : _environment(arch, subArch),
+ _baseAddress(baseAddress) {}
+
+ inline explicit CodeInfo(const Environment& environment, uint64_t baseAddress = Globals::kNoBaseAddress) noexcept
+ : _environment(environment),
+ _baseAddress(baseAddress) {}
+
+
+ inline CodeInfo(const CodeInfo& other) noexcept { init(other); }
+
+ inline bool isInitialized() const noexcept {
+ return _environment.arch() != Environment::kArchUnknown;
+ }
+
+ inline void init(const CodeInfo& other) noexcept {
+ *this = other;
+ }
+
+ inline void init(uint32_t arch, uint32_t subArch = 0, uint64_t baseAddress = Globals::kNoBaseAddress) noexcept {
+ _environment.init(arch, subArch);
+ _baseAddress = baseAddress;
+ }
+
+ inline void reset() noexcept {
+ _environment.reset();
+ _baseAddress = Globals::kNoBaseAddress;
+ }
+
+ //! \}
+
+ //! \name Overloaded Operators
+ //! \{
+
+ inline CodeInfo& operator=(const CodeInfo& other) noexcept = default;
+
+ inline bool operator==(const CodeInfo& other) const noexcept { return ::memcmp(this, &other, sizeof(*this)) == 0; }
+ inline bool operator!=(const CodeInfo& other) const noexcept { return ::memcmp(this, &other, sizeof(*this)) != 0; }
+
+ //! \}
+
+ //! \name Accessors
+ //! \{
+
+ //! Returns the target environment information, see \ref Environment.
+ inline const Environment& environment() const noexcept { return _environment; }
+
+ //! Returns the target architecture, see \ref Environment::Arch.
+ inline uint32_t arch() const noexcept { return _environment.arch(); }
+ //! Returns the target sub-architecture, see \ref Environment::SubArch.
+ inline uint32_t subArch() const noexcept { return _environment.subArch(); }
+ //! Returns the native size of the target's architecture GP register.
+ inline uint32_t gpSize() const noexcept { return _environment.registerSize(); }
+
+ //! Tests whether this CodeInfo has a base address set.
+ inline bool hasBaseAddress() const noexcept { return _baseAddress != Globals::kNoBaseAddress; }
+ //! Returns the base address or \ref Globals::kNoBaseAddress if it's not set.
+ inline uint64_t baseAddress() const noexcept { return _baseAddress; }
+ //! Sets base address to `p`.
+ inline void setBaseAddress(uint64_t p) noexcept { _baseAddress = p; }
+ //! Resets base address (implicitly sets it to \ref Globals::kNoBaseAddress).
+ inline void resetBaseAddress() noexcept { _baseAddress = Globals::kNoBaseAddress; }
+
+ //! \}
+};
+#endif // !ASMJIT_NO_DEPRECATED
+
+// ============================================================================
+// [asmjit::Target]
+// ============================================================================
+
+//! Target is an abstract class that describes a machine code target.
+class ASMJIT_VIRTAPI Target {
+public:
+ ASMJIT_BASE_CLASS(Target)
+ ASMJIT_NONCOPYABLE(Target)
+
+ //! Target environment information.
+ Environment _environment;
+
+ //! \name Construction & Destruction
+ //! \{
+
+ //! Creates a `Target` instance.
+ ASMJIT_API Target() noexcept;
+ //! Destroys the `Target` instance.
+ ASMJIT_API virtual ~Target() noexcept;
+
+ //! \}
+
+ //! \name Accessors
+ //! \{
+
+ //! Returns CodeInfo of this target.
+ //!
+ //! CodeInfo can be used to setup a CodeHolder in case you plan to generate a
+ //! code compatible and executable by this Runtime.
+ inline const Environment& environment() const noexcept { return _environment; }
+
+ //! Returns the target architecture, see \ref Environment::Arch.
+ inline uint32_t arch() const noexcept { return _environment.arch(); }
+ //! Returns the target sub-architecture, see \ref Environment::SubArch.
+ inline uint32_t subArch() const noexcept { return _environment.subArch(); }
+
+#ifndef ASMJIT_NO_DEPRECATED
+ ASMJIT_DEPRECATED("Use environment() instead")
+ inline CodeInfo codeInfo() const noexcept { return CodeInfo(_environment); }
+
+ ASMJIT_DEPRECATED("Use environment().format() instead")
+ inline uint32_t targetType() const noexcept { return _environment.format(); }
+#endif // !ASMJIT_NO_DEPRECATED
+
+ //! \}
+};
+
+//! \}
+
+ASMJIT_END_NAMESPACE
+
+#endif // ASMJIT_CORE_TARGET_H_INCLUDED