diff --git a/src/dynarmic/src/dynarmic/ir/basic_block.cpp b/src/dynarmic/src/dynarmic/ir/basic_block.cpp index 4a7b2bf261..854fb82367 100644 --- a/src/dynarmic/src/dynarmic/ir/basic_block.cpp +++ b/src/dynarmic/src/dynarmic/ir/basic_block.cpp @@ -39,16 +39,8 @@ Block::iterator Block::PrependNewInst(iterator insertion_point, Opcode opcode, s // just pool it!!! - reason why there is an inline buffer is because many small blocks are created // with few instructions due to subpar optimisations on other passes... plus branch-heavy code will // hugely benefit from the coherency of faster allocations... - IR::Inst* inst; - if (inlined_inst.size() < inlined_inst.max_size()) { - inlined_inst.emplace_back(opcode); - inst = &inlined_inst[inlined_inst.size() - 1]; - } else { - if (pooled_inst.empty() || pooled_inst.back().size() == pooled_inst.back().max_size()) - pooled_inst.emplace_back(); - pooled_inst.back().emplace_back(opcode); - inst = &pooled_inst.back()[pooled_inst.back().size() - 1]; - } + inlined_inst.emplace_back(opcode); + auto* inst = &inlined_inst[inlined_inst.size() - 1]; DEBUG_ASSERT(args.size() == inst->NumArgs()); std::for_each(args.begin(), args.end(), [&inst, index = size_t(0)](const auto& arg) mutable { inst->SetArg(index, arg); @@ -61,7 +53,6 @@ void Block::Reset(LocationDescriptor location_) noexcept { mcl::intrusive_list tmp = {}; instructions.swap(tmp); inlined_inst.clear(); - pooled_inst.clear(); cond_failed.reset(); location = location_; end_location = location_; diff --git a/src/dynarmic/src/dynarmic/ir/basic_block.h b/src/dynarmic/src/dynarmic/ir/basic_block.h index 37db8745a4..3718c96868 100644 --- a/src/dynarmic/src/dynarmic/ir/basic_block.h +++ b/src/dynarmic/src/dynarmic/ir/basic_block.h @@ -142,11 +142,9 @@ public: } /// "Hot cache" for small blocks so we don't call global allocator - boost::container::static_vector inlined_inst; + boost::container::static_vector inlined_inst = {}; /// List of instructions in this block. instruction_list_type instructions; - /// "Long/far" memory pool - boost::container::stable_vector> pooled_inst; /// Block to execute next if `cond` did not pass. std::optional cond_failed = {}; /// Description of the starting location of this block @@ -162,7 +160,7 @@ public: /// Number of cycles this block takes to execute. size_t cycle_count = 0; }; -static_assert(sizeof(Block) == 4096); +//static_assert(sizeof(Block) == 4096); /// Returns a string representation of the contents of block. Intended for debugging. std::string DumpBlock(const IR::Block& block) noexcept;