Browse Source

use move semantics for simple initor

lizzie/xbyak-force-bundled
lizzie 2 months ago
parent
commit
f6c2c0e75a
  1. 4
      src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp
  2. 17
      src/dynarmic/src/dynarmic/backend/x64/block_of_code.h
  3. 2
      src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp
  4. 2
      src/dynarmic/src/dynarmic/backend/x64/constant_pool.h

4
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 { CodePtr BlockOfCode::GetCodeBegin() const {
return code_begin; return code_begin;
} }

17
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. /// Code emitter: Calls the lambda. Lambda must not have any captures.
template<typename Lambda>
void CallLambda(Lambda l) {
template<typename F>
void CallLambda(F l) {
CallFunction(Common::FptrCast(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<size_t esize> template<size_t esize>
Xbyak::Address BConst(const Xbyak::AddressFrame& frame, u64 value) {
return Const(frame, mcl::bit::replicate_element<u64>(esize, value),
mcl::bit::replicate_element<u64>(esize, value));
[[nodiscard]] Xbyak::Address BConst(const Xbyak::AddressFrame frame, u64 value) {
return Const(std::move(frame), mcl::bit::replicate_element<u64>(esize, value), mcl::bit::replicate_element<u64>(esize, value));
} }
CodePtr GetCodeBegin() const; CodePtr GetCodeBegin() const;
size_t GetTotalCodeSize() const; size_t GetTotalCodeSize() const;
const void* GetReturnFromRunCodeAddress() const {
[[nodiscard]] const void* GetReturnFromRunCodeAddress() const {
return return_from_run_code[0]; return return_from_run_code[0];
} }
const void* GetForceReturnFromRunCodeAddress() const {
[[nodiscard]] const void* GetForceReturnFromRunCodeAddress() const {
return return_from_run_code[FORCE_RETURN]; return return_from_run_code[FORCE_RETURN];
} }

2
src/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp

@ -25,7 +25,7 @@ ConstantPool::ConstantPool(BlockOfCode& code, size_t size)
reinterpret_cast<ConstantT*>(code.AllocateFromCodeSpace(size)), size / align_size); reinterpret_cast<ConstantT*>(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); const auto constant = ConstantT(lower, upper);
auto iter = constant_info.find(constant); auto iter = constant_info.find(constant);
if (iter == constant_info.end()) { if (iter == constant_info.end()) {

2
src/dynarmic/src/dynarmic/backend/x64/constant_pool.h

@ -29,7 +29,7 @@ class ConstantPool final {
public: public:
ConstantPool(BlockOfCode& code, size_t size); 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: private:
static constexpr size_t align_size = 16; // bytes static constexpr size_t align_size = 16; // bytes

Loading…
Cancel
Save