diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index f41bea6c83..18bd6a8c18 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp @@ -519,10 +519,6 @@ void BlockOfCode::LoadRequiredFlagsForCondFromRax(IR::Cond cond) { } } -Xbyak::Address BlockOfCode::Const(const Xbyak::AddressFrame& frame, u64 lower, u64 upper) { - return constant_pool.GetConstant(frame, lower, upper); -} - CodePtr BlockOfCode::GetCodeBegin() const { return code_begin; } diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h index 857b1a4484..83b6fe95c4 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h @@ -101,8 +101,8 @@ public: } /// Code emitter: Calls the lambda. Lambda must not have any captures. - template - void CallLambda(Lambda l) { + template + void CallLambda(F l) { CallFunction(Common::FptrCast(l)); } @@ -124,22 +124,23 @@ public: } } - Xbyak::Address Const(const Xbyak::AddressFrame& frame, u64 lower, u64 upper = 0); + [[nodiscard]] Xbyak::Address Const(const Xbyak::AddressFrame&& frame, u64 lower, u64 upper) { + return constant_pool.GetConstant(std::move(frame), lower, upper); + } template - Xbyak::Address BConst(const Xbyak::AddressFrame& frame, u64 value) { - return Const(frame, mcl::bit::replicate_element(esize, value), - mcl::bit::replicate_element(esize, value)); + [[nodiscard]] Xbyak::Address BConst(const Xbyak::AddressFrame frame, u64 value) { + return Const(std::move(frame), mcl::bit::replicate_element(esize, value), mcl::bit::replicate_element(esize, value)); } CodePtr GetCodeBegin() const; size_t GetTotalCodeSize() const; - const void* GetReturnFromRunCodeAddress() const { + [[nodiscard]] const void* GetReturnFromRunCodeAddress() const { return return_from_run_code[0]; } - const void* GetForceReturnFromRunCodeAddress() const { + [[nodiscard]] const void* GetForceReturnFromRunCodeAddress() const { return return_from_run_code[FORCE_RETURN]; } diff --git a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp index 127149a29e..8e9daf63ce 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp @@ -25,7 +25,7 @@ ConstantPool::ConstantPool(BlockOfCode& code, size_t size) reinterpret_cast(code.AllocateFromCodeSpace(size)), size / align_size); } -Xbyak::Address ConstantPool::GetConstant(const Xbyak::AddressFrame& frame, u64 lower, u64 upper) { +Xbyak::Address ConstantPool::GetConstant(const Xbyak::AddressFrame&& frame, u64 lower, u64 upper) { const auto constant = ConstantT(lower, upper); auto iter = constant_info.find(constant); if (iter == constant_info.end()) { diff --git a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h index 79e57fc78c..a5d9105afb 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h +++ b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h @@ -29,7 +29,7 @@ class ConstantPool final { public: ConstantPool(BlockOfCode& code, size_t size); - Xbyak::Address GetConstant(const Xbyak::AddressFrame& frame, u64 lower, u64 upper = 0); + Xbyak::Address GetConstant(const Xbyak::AddressFrame&& frame, u64 lower, u64 upper = 0); private: static constexpr size_t align_size = 16; // bytes