summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-11-23 10:29:23 +1100
committer Vas Crabb <vas@vastheman.com>2020-11-23 10:29:23 +1100
commit58c8cba9b3b8fb44de201f1f22e20e94d192c293 (patch)
treea704f75ae70b1c9ba8dc9d5af6cdf242564ded26 /src/emu
parent245ef45985b6847f639f75c4194fcd68fc338a10 (diff)
Work around GNU libstdc++ wanting to stack large temporaries when vector elements can be trivially constructed.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/addrmap.cpp8
-rw-r--r--src/emu/emumem.cpp2
-rw-r--r--src/emu/emumem_hedr.h24
-rw-r--r--src/emu/emumem_hedr.ipp6
-rw-r--r--src/emu/emumem_hedw.h24
-rw-r--r--src/emu/emumem_hedw.ipp6
-rw-r--r--src/emu/emumem_mview.cpp6
7 files changed, 58 insertions, 18 deletions
diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp
index 246a4306d87..d38d518aa55 100644
--- a/src/emu/addrmap.cpp
+++ b/src/emu/addrmap.cpp
@@ -763,9 +763,9 @@ bool address_map_entry::unitmask_is_appropriate(u8 width, u64 unitmask, const ch
address_map::address_map(device_t &device, int spacenum)
: m_spacenum(spacenum),
m_device(&device),
- m_view(nullptr),
+ m_view(nullptr),
m_unmapval(0),
- m_globalmask(0)
+ m_globalmask(0)
{
// get our memory interface
const device_memory_interface *memintf;
@@ -799,7 +799,7 @@ address_map::address_map(device_t &device, int spacenum)
address_map::address_map(device_t &device, address_map_entry *entry)
: m_spacenum(AS_PROGRAM),
m_device(&device),
- m_view(nullptr),
+ m_view(nullptr),
m_unmapval(0),
m_globalmask(0)
{
@@ -817,7 +817,7 @@ address_map::address_map(device_t &device, address_map_entry *entry)
address_map::address_map(const address_space &space, offs_t start, offs_t end, u64 unitmask, int cswidth, device_t &device, address_map_constructor submap_delegate)
: m_spacenum(space.spacenum()),
m_device(&device),
- m_view(nullptr),
+ m_view(nullptr),
m_unmapval(space.unmap()),
m_globalmask(space.addrmask())
{
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp
index 51eab43fcf7..c930fd31469 100644
--- a/src/emu/emumem.cpp
+++ b/src/emu/emumem.cpp
@@ -1012,7 +1012,7 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base,
memory_region::memory_region(running_machine &machine, std::string name, u32 length, u8 width, endianness_t endian)
: m_machine(machine),
- m_name(std::move(name)),
+ m_name(std::move(name)),
m_buffer(length),
m_endianness(endian),
m_bitwidth(width * 8),
diff --git a/src/emu/emumem_hedr.h b/src/emu/emumem_hedr.h
index 0ef50471e8f..0756c91795c 100644
--- a/src/emu/emumem_hedr.h
+++ b/src/emu/emumem_hedr.h
@@ -54,10 +54,30 @@ private:
static constexpr offs_t HIGHMASK = make_bitmask<offs_t>(HighBits) ^ LOWMASK;
static constexpr offs_t UPMASK = ~make_bitmask<offs_t>(HighBits);
+ class handler_array : public std::array<handler_entry_read<Width, AddrShift, Endian> *, COUNT>
+ {
+ public:
+ using std::array<handler_entry_read<Width, AddrShift, Endian> *, COUNT>::array;
+ handler_array()
+ {
+ std::fill(this->begin(), this->end(), nullptr);
+ }
+ };
+
+ class range_array : public std::array<handler_entry::range, COUNT>
+ {
+ public:
+ using std::array<handler_entry::range, COUNT>::array;
+ range_array()
+ {
+ std::fill(this->begin(), this->end(), handler_entry::range{ 0, 0 });
+ }
+ };
+
memory_view *m_view;
- std::vector<std::array<handler_entry_read<Width, AddrShift, Endian> *, COUNT>> m_dispatch_array;
- std::vector<std::array<handler_entry::range, COUNT>> m_ranges_array;
+ std::vector<handler_array> m_dispatch_array;
+ std::vector<range_array> m_ranges_array;
handler_entry_read<Width, AddrShift, Endian> **m_a_dispatch;
handler_entry::range *m_a_ranges;
diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp
index 41a209f75ec..bdb1f971703 100644
--- a/src/emu/emumem_hedr.ipp
+++ b/src/emu/emumem_hedr.ipp
@@ -550,7 +550,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
fatalerror("init_handlers called on non-view handler_entry_read_dispatch.");
if(!m_dispatch_array.empty())
fatalerror("init_handlers called twice on handler_entry_read_dispatch.");
-
+
m_ranges_array.resize(1);
m_dispatch_array.resize(1);
m_a_ranges = m_ranges_array[0].data();
@@ -591,7 +591,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
fatalerror("out-of-range view selection.");
m_a_ranges = m_ranges_array[i].data();
- m_a_dispatch = m_dispatch_array[i].data();
+ m_a_dispatch = m_dispatch_array[i].data();
}
template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::select_u(int id)
@@ -600,7 +600,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
if(i > m_dispatch_array.size())
fatalerror("out-of-range view update selection.");
else if(i == m_dispatch_array.size()) {
- u32 aid = (std::array<handler_entry_read<Width, AddrShift, Endian> *, COUNT> *)(m_a_dispatch) - m_dispatch_array.data();
+ u32 aid = (handler_array *)(m_a_dispatch) - m_dispatch_array.data();
m_dispatch_array.resize(i+1);
m_ranges_array.resize(i+1);
diff --git a/src/emu/emumem_hedw.h b/src/emu/emumem_hedw.h
index bb591e3bff8..3d8973181f6 100644
--- a/src/emu/emumem_hedw.h
+++ b/src/emu/emumem_hedw.h
@@ -54,10 +54,30 @@ private:
static constexpr offs_t HIGHMASK = make_bitmask<offs_t>(HighBits) ^ LOWMASK;
static constexpr offs_t UPMASK = ~make_bitmask<offs_t>(HighBits);
+ class handler_array : public std::array<handler_entry_write<Width, AddrShift, Endian> *, COUNT>
+ {
+ public:
+ using std::array<handler_entry_write<Width, AddrShift, Endian> *, COUNT>::array;
+ handler_array()
+ {
+ std::fill(this->begin(), this->end(), nullptr);
+ }
+ };
+
+ class range_array : public std::array<handler_entry::range, COUNT>
+ {
+ public:
+ using std::array<handler_entry::range, COUNT>::array;
+ range_array()
+ {
+ std::fill(this->begin(), this->end(), handler_entry::range{ 0, 0 });
+ }
+ };
+
memory_view *m_view;
- std::vector<std::array<handler_entry_write<Width, AddrShift, Endian> *, COUNT>> m_dispatch_array;
- std::vector<std::array<handler_entry::range, COUNT>> m_ranges_array;
+ std::vector<handler_array> m_dispatch_array;
+ std::vector<range_array> m_ranges_array;
handler_entry_write<Width, AddrShift, Endian> **m_a_dispatch;
handler_entry::range *m_a_ranges;
diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp
index f63072b3bfb..b59a17b8f79 100644
--- a/src/emu/emumem_hedw.ipp
+++ b/src/emu/emumem_hedw.ipp
@@ -556,7 +556,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
fatalerror("init_handlers called on non-view handler_entry_write_dispatch.");
if(!m_dispatch_array.empty())
fatalerror("init_handlers called twice on handler_entry_write_dispatch.");
-
+
m_ranges_array.resize(1);
m_dispatch_array.resize(1);
m_a_ranges = m_ranges_array[0].data();
@@ -597,7 +597,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
fatalerror("out-of-range view selection.");
m_a_ranges = m_ranges_array[i].data();
- m_a_dispatch = m_dispatch_array[i].data();
+ m_a_dispatch = m_dispatch_array[i].data();
}
template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_write_dispatch<HighBits, Width, AddrShift, Endian>::select_u(int id)
@@ -606,7 +606,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
if(i > m_dispatch_array.size())
fatalerror("out-of-range view update selection.");
else if(i == m_dispatch_array.size()) {
- u32 aid = (std::array<handler_entry_write<Width, AddrShift, Endian> *, COUNT> *)(m_a_dispatch) - m_dispatch_array.data();
+ u32 aid = (handler_array *)(m_a_dispatch) - m_dispatch_array.data();
m_dispatch_array.resize(i+1);
m_ranges_array.resize(i+1);
diff --git a/src/emu/emumem_mview.cpp b/src/emu/emumem_mview.cpp
index f4f92e1a7b8..ef2346eef57 100644
--- a/src/emu/emumem_mview.cpp
+++ b/src/emu/emumem_mview.cpp
@@ -460,7 +460,7 @@ namespace {
memory_view::memory_view_entry *mve_make(int Level, int Width, int AddrShift, endianness_t Endian, const address_space_config &config, memory_manager &manager, memory_view &view, int id) {
switch (Width | (AddrShift + 4)) {
- case 8|(4+1): return mve_make_3<0, 1>(Level, Endian, config, manager, view, id);
+ case 8|(4+1): return mve_make_3<0, 1>(Level, Endian, config, manager, view, id);
case 8|(4-0): return mve_make_3<0, 0>(Level, Endian, config, manager, view, id);
case 16|(4+3): return mve_make_3<1, 3>(Level, Endian, config, manager, view, id);
case 16|(4-0): return mve_make_3<1, 0>(Level, Endian, config, manager, view, id);
@@ -721,7 +721,7 @@ namespace {
case 64|(4-3): h_make_3<3, -3>(HighBits, Endian, space, view, r, w, sa, su); break;
default: abort();
}
- }
+ }
}
std::pair<handler_entry *, handler_entry *> memory_view::make_handlers(address_space &space, offs_t addrstart, offs_t addrend)
@@ -752,7 +752,7 @@ std::pair<handler_entry *, handler_entry *> memory_view::make_handlers(address_s
h_make(awidth, m_config->data_width(), m_config->addr_shift(), m_config->endianness(), space, *this, m_handler_read, m_handler_write, m_select_a, m_select_u);
}
- return std::make_pair(m_handler_read, m_handler_write);
+ return std::make_pair(m_handler_read, m_handler_write);
}
void memory_view::make_subdispatch(std::string context)