diff options
author | couriersud <couriersud@gmx.org> | 2019-01-18 10:23:04 +0100 |
---|---|---|
committer | couriersud <couriersud@gmx.org> | 2019-01-18 10:23:04 +0100 |
commit | 0bd20c8d14602c4890f510cd2f41e9a83d6ac246 (patch) | |
tree | a5c3121d5f4826a92869eee4f334e0ace34a8602 | |
parent | a43a2dc2f7d194785cfb20fce2e450cd57c5a65e (diff) |
netlist: add nvcc support to netlist makefile. (nw)
Also converted some by-ref calls to pass by value.
-rw-r--r-- | src/lib/netlist/build/makefile | 15 | ||||
-rw-r--r-- | src/lib/netlist/nl_base.h | 4 | ||||
-rw-r--r-- | src/lib/netlist/nl_time.h | 43 | ||||
-rw-r--r-- | src/lib/netlist/plib/pconfig.h | 8 |
4 files changed, 43 insertions, 27 deletions
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 3a26da16b7d..272f1718429 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -23,7 +23,7 @@ endif # LTO = -flto=4 -fuse-linker-plugin -flto-partition=balanced -Wodr -CFLAGS = $(LTO) -g -O3 -std=c++11 -march=native -I../.. -Wall -Wpedantic -Wsign-compare -Wextra -Wno-unused-parameter $(CEXTRAFLAGS) +CFLAGS = $(LTO) -g -O3 -std=c++11 -I../.. $(CEXTRAFLAGS) LDFLAGS = $(LTO) -g -O3 -std=c++11 $(LDEXTRAFLAGS) LIBS = -lpthread -ldl @@ -157,7 +157,7 @@ ALL_OBJS = $(OBJS) $(PMAIN) $(NLOBJ)/prg/nltool.o $(NLOBJ)/prg/nlwav.o SOURCES = $(patsubst $(OBJ)%, $(SRC)%, $(ALL_OBJS:.o=.cpp)) ALLFILES = $(SOURCES) $(VSBUILDS) $(DOCS) -MAKEFILE_TARGETS_WITHOUT_INCLUDE := clean doc clang mingw +MAKEFILE_TARGETS_WITHOUT_INCLUDE := clean doc clang mingw nvcc # git archive HEAD --prefix=project-name-version/ \ @@ -201,14 +201,21 @@ maketree: $(sort $(OBJDIRS)) # Special targets #------------------------------------------------- -.PHONY: clang clang-5 mingw doc +.PHONY: clang clang-5 mingw doc native + +native: + $(MAKE) CEXTRAFLAGS="-march=native -Wall -Wpedantic -Wsign-compare -Wextra -Wno-unused-parameter" clang: - $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-march=native -Weverything -Werror -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wweak-template-vtables -Wno-exit-time-destructors" + $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-march=native -Wno-unused-parameter -Weverything -Werror -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wweak-template-vtables -Wno-exit-time-destructors" clang-5: $(MAKE) CC=clang++-5.0 LD=clang++-5.0 CEXTRAFLAGS="-march=native -Weverything -Werror -Wno-inconsistent-missing-destructor-override -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-weak-template-vtables -Wno-exit-time-destructors" +nvcc: + $(MAKE) CC=/usr/local/cuda-9.0/bin/nvcc LD=/usr/local/cuda-9.2/bin/nvcc \ + CEXTRAFLAGS="-x cu -DNVCCBUILD=1 --expt-extended-lambda --expt-relaxed-constexpr --default-stream per-thread --restrict" + # # Mostly done: -Wno-weak-vtables -Wno-cast-align # FIXME: -Wno-weak-vtables -Wno-missing-variable-declarations -Wno-conversion -Wno-exit-time-destructors diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 72e87fd4964..dc2e3df5522 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -434,8 +434,8 @@ namespace netlist setup_t & setup(); const setup_t & setup() const; - C14CONSTEXPR netlist_t & exec() NL_NOEXCEPT { return m_netlist; } - constexpr const netlist_t & exec() const NL_NOEXCEPT { return m_netlist; } + netlist_t & exec() NL_NOEXCEPT { return m_netlist; } + const netlist_t & exec() const NL_NOEXCEPT { return m_netlist; } protected: ~netlist_ref() = default; // prohibit polymorphic destruction diff --git a/src/lib/netlist/nl_time.h b/src/lib/netlist/nl_time.h index 7c81f890e07..d5223db3140 100644 --- a/src/lib/netlist/nl_time.h +++ b/src/lib/netlist/nl_time.h @@ -40,24 +40,26 @@ namespace netlist constexpr ptime(const ptime &rhs) noexcept = default; constexpr ptime(ptime &&rhs) noexcept = default; + constexpr explicit ptime(const internal_type &time) noexcept : m_time(time) {} + constexpr explicit ptime(internal_type &&time) noexcept : m_time(time) {} C14CONSTEXPR ptime &operator=(const ptime &rhs) noexcept = default; C14CONSTEXPR ptime &operator=(ptime &&rhs) noexcept = default; constexpr explicit ptime(const double t) = delete; //: m_time((internal_type) ( t * (double) resolution)) { } - constexpr explicit ptime(const internal_type &nom, const internal_type &den) noexcept + constexpr explicit ptime(const internal_type nom, const internal_type den) noexcept : m_time(nom * (RES / den)) { } - C14CONSTEXPR ptime &operator+=(const ptime &rhs) noexcept { m_time += rhs.m_time; return *this; } - C14CONSTEXPR ptime &operator-=(const ptime &rhs) noexcept { m_time -= rhs.m_time; return *this; } - C14CONSTEXPR ptime &operator*=(const mult_type &factor) noexcept { m_time *= static_cast<internal_type>(factor); return *this; } + C14CONSTEXPR ptime &operator+=(const ptime rhs) noexcept { m_time += rhs.m_time; return *this; } + C14CONSTEXPR ptime &operator-=(const ptime rhs) noexcept { m_time -= rhs.m_time; return *this; } + C14CONSTEXPR ptime &operator*=(const mult_type factor) noexcept { m_time *= static_cast<internal_type>(factor); return *this; } - friend C14CONSTEXPR ptime operator-(ptime lhs, const ptime &rhs) noexcept + friend C14CONSTEXPR ptime operator-(ptime lhs, const ptime rhs) noexcept { return lhs -= rhs; } - friend C14CONSTEXPR ptime operator+(ptime lhs, const ptime &rhs) noexcept + friend C14CONSTEXPR ptime operator+(ptime lhs, const ptime rhs) noexcept { return lhs += rhs; } @@ -67,37 +69,37 @@ namespace netlist return lhs *= factor; } - friend constexpr mult_type operator/(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr mult_type operator/(const ptime lhs, const ptime rhs) noexcept { return static_cast<mult_type>(lhs.m_time / rhs.m_time); } - friend constexpr bool operator<(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator<(const ptime lhs, const ptime rhs) noexcept { return (lhs.m_time < rhs.m_time); } - friend constexpr bool operator>(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator>(const ptime lhs, const ptime rhs) noexcept { return (rhs < lhs); } - friend constexpr bool operator<=(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator<=(const ptime lhs, const ptime rhs) noexcept { return !(lhs > rhs); } - friend constexpr bool operator>=(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator>=(const ptime lhs, const ptime rhs) noexcept { return !(lhs < rhs); } - friend constexpr bool operator==(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator==(const ptime lhs, const ptime rhs) noexcept { return lhs.m_time == rhs.m_time; } - friend constexpr bool operator!=(const ptime &lhs, const ptime &rhs) noexcept + friend constexpr bool operator!=(const ptime lhs, const ptime rhs) noexcept { return !(lhs == rhs); } @@ -105,17 +107,17 @@ namespace netlist constexpr internal_type as_raw() const noexcept { return m_time; } constexpr double as_double() const noexcept { - return static_cast<double>(m_time) / static_cast<double>(RES); + return static_cast<double>(m_time) * inv_res; } // for save states .... C14CONSTEXPR internal_type *get_internaltype_ptr() noexcept { return &m_time; } - static constexpr ptime from_nsec(const internal_type &ns) noexcept { return ptime(ns, UINT64_C(1000000000)); } - static constexpr ptime from_usec(const internal_type &us) noexcept { return ptime(us, UINT64_C(1000000)); } - static constexpr ptime from_msec(const internal_type &ms) noexcept { return ptime(ms, UINT64_C(1000)); } - static constexpr ptime from_hz(const internal_type &hz) noexcept { return ptime(1 , hz); } - static constexpr ptime from_raw(const internal_type &raw) noexcept { return ptime(raw); } + static constexpr ptime from_nsec(const internal_type ns) noexcept { return ptime(ns, UINT64_C(1000000000)); } + static constexpr ptime from_usec(const internal_type us) noexcept { return ptime(us, UINT64_C(1000000)); } + static constexpr ptime from_msec(const internal_type ms) noexcept { return ptime(ms, UINT64_C(1000)); } + static constexpr ptime from_hz(const internal_type hz) noexcept { return ptime(1 , hz); } + static constexpr ptime from_raw(const internal_type raw) noexcept { return ptime(raw); } static constexpr ptime from_double(const double t) noexcept { return ptime(static_cast<internal_type>( t * static_cast<double>(RES)), RES); } static constexpr ptime zero() noexcept { return ptime(0, RES); } @@ -123,8 +125,7 @@ namespace netlist static constexpr ptime never() noexcept { return ptime(plib::numeric_limits<internal_type>::max(), RES); } static constexpr internal_type resolution() noexcept { return RES; } private: - constexpr explicit ptime(const internal_type &time) : m_time(time) {} - constexpr explicit ptime(internal_type &&time) : m_time(time) {} + static constexpr const double inv_res = 1.0 / static_cast<double>(RES); internal_type m_time; }; diff --git a/src/lib/netlist/plib/pconfig.h b/src/lib/netlist/plib/pconfig.h index dddaf0de86a..bef33323670 100644 --- a/src/lib/netlist/plib/pconfig.h +++ b/src/lib/netlist/plib/pconfig.h @@ -47,6 +47,13 @@ * *============================================================*/ +#ifndef NVCCBUILD +#define NVCCBUILD (0) +#endif + +#if NVCCBUILD +#define C14CONSTEXPR +#else #if __cplusplus == 201103L #define C14CONSTEXPR #elif __cplusplus == 201402L @@ -58,6 +65,7 @@ #else #error "C++ version not supported" #endif +#endif #ifndef PHAS_INT128 #define PHAS_INT128 (0) |