From 22513fb6fe281f5ccb75aaddb6417a12a66c313d Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 25 May 2020 16:42:42 +0200 Subject: emumem: A little more speedup. cache and specific change syntax, and are not pointers anymore [O. Galibert] The last(?) two changes are: - Add a template parameter to everything (theoretically the address space width, in practice a level derived from it to keep as much compatibility between widths as possible) so that the shift size becomes a constant. - Change the syntax of declaring and initializing the caches and specifics so that they're embedded in the owner device. Solves lifetime issues and also removes one indirection (looking up the base dispatch pointer through the cache/specific pointer). --- src/emu/emumem_hedp.cpp | 64 ++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'src/emu/emumem_hedp.cpp') diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp index ccaa4ed650e..9a71f98184b 100644 --- a/src/emu/emumem_hedp.cpp +++ b/src/emu/emumem_hedp.cpp @@ -5,142 +5,142 @@ #include "emumem_hea.h" #include "emumem_hedp.h" -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), mem_mask); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift)); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), mem_mask); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift)); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*inh::m_space); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_delegate::read(offs_t offset, uX mem_mask) +template typename emu::detail::handler_entry_size::uX handler_entry_read_delegate::read(offs_t offset, uX mem_mask) const { return read_impl(offset, mem_mask); } -template std::string handler_entry_read_delegate::name() const +template std::string handler_entry_read_delegate::name() const { return m_delegate.name(); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data, mem_mask); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data, mem_mask); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(*inh::m_space, data); } -template template +template template std::enable_if_t::value || std::is_same::value || std::is_same::value || std::is_same::value, - void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) const { m_delegate(data); } -template void handler_entry_write_delegate::write(offs_t offset, uX data, uX mem_mask) +template void handler_entry_write_delegate::write(offs_t offset, uX data, uX mem_mask) const { write_impl(offset, data, mem_mask); } -template std::string handler_entry_write_delegate::name() const +template std::string handler_entry_write_delegate::name() const { return m_delegate.name(); } @@ -148,22 +148,22 @@ template std::string handl -template typename emu::detail::handler_entry_size::uX handler_entry_read_ioport::read(offs_t offset, uX mem_mask) +template typename emu::detail::handler_entry_size::uX handler_entry_read_ioport::read(offs_t offset, uX mem_mask) const { return m_port->read(); } -template std::string handler_entry_read_ioport::name() const +template std::string handler_entry_read_ioport::name() const { return m_port->tag(); } -template void handler_entry_write_ioport::write(offs_t offset, uX data, uX mem_mask) +template void handler_entry_write_ioport::write(offs_t offset, uX data, uX mem_mask) const { m_port->write(data, mem_mask); } -template std::string handler_entry_write_ioport::name() const +template std::string handler_entry_write_ioport::name() const { return m_port->tag(); } -- cgit v1.2.3-70-g09d2