diff options
author | Olivier Galibert <galibert@pobox.com> | 2020-05-21 10:46:01 +0200 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2020-05-21 10:46:20 +0200 |
commit | 941e06150bef625cb8bf1d58139563bb5c828b2d (patch) | |
tree | 19faca21365d66e5480a9cf349d502cc676ca802 | |
parent | f739a74f08bdbdd2d45abb5f9fca2418ef4ab0f7 (diff) |
emumem: Another slight speedup. masking before dispatch at top level is not needed because it's already done at the global mask level. [O. Galibert]
-rw-r--r-- | src/emu/emumem.cpp | 20 | ||||
-rw-r--r-- | src/emu/emumem.h | 24 | ||||
-rw-r--r-- | src/emu/emumem_hedr.h | 2 | ||||
-rw-r--r-- | src/emu/emumem_hedr.ipp | 3 | ||||
-rw-r--r-- | src/emu/emumem_hedw.h | 2 | ||||
-rw-r--r-- | src/emu/emumem_hedw.ipp | 3 |
6 files changed, 21 insertions, 33 deletions
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index 1881bbbc013..af2aae5c104 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -80,7 +80,7 @@ void handler_entry::enumerate_references(handler_entry::reflist &refs) const { } -template<int Width, int AddrShift, int Endian> void handler_entry_read<Width, AddrShift, Endian>::get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const +template<int Width, int AddrShift, int Endian> void handler_entry_read<Width, AddrShift, Endian>::get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const { fatalerror("get_dispatch called on non-dispatching class\n"); } @@ -131,7 +131,7 @@ template<int Width, int AddrShift, int Endian> void handler_entry_read<Width, Ad } -template<int Width, int AddrShift, int Endian> void handler_entry_write<Width, AddrShift, Endian>::get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const +template<int Width, int AddrShift, int Endian> void handler_entry_write<Width, AddrShift, Endian>::get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const { fatalerror("get_dispatch called on non-dispatching class\n"); } @@ -301,8 +301,6 @@ class address_space_specific : public address_space public: handler_entry_read<Width, AddrShift, Endian> *const *m_dispatch_read; handler_entry_write<Width, AddrShift, Endian> *const *m_dispatch_write; - offs_t m_mask_read; - offs_t m_mask_write; u8 m_shift_read; u8 m_shift_write; @@ -521,8 +519,8 @@ public: default: fatalerror("Unhandled address bus width %d\n", address_width); } - m_root_read->get_dispatch(m_dispatch_read, m_mask_read, m_shift_read); - m_root_write->get_dispatch(m_dispatch_write, m_mask_write, m_shift_write); + m_root_read->get_dispatch(m_dispatch_read, m_shift_read); + m_root_write->get_dispatch(m_dispatch_write, m_shift_write); } void *create_cache() override { @@ -530,7 +528,7 @@ public: } void *create_specific() override { - return new memory_access_specific<Width, AddrShift, Endian>(*this, m_dispatch_read, m_mask_read, m_shift_read, m_dispatch_write, m_mask_write, m_shift_write); + return new memory_access_specific<Width, AddrShift, Endian>(*this, m_dispatch_read, m_shift_read, m_dispatch_write, m_shift_write); } void delayed_ref(handler_entry *e) { @@ -597,25 +595,25 @@ public: // native read NativeType read_native(offs_t offset, NativeType mask) { - return dispatch_read<Width, AddrShift, Endian>(m_mask_read, m_shift_read, offset, mask, m_dispatch_read);; + return dispatch_read<Width, AddrShift, Endian>(offs_t(-1), m_shift_read, offset, mask, m_dispatch_read);; } // mask-less native read NativeType read_native(offs_t offset) { - return dispatch_read<Width, AddrShift, Endian>(m_mask_read, m_shift_read, offset, uX(0xffffffffffffffffU), m_dispatch_read);; + return dispatch_read<Width, AddrShift, Endian>(offs_t(-1), m_shift_read, offset, uX(0xffffffffffffffffU), m_dispatch_read);; } // native write void write_native(offs_t offset, NativeType data, NativeType mask) { - dispatch_write<Width, AddrShift, Endian>(m_mask_write, m_shift_write, offset, data, mask, m_dispatch_write);; + dispatch_write<Width, AddrShift, Endian>(offs_t(-1), m_shift_write, offset, data, mask, m_dispatch_write);; } // mask-less native write void write_native(offs_t offset, NativeType data) { - dispatch_write<Width, AddrShift, Endian>(m_mask_write, m_shift_write, offset, data, uX(0xffffffffffffffffU), m_dispatch_write);; + dispatch_write<Width, AddrShift, Endian>(offs_t(-1), m_shift_write, offset, data, uX(0xffffffffffffffffU), m_dispatch_write);; } // virtual access to these functions diff --git a/src/emu/emumem.h b/src/emu/emumem.h index bc4063e671e..e2fcced391e 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -599,7 +599,7 @@ public: virtual void detach(const std::unordered_set<handler_entry *> &handlers); // Return the internal structures of the root dispatch - virtual void get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const; + virtual void get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const; }; // =====================-> The parent class of all write handlers @@ -671,7 +671,7 @@ public: virtual void detach(const std::unordered_set<handler_entry *> &handlers); // Return the internal structures of the root dispatch - virtual void get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const; + virtual void get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const; }; // =====================-> Passthrough handler management structure @@ -989,10 +989,8 @@ template<int Width, int AddrShift, int Endian> class memory_access_specific public: // construction/destruction memory_access_specific(address_space &space, - handler_entry_read <Width, AddrShift, Endian> *const *dispatch_read, - offs_t mask_read, u8 shift_read, - handler_entry_write<Width, AddrShift, Endian> *const *dispatch_write, - offs_t mask_write, u8 shift_write); + handler_entry_read <Width, AddrShift, Endian> *const *dispatch_read, u8 shift_read, + handler_entry_write<Width, AddrShift, Endian> *const *dispatch_write, u8 shift_write); // getters @@ -1033,17 +1031,15 @@ private: handler_entry_read<Width, AddrShift, Endian> *const *m_dispatch_read; handler_entry_write<Width, AddrShift, Endian> *const *m_dispatch_write; - offs_t m_mask_read; - offs_t m_mask_write; u8 m_shift_read; u8 m_shift_write; NativeType read_native(offs_t address, NativeType mask = ~NativeType(0)) { - return dispatch_read<Width, AddrShift, Endian>(m_mask_read, m_shift_read, address, mask, m_dispatch_read);; + return dispatch_read<Width, AddrShift, Endian>(offs_t(-1), m_shift_read, address, mask, m_dispatch_read);; } void write_native(offs_t address, NativeType data, NativeType mask = ~NativeType(0)) { - dispatch_write<Width, AddrShift, Endian>(m_mask_write, m_shift_write, address, data, mask, m_dispatch_write);; + dispatch_write<Width, AddrShift, Endian>(offs_t(-1), m_shift_write, address, data, mask, m_dispatch_write);; } }; @@ -1934,16 +1930,12 @@ void memory_passthrough_handler::remove() } template<int Width, int AddrShift, int Endian> memory_access_specific<Width, AddrShift, Endian>::memory_access_specific(address_space &space, - handler_entry_read <Width, AddrShift, Endian> *const *dispatch_read, - offs_t mask_read, u8 shift_read, - handler_entry_write<Width, AddrShift, Endian> *const *dispatch_write, - offs_t mask_write, u8 shift_write) + handler_entry_read <Width, AddrShift, Endian> *const *dispatch_read, u8 shift_read, + handler_entry_write<Width, AddrShift, Endian> *const *dispatch_write, u8 shift_write) : m_space(space), m_addrmask(space.addrmask()), m_dispatch_read(dispatch_read), m_dispatch_write(dispatch_write), - m_mask_read(mask_read), - m_mask_write(mask_write), m_shift_read(shift_read), m_shift_write(shift_write) { diff --git a/src/emu/emumem_hedr.h b/src/emu/emumem_hedr.h index 223c530c551..90dfab6d130 100644 --- a/src/emu/emumem_hedr.h +++ b/src/emu/emumem_hedr.h @@ -35,7 +35,7 @@ public: void enumerate_references(handler_entry::reflist &refs) const override; - virtual void get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const override; + virtual void get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const override; protected: static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_lowbits(HighBits, Width, AddrShift); diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp index 4e084587e06..1f4484d0a15 100644 --- a/src/emu/emumem_hedr.ipp +++ b/src/emu/emumem_hedr.ipp @@ -9,10 +9,9 @@ #include "emumem_hep.h" #include "emumem_hedr.h" -template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const +template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::get_dispatch(handler_entry_read<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const { dispatch = m_dispatch; - mask = BITMASK; shift = LowBits; } diff --git a/src/emu/emumem_hedw.h b/src/emu/emumem_hedw.h index 7109c70c9cc..d0986893d6e 100644 --- a/src/emu/emumem_hedw.h +++ b/src/emu/emumem_hedw.h @@ -35,7 +35,7 @@ public: void enumerate_references(handler_entry::reflist &refs) const override; - virtual void get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const override; + virtual void get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const override; protected: static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_lowbits(HighBits, Width, AddrShift); diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp index bf2786a0749..23b0c70572b 100644 --- a/src/emu/emumem_hedw.ipp +++ b/src/emu/emumem_hedw.ipp @@ -10,10 +10,9 @@ #include "emumem_hedw.h" -template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_write_dispatch<HighBits, Width, AddrShift, Endian>::get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, offs_t &mask, u8 &shift) const +template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_write_dispatch<HighBits, Width, AddrShift, Endian>::get_dispatch(handler_entry_write<Width, AddrShift, Endian> *const *&dispatch, u8 &shift) const { dispatch = m_dispatch; - mask = BITMASK; shift = LowBits; } |