Line data Source code
1 : #ifdef __PLUMED_HAS_ASMJIT 2 : // This file is part of AsmJit project <https://asmjit.com> 3 : // 4 : // See asmjit.h or LICENSE.md for license and copyright information 5 : // SPDX-License-Identifier: Zlib 6 : 7 : #ifndef ASMJIT_ARM_A64RAPASS_P_H_INCLUDED 8 : #define ASMJIT_ARM_A64RAPASS_P_H_INCLUDED 9 : 10 : #include "api-config.h" 11 : #ifndef ASMJIT_NO_COMPILER 12 : 13 : #include "compiler.h" 14 : #include "rabuilders_p.h" 15 : #include "rapass_p.h" 16 : #include "a64assembler.h" 17 : #include "a64compiler.h" 18 : #include "a64emithelper_p.h" 19 : 20 : ASMJIT_BEGIN_SUB_NAMESPACE(a64) 21 : 22 : //! \cond INTERNAL 23 : //! \addtogroup asmjit_a64 24 : //! \{ 25 : 26 : //! ARM register allocation pass. 27 : //! 28 : //! Takes care of generating function prologs and epilogs, and also performs 29 : //! register allocation. 30 : class ARMRAPass : public BaseRAPass { 31 : public: 32 : ASMJIT_NONCOPYABLE(ARMRAPass) 33 : typedef BaseRAPass Base; 34 : 35 : EmitHelper _emitHelper; 36 : 37 : //! \name Construction & Destruction 38 : //! \{ 39 : 40 : ARMRAPass() noexcept; 41 : virtual ~ARMRAPass() noexcept; 42 : 43 : //! \} 44 : 45 : //! \name Accessors 46 : //! \{ 47 : 48 : //! Returns the compiler casted to `arm::Compiler`. 49 0 : inline Compiler* cc() const noexcept { return static_cast<Compiler*>(_cb); } 50 : 51 : //! Returns emit helper. 52 : inline EmitHelper* emitHelper() noexcept { return &_emitHelper; } 53 : 54 : //! \} 55 : 56 : //! \name Events 57 : //! \{ 58 : 59 : void onInit() noexcept override; 60 : void onDone() noexcept override; 61 : 62 : //! \} 63 : 64 : //! \name CFG 65 : //! \{ 66 : 67 : Error buildCFG() noexcept override; 68 : 69 : //! \} 70 : 71 : //! \name Rewrite 72 : //! \{ 73 : 74 : Error _rewrite(BaseNode* first, BaseNode* stop) noexcept override; 75 : 76 : //! \} 77 : 78 : //! \name Prolog & Epilog 79 : //! \{ 80 : 81 : Error updateStackFrame() noexcept override; 82 : 83 : //! \} 84 : 85 : //! \name Emit Helpers 86 : //! \{ 87 : 88 : Error emitMove(uint32_t workId, uint32_t dstPhysId, uint32_t srcPhysId) noexcept override; 89 : Error emitSwap(uint32_t aWorkId, uint32_t aPhysId, uint32_t bWorkId, uint32_t bPhysId) noexcept override; 90 : 91 : Error emitLoad(uint32_t workId, uint32_t dstPhysId) noexcept override; 92 : Error emitSave(uint32_t workId, uint32_t srcPhysId) noexcept override; 93 : 94 : Error emitJump(const Label& label) noexcept override; 95 : Error emitPreCall(InvokeNode* invokeNode) noexcept override; 96 : 97 : //! \} 98 : }; 99 : 100 : //! \} 101 : //! \endcond 102 : 103 : ASMJIT_END_SUB_NAMESPACE 104 : 105 : #endif // !ASMJIT_NO_COMPILER 106 : #endif // ASMJIT_ARM_A64RAPASS_P_H_INCLUDED 107 : 108 : #endif // __PLUMED_HAS_ASMJIT