mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
Minor netlist changes. (nw)
This commit is contained in:
parent
beda6531ef
commit
ecb50c0c09
@ -537,7 +537,7 @@ ATTR_COLD offs_t netlist_mame_cpu_device_t::disasm_disassemble(char *buffer, off
|
||||
int relpc = pc - m_genPC;
|
||||
//UINT16 opcode = (oprom[pc - startpc] << 8) | oprom[pc+1 - startpc];
|
||||
//UINT8 inst = opcode >> 13;
|
||||
|
||||
#if 0
|
||||
if (relpc >= 0 && relpc < netlist().queue().count())
|
||||
{
|
||||
// sprintf(buffer, "%04x %02d %s", pc, relpc, netlist().queue()[netlist().queue().count() - relpc - 1].object().name().cstr());
|
||||
@ -547,6 +547,7 @@ ATTR_COLD offs_t netlist_mame_cpu_device_t::disasm_disassemble(char *buffer, off
|
||||
}
|
||||
else
|
||||
sprintf(buffer, "%s", "");
|
||||
#endif
|
||||
pc+=1;
|
||||
return (pc - startpc);
|
||||
}
|
||||
|
@ -400,25 +400,28 @@ NETLIB_UPDATE(solver)
|
||||
{
|
||||
#pragma omp for nowait
|
||||
for (int i = 0; i < t_cnt; i++)
|
||||
{
|
||||
this_resched[i] = m_mat_solvers[i]->solve();
|
||||
}
|
||||
if (m_mat_solvers[i]->is_timestep())
|
||||
{
|
||||
// Ignore return value
|
||||
ATTR_UNUSED const nl_double ts = m_mat_solvers[i]->solve();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
for (int i = 0; i < t_cnt; i++)
|
||||
{
|
||||
if (do_full || (m_mat_solvers[i]->is_timestep()))
|
||||
this_resched[i] = m_mat_solvers[i]->solve();
|
||||
}
|
||||
#else
|
||||
for (int i = 0; i < t_cnt; i++)
|
||||
{
|
||||
if (m_mat_solvers[i]->is_timestep())
|
||||
if (m_mat_solvers[i]->is_timestep())
|
||||
{
|
||||
// Ignore return value
|
||||
ATTR_UNUSED const nl_double ts = m_mat_solvers[i]->solve();
|
||||
}
|
||||
#else
|
||||
for (int i = 0; i < t_cnt; i++)
|
||||
{
|
||||
if (m_mat_solvers[i]->is_timestep())
|
||||
{
|
||||
// Ignore return value
|
||||
ATTR_UNUSED const nl_double ts = m_mat_solvers[i]->solve();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -249,7 +249,7 @@ ATTR_COLD void netlist_base_t::reset()
|
||||
}
|
||||
|
||||
|
||||
ATTR_HOT ATTR_ALIGN void netlist_base_t::process_queue(const netlist_time delta)
|
||||
ATTR_HOT ATTR_ALIGN void netlist_base_t::process_queue(const netlist_time &delta)
|
||||
{
|
||||
m_stop = m_time + delta;
|
||||
|
||||
@ -508,7 +508,7 @@ ATTR_HOT void netlist_net_t::inc_active(netlist_core_terminal_t &term)
|
||||
if (m_time > netlist().time())
|
||||
{
|
||||
m_in_queue = 1; /* pending */
|
||||
netlist().push_to_queue(this, m_time);
|
||||
netlist().push_to_queue(*this, m_time);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -671,6 +671,7 @@ ATTR_COLD void netlist_net_t::merge_net(netlist_net_t *othernet)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// netlist_logic_net_t
|
||||
// ----------------------------------------------------------------------------------------
|
||||
@ -1001,3 +1002,13 @@ NETLIB_UPDATE(mainclock)
|
||||
net.toggle_new_Q();
|
||||
net.set_time(netlist().time() + m_inc);
|
||||
}
|
||||
|
||||
ATTR_HOT void netlist_base_t::push_to_queue(netlist_net_t &out, const netlist_time &attime)
|
||||
{
|
||||
m_queue.push(netlist_queue_t::entry_t(attime, &out));
|
||||
}
|
||||
|
||||
ATTR_HOT void netlist_base_t::remove_from_queue(netlist_net_t &out)
|
||||
{
|
||||
m_queue.remove(&out);
|
||||
}
|
||||
|
@ -166,7 +166,9 @@
|
||||
// Type definitions
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
||||
typedef UINT8 netlist_sig_t;
|
||||
//typedef UINT8 netlist_sig_t;
|
||||
|
||||
#define netlist_sig_t UINT8
|
||||
|
||||
class netlist_core_device_t;
|
||||
|
||||
@ -619,14 +621,14 @@ public:
|
||||
|
||||
ATTR_HOT void update_devs();
|
||||
|
||||
ATTR_HOT inline const netlist_time time() const { return m_time; }
|
||||
ATTR_HOT inline void set_time(const netlist_time ntime) { m_time = ntime; }
|
||||
ATTR_HOT inline const netlist_time &time() const { return m_time; }
|
||||
ATTR_HOT inline void set_time(const netlist_time &ntime) { m_time = ntime; }
|
||||
|
||||
ATTR_HOT inline bool isRailNet() const { return !(m_railterminal == NULL); }
|
||||
ATTR_HOT inline const netlist_core_terminal_t & RESTRICT railterminal() const { return *m_railterminal; }
|
||||
|
||||
ATTR_HOT inline void push_to_queue(const netlist_time delay);
|
||||
ATTR_HOT inline void reschedule_in_queue(const netlist_time delay);
|
||||
ATTR_HOT inline void push_to_queue(const netlist_time &delay);
|
||||
ATTR_HOT inline void reschedule_in_queue(const netlist_time &delay);
|
||||
ATTR_HOT bool inline is_queued() const { return m_in_queue == 1; }
|
||||
|
||||
ATTR_HOT inline int num_cons() const { return m_core_terms.count(); }
|
||||
@ -685,7 +687,7 @@ public:
|
||||
return m_new_Q;
|
||||
}
|
||||
|
||||
ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time delay)
|
||||
ATTR_HOT inline void set_Q(const netlist_sig_t &newQ, const netlist_time &delay)
|
||||
{
|
||||
if (EXPECTED(newQ != m_new_Q))
|
||||
{
|
||||
@ -806,7 +808,7 @@ public:
|
||||
ATTR_COLD nld_base_d_to_a_proxy *get_proxy() const { return m_proxy; }
|
||||
ATTR_COLD void set_proxy(nld_base_d_to_a_proxy *proxy) { m_proxy = proxy; }
|
||||
|
||||
ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time delay)
|
||||
ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time &delay)
|
||||
{
|
||||
net().as_logic().set_Q(newQ, delay);
|
||||
}
|
||||
@ -992,7 +994,7 @@ public:
|
||||
return inp.Q();
|
||||
}
|
||||
|
||||
ATTR_HOT inline void OUTLOGIC(netlist_logic_output_t &out, const netlist_sig_t val, const netlist_time delay)
|
||||
ATTR_HOT inline void OUTLOGIC(netlist_logic_output_t &out, const netlist_sig_t val, const netlist_time &delay)
|
||||
{
|
||||
out.set_Q(val, delay);
|
||||
}
|
||||
@ -1117,22 +1119,15 @@ public:
|
||||
|
||||
ATTR_HOT inline const netlist_queue_t &queue() const { return m_queue; }
|
||||
ATTR_HOT inline netlist_queue_t &queue() { return m_queue; }
|
||||
ATTR_HOT inline const netlist_time time() const { return m_time; }
|
||||
ATTR_HOT inline const netlist_time &time() const { return m_time; }
|
||||
ATTR_HOT inline NETLIB_NAME(solver) *solver() const { return m_solver; }
|
||||
ATTR_HOT inline NETLIB_NAME(gnd) *gnd() const { return m_gnd; }
|
||||
ATTR_HOT const nl_double gmin() const;
|
||||
|
||||
ATTR_HOT inline void push_to_queue(netlist_net_t *out, const netlist_time attime)
|
||||
{
|
||||
m_queue.push(netlist_queue_t::entry_t(attime, out));
|
||||
}
|
||||
ATTR_HOT void push_to_queue(netlist_net_t &out, const netlist_time &attime);
|
||||
ATTR_HOT void remove_from_queue(netlist_net_t &out);
|
||||
|
||||
ATTR_HOT inline void remove_from_queue(netlist_net_t *out)
|
||||
{
|
||||
m_queue.remove(out);
|
||||
}
|
||||
|
||||
ATTR_HOT void process_queue(const netlist_time delta);
|
||||
ATTR_HOT void process_queue(const netlist_time &delta);
|
||||
ATTR_HOT inline void abort_current_queue_slice() { m_stop = netlist_time::zero; }
|
||||
|
||||
ATTR_COLD void rebuild_lists(); /* must be called after post_load ! */
|
||||
@ -1322,7 +1317,7 @@ ATTR_HOT inline void netlist_logic_input_t::activate_lh()
|
||||
}
|
||||
|
||||
|
||||
ATTR_HOT inline void netlist_net_t::push_to_queue(const netlist_time delay)
|
||||
ATTR_HOT inline void netlist_net_t::push_to_queue(const netlist_time &delay)
|
||||
{
|
||||
//if (UNEXPECTED(m_num_cons == 0 || is_queued()))
|
||||
if (!is_queued())
|
||||
@ -1331,22 +1326,22 @@ ATTR_HOT inline void netlist_net_t::push_to_queue(const netlist_time delay)
|
||||
m_in_queue = (m_active > 0); /* queued ? */
|
||||
if (EXPECTED(m_in_queue))
|
||||
{
|
||||
netlist().push_to_queue(this, m_time);
|
||||
netlist().push_to_queue(*this, m_time);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ATTR_HOT inline void netlist_net_t::reschedule_in_queue(const netlist_time delay)
|
||||
ATTR_HOT inline void netlist_net_t::reschedule_in_queue(const netlist_time &delay)
|
||||
{
|
||||
//if (UNEXPECTED(m_num_cons == 0 || is_queued()))
|
||||
if (is_queued())
|
||||
netlist().remove_from_queue(this);
|
||||
netlist().remove_from_queue(*this);
|
||||
|
||||
m_time = netlist().time() + delay;
|
||||
m_in_queue = (m_active > 0); /* queued ? */
|
||||
if (EXPECTED(m_in_queue))
|
||||
{
|
||||
netlist().push_to_queue(this, m_time);
|
||||
netlist().push_to_queue(*this, m_time);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
// The following adds about 10% performance ...
|
||||
|
||||
#define USE_OPENMP (0)
|
||||
#define USE_OPENMP (1)
|
||||
|
||||
// Use nano-second resolution - Sufficient for now
|
||||
#define NETLIST_INTERNAL_RES (U64(1000000000))
|
||||
|
@ -27,14 +27,20 @@ public:
|
||||
{
|
||||
public:
|
||||
ATTR_HOT inline entry_t()
|
||||
: m_exec_time(), m_object() {}
|
||||
ATTR_HOT inline entry_t(const _Time atime, const _Element elem) : m_exec_time(atime), m_object(elem) {}
|
||||
: m_object(), m_exec_time() {}
|
||||
ATTR_HOT inline entry_t(const _Time &atime, const _Element &elem) : m_object(elem), m_exec_time(atime) {}
|
||||
ATTR_HOT inline const _Time exec_time() const { return m_exec_time; }
|
||||
ATTR_HOT inline const _Element object() const { return m_object; }
|
||||
|
||||
ATTR_HOT inline entry_t &operator=(const entry_t &right) {
|
||||
m_object = right.m_object;
|
||||
m_exec_time = right.m_exec_time;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
_Time m_exec_time;
|
||||
_Element m_object;
|
||||
_Time m_exec_time;
|
||||
};
|
||||
|
||||
netlist_timed_queue()
|
||||
@ -47,11 +53,10 @@ public:
|
||||
ATTR_HOT inline bool is_empty() const { return (m_end == &m_list[0]); }
|
||||
ATTR_HOT inline bool is_not_empty() const { return (m_end > &m_list[0]); }
|
||||
|
||||
ATTR_HOT ATTR_ALIGN void push(const entry_t &e)
|
||||
ATTR_HOT /*ATTR_ALIGN*/ void push(const entry_t &e)
|
||||
{
|
||||
entry_t * i = m_end++;
|
||||
const _Time e_time = e.exec_time();
|
||||
while ((i > &m_list[0]) && (e_time > (i - 1)->exec_time()) )
|
||||
while ((i > &m_list[0]) && (e.exec_time() > (i - 1)->exec_time()) )
|
||||
{
|
||||
*(i) = *(i-1);
|
||||
i--;
|
||||
@ -72,7 +77,7 @@ public:
|
||||
return (m_end-1);
|
||||
}
|
||||
|
||||
ATTR_HOT inline void remove(const _Element elem)
|
||||
ATTR_HOT /*inline*/ void remove(const _Element &elem)
|
||||
{
|
||||
entry_t * i = m_end - 1;
|
||||
while (i > &m_list[0])
|
||||
|
Loading…
Reference in New Issue
Block a user