summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib')
-rw-r--r--src/lib/netlist/plib/palloc.cpp36
-rw-r--r--src/lib/netlist/plib/palloc.h76
-rw-r--r--src/lib/netlist/plib/pconfig.h27
-rw-r--r--src/lib/netlist/plib/pdynlib.cpp18
-rw-r--r--src/lib/netlist/plib/pdynlib.h12
-rw-r--r--src/lib/netlist/plib/pfmtlog.cpp6
-rw-r--r--src/lib/netlist/plib/plists.h2
-rw-r--r--src/lib/netlist/plib/pstream.cpp6
-rw-r--r--src/lib/netlist/plib/pstring.cpp8
9 files changed, 73 insertions, 118 deletions
diff --git a/src/lib/netlist/plib/palloc.cpp b/src/lib/netlist/plib/palloc.cpp
index efa42964434..eeaeb99293f 100644
--- a/src/lib/netlist/plib/palloc.cpp
+++ b/src/lib/netlist/plib/palloc.cpp
@@ -19,42 +19,6 @@ pexception::pexception(const pstring &text)
fprintf(stderr, "%s\n", m_text.cstr());
}
-#if (PSTANDALONE)
-#include <stdlib.h>
-#include <xmmintrin.h>
-
-class pmemory_pool
-{
-public:
- pmemory_pool() {}
-};
-
-static pmemory_pool sppool;
-
-pmemory_pool *ppool = &sppool;
-
-void* operator new(std::size_t size, pmemory_pool *pool) throw (std::bad_alloc)
-{
- return palloc_raw(size);;
-}
-
-void operator delete(void *ptr, pmemory_pool *pool)
-{
- if (ptr != nullptr)
- pfree_raw(ptr);
-}
-
-void *palloc_raw(const size_t size)
-{
- return _mm_malloc(size, 64);
-}
-
-void pfree_raw(void *p)
-{
- _mm_free(p);
-}
-#endif
-
pmempool::pmempool(int min_alloc, int min_align)
: m_min_alloc(min_alloc), m_min_align(min_align)
{
diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h
index bc0b18a2ff8..4d0870e525a 100644
--- a/src/lib/netlist/plib/palloc.h
+++ b/src/lib/netlist/plib/palloc.h
@@ -50,76 +50,32 @@ private:
#define ATTR_ALIGN
#endif
-class pmemory_pool;
-
-extern pmemory_pool *ppool;
-
-void *palloc_raw(const size_t size);
-void pfree_raw(void *p);
-
-void* operator new(std::size_t size, pmemory_pool *pool) throw (std::bad_alloc);
-
-void operator delete(void *ptr, pmemory_pool *pool);
-
-template<typename T>
-inline void pfree_t(T *p)
-{
- p->~T();
- pfree_raw(p);
-}
-
-template <typename T>
-inline T *palloc_array_t(size_t N)
-{
- char *buf = reinterpret_cast<char *>(palloc_raw(N * sizeof(T) + 64*2));
- size_t *s = reinterpret_cast<size_t *>(buf);
- *s = N;
- buf += 64;
- T *p = reinterpret_cast<T *>(buf);
- for (size_t i = 0; i < N; i++)
- new(reinterpret_cast<void *>(&p[i])) T();
- return p;
-}
-
-template <typename T>
-inline void pfree_array_t(T *p)
-{
- char *buf = reinterpret_cast<char *>(p);
- buf -= 64;
- size_t *s = reinterpret_cast<size_t *>(buf);
- size_t N = *s;
- while (N > 0)
- {
- p->~T();
- p++;
- N--;
- }
- pfree_raw(s);
-}
-
-#if 0
-#define palloc(T) new(ppool) T
-#define pfree(_ptr) pfree_t(_ptr)
-
-#define palloc_array(T, N) palloc_array_t<T>(N)
-#define pfree_array(_ptr) pfree_array_t(_ptr)
-#else
#define palloc(T) new T
#define pfree(_ptr) delete _ptr
#define palloc_array(T, N) new T[N]
#define pfree_array(_ptr) delete[] _ptr
-#endif
#else
-#include "corealloc.h"
#define ATTR_ALIGN
-#define palloc(T) global_alloc(T)
-#define pfree(_ptr) global_free(_ptr)
+template<typename T, typename... Args>
+T *palloc(Args&&... args)
+{
+ return new T(std::forward<Args>(args)...);
+}
+
+template<typename T>
+void pfree(T *ptr) { delete ptr; }
-#define palloc_array(T, N) global_alloc_array(T, N)
-#define pfree_array(_ptr) global_free_array(_ptr)
+template<typename T>
+inline T* palloc_array(std::size_t num)
+{
+ return new T[num]();
+}
+
+template<typename T>
+void pfree_array(T *ptr) { delete [] ptr; }
#endif
diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h
index 82c71c2f2a8..787bcede422 100644
--- a/src/lib/netlist/plib/pconfig.h
+++ b/src/lib/netlist/plib/pconfig.h
@@ -9,6 +9,8 @@
#define PCONFIG_H_
#include <cstdint>
+#include <thread>
+#include <chrono>
#ifndef PSTANDALONE
#define PSTANDALONE (0)
@@ -25,6 +27,8 @@ typedef __uint128_t UINT128;
typedef __int128_t INT128;
#endif
+#define PLIB_NAMESPACE_START() namespace plib {
+#define PLIB_NAMESPACE_END() }
#if !(PSTANDALONE)
#include "osdcomm.h"
@@ -135,6 +139,29 @@ typedef int64_t INT64;
#endif
+using pticks_t = INT64;
+
+inline pticks_t pticks()
+{
+ return std::chrono::high_resolution_clock::now().time_since_epoch().count();
+}
+inline pticks_t pticks_per_second()
+{
+ return std::chrono::high_resolution_clock::period::den / std::chrono::high_resolution_clock::period::num;
+}
+
+#if 1 && defined(__x86_64__)
+
+static inline pticks_t pprofile_ticks()
+{
+ unsigned hi, lo;
+ __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
+ return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
+}
+#else
+inline pticks_t pprofile_ticks() { return pticks(); }
+#endif
+
/*
* The following class was derived from the MAME delegate.h code.
* It derives a pointer to a member function.
diff --git a/src/lib/netlist/plib/pdynlib.cpp b/src/lib/netlist/plib/pdynlib.cpp
index d08f194a137..4f264a7550b 100644
--- a/src/lib/netlist/plib/pdynlib.cpp
+++ b/src/lib/netlist/plib/pdynlib.cpp
@@ -1,18 +1,20 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
- * pdynlib.c
+ * dynlib.c
*
*/
-#include "pdynlib.h"
+#include <plib/pdynlib.h>
#ifdef _WIN32
#include "windows.h"
#else
#include <dlfcn.h>
#endif
-pdynlib::pdynlib(const pstring libname)
+PLIB_NAMESPACE_START()
+
+dynlib::dynlib(const pstring libname)
: m_isLoaded(false), m_lib(nullptr)
{
#ifdef _WIN32
@@ -38,7 +40,7 @@ pdynlib::pdynlib(const pstring libname)
#endif
}
-pdynlib::pdynlib(const pstring path, const pstring libname)
+dynlib::dynlib(const pstring path, const pstring libname)
: m_isLoaded(false), m_lib(nullptr)
{
// printf("win: loading <%s>\n", libname.cstr());
@@ -68,7 +70,7 @@ pdynlib::pdynlib(const pstring path, const pstring libname)
#endif
}
-pdynlib::~pdynlib()
+dynlib::~dynlib()
{
if (m_lib != nullptr)
{
@@ -80,12 +82,12 @@ pdynlib::~pdynlib()
}
}
-bool pdynlib::isLoaded() const
+bool dynlib::isLoaded() const
{
return m_isLoaded;
}
-void *pdynlib::getsym_p(const pstring name)
+void *dynlib::getsym_p(const pstring name)
{
#ifdef _WIN32
return (void *) GetProcAddress((HMODULE) m_lib, name.cstr());
@@ -93,3 +95,5 @@ void *pdynlib::getsym_p(const pstring name)
return dlsym(m_lib, name.cstr());
#endif
}
+
+PLIB_NAMESPACE_END()
diff --git a/src/lib/netlist/plib/pdynlib.h b/src/lib/netlist/plib/pdynlib.h
index 66a2d63b302..d444cb074fa 100644
--- a/src/lib/netlist/plib/pdynlib.h
+++ b/src/lib/netlist/plib/pdynlib.h
@@ -13,16 +13,18 @@
#include "pconfig.h"
#include "pstring.h"
+PLIB_NAMESPACE_START()
+
// ----------------------------------------------------------------------------------------
// pdynlib: dynamic loading of libraries ...
// ----------------------------------------------------------------------------------------
-class pdynlib
+class dynlib
{
public:
- pdynlib(const pstring libname);
- pdynlib(const pstring path, const pstring libname);
- ~pdynlib();
+ dynlib(const pstring libname);
+ dynlib(const pstring path, const pstring libname);
+ ~dynlib();
bool isLoaded() const;
@@ -38,4 +40,6 @@ private:
void *m_lib;
};
+PLIB_NAMESPACE_END()
+
#endif /* _PSTRING_H_ */
diff --git a/src/lib/netlist/plib/pfmtlog.cpp b/src/lib/netlist/plib/pfmtlog.cpp
index 25ed4c4d391..d2388efad73 100644
--- a/src/lib/netlist/plib/pfmtlog.cpp
+++ b/src/lib/netlist/plib/pfmtlog.cpp
@@ -23,7 +23,7 @@ pfmt::pfmt(const pstring &fmt)
if (l>sizeof(m_str_buf))
{
m_allocated = 2 * l;
- m_str = palloc_array(char, 2 * l);
+ m_str = palloc_array<char>(2 * l);
}
memcpy(m_str, fmt.cstr(), l);
}
@@ -35,7 +35,7 @@ pfmt::pfmt(const char *fmt)
if (l>sizeof(m_str_buf))
{
m_allocated = 2 * l;
- m_str = palloc_array(char, 2 * l);
+ m_str = palloc_array<char>(2 * l);
}
memcpy(m_str, fmt, l);
}
@@ -148,7 +148,7 @@ void pfmt::format_element(const char *f, const char *l, const char *fmt_spec, .
m_allocated = old_alloc;
while (new_size > m_allocated)
m_allocated *= 2;
- char *np = palloc_array(char, m_allocated);
+ char *np = palloc_array<char>(m_allocated);
memcpy(np, m_str, old_alloc);
p = np + (p - m_str);
if (m_str != m_str_buf)
diff --git a/src/lib/netlist/plib/plists.h b/src/lib/netlist/plib/plists.h
index b77d034a9c2..a33d3c27737 100644
--- a/src/lib/netlist/plib/plists.h
+++ b/src/lib/netlist/plib/plists.h
@@ -73,7 +73,7 @@ protected:
if (m_list != nullptr)
pfree_array(m_list);
if (new_capacity > 0)
- m_list = palloc_array(_ListClass, new_capacity);
+ m_list = palloc_array<_ListClass>(new_capacity);
else
m_list = nullptr;
m_capacity = new_capacity;
diff --git a/src/lib/netlist/plib/pstream.cpp b/src/lib/netlist/plib/pstream.cpp
index 988a403236d..f7448f5a6ae 100644
--- a/src/lib/netlist/plib/pstream.cpp
+++ b/src/lib/netlist/plib/pstream.cpp
@@ -306,7 +306,7 @@ pimemstream::pos_type pimemstream::vtell()
pomemstream::pomemstream()
: postream(FLAG_SEEKABLE), m_pos(0), m_capacity(1024), m_size(0)
{
- m_mem = palloc_array(char, m_capacity);
+ m_mem = palloc_array<char>(m_capacity);
}
pomemstream::~pomemstream()
@@ -321,7 +321,7 @@ void pomemstream::vwrite(const void *buf, const unsigned n)
while (m_pos + n >= m_capacity)
m_capacity *= 2;
char *o = m_mem;
- m_mem = palloc_array(char, m_capacity);
+ m_mem = palloc_array<char>(m_capacity);
if (m_mem == nullptr)
{
set_flag(FLAG_ERROR);
@@ -345,7 +345,7 @@ void pomemstream::vseek(const pos_type n)
while (m_size >= m_capacity)
m_capacity *= 2;
char *o = m_mem;
- m_mem = palloc_array(char, m_capacity);
+ m_mem = palloc_array<char>(m_capacity);
if (m_mem == nullptr)
{
set_flag(FLAG_ERROR);
diff --git a/src/lib/netlist/plib/pstring.cpp b/src/lib/netlist/plib/pstring.cpp
index 172d543c06e..73117d01b02 100644
--- a/src/lib/netlist/plib/pstring.cpp
+++ b/src/lib/netlist/plib/pstring.cpp
@@ -373,12 +373,12 @@ template<typename F>
pstr_t *pstring_t<F>::salloc(int n)
{
if (stk == nullptr)
- stk = palloc_array(std::stack<pstr_t *>, 17);
+ stk = palloc_array<std::stack<pstr_t *>>(17);
pstr_t *p;
unsigned sn= ((32 - countleadbits(n)) + 1) / 2;
unsigned size = sizeof(pstr_t) + ((UINT64) 1<<(sn * 2)) + 1;
if (stk[sn].empty())
- p = (pstr_t *) palloc_array(char, size);
+ p = (pstr_t *) palloc_array<char>(size);
else
{
p = stk[sn].top();
@@ -543,7 +543,7 @@ void pstringbuffer::resize(const std::size_t size)
m_size = DEFAULT_SIZE;
while (m_size <= size)
m_size *= 2;
- m_ptr = palloc_array(char, m_size);
+ m_ptr = palloc_array<char>(m_size);
*m_ptr = 0;
m_len = 0;
}
@@ -551,7 +551,7 @@ void pstringbuffer::resize(const std::size_t size)
{
while (m_size < size)
m_size *= 2;
- char *new_buf = palloc_array(char, m_size);
+ char *new_buf = palloc_array<char>(m_size);
std::memcpy(new_buf, m_ptr, m_len + 1);
pfree_array(m_ptr);
m_ptr = new_buf;