From f0fb3b78d144dcc4c95b63a392f251cef0a6ae43 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Mon, 5 Jun 2017 20:04:09 -0400 Subject: [PATCH] Internals: New VL_ZERO_W for faster inline. Prefer WData for wide. No functional change intended. --- include/verilated.cpp | 10 +++++----- include/verilated.h | 29 +++++++++++++++++------------ include/verilated_heavy.h | 8 ++++---- include/verilated_vpi.cpp | 2 +- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/include/verilated.cpp b/include/verilated.cpp index b709dd5c5..d5bb9eb57 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -779,7 +779,7 @@ IData VL_FOPEN_NI(const string& filename, IData mode) { return VL_FOPEN_S(filename.c_str(), modez); } IData VL_FOPEN_QI(QData filename, IData mode) { - IData fnw[2]; VL_SET_WQ(fnw, filename); + WData fnw[2]; VL_SET_WQ(fnw, filename); return VL_FOPEN_WI(2, fnw, mode); } IData VL_FOPEN_WI(int fnwords, WDataInP filenamep, IData mode) { @@ -913,7 +913,7 @@ IData VL_FSCANF_IX(IData fpi, const char* formatp, ...) { } IData VL_SSCANF_IIX(int lbits, IData ld, const char* formatp, ...) { - IData fnw[2]; VL_SET_WI(fnw, ld); + WData fnw[2]; VL_SET_WI(fnw, ld); va_list ap; va_start(ap,formatp); @@ -922,7 +922,7 @@ IData VL_SSCANF_IIX(int lbits, IData ld, const char* formatp, ...) { return got; } IData VL_SSCANF_IQX(int lbits, QData ld, const char* formatp, ...) { - IData fnw[2]; VL_SET_WQ(fnw, ld); + WData fnw[2]; VL_SET_WQ(fnw, ld); va_list ap; va_start(ap,formatp); @@ -947,7 +947,7 @@ IData VL_SSCANF_INX(int, const string& ld, const char* formatp, ...) { void VL_READMEM_Q(bool hex, int width, int depth, int array_lsb, int, QData ofilename, void* memp, IData start, IData end) { - IData fnw[2]; VL_SET_WQ(fnw, ofilename); + WData fnw[2]; VL_SET_WQ(fnw, ofilename); return VL_READMEM_W(hex,width,depth,array_lsb,2, fnw,memp,start,end); } @@ -1060,7 +1060,7 @@ void VL_READMEM_N(bool hex, int width, int depth, int array_lsb, int fnwords, } IData VL_SYSTEM_IQ(QData lhs) { - IData lhsw[2]; VL_SET_WQ(lhsw, lhs); + WData lhsw[2]; VL_SET_WQ(lhsw, lhs); return VL_SYSTEM_IW(2, lhsw); } IData VL_SYSTEM_IW(int lhswords, WDataInP filenamep) { diff --git a/include/verilated.h b/include/verilated.h index a77ddde69..857ee893c 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -349,7 +349,7 @@ extern WDataOutP VL_RANDOM_W(int obits, WDataOutP outwp); ///< Randomize a signa extern IData VL_RAND_RESET_I(int obits); ///< Random reset a signal extern QData VL_RAND_RESET_Q(int obits); ///< Random reset a signal extern WDataOutP VL_RAND_RESET_W(int obits, WDataOutP outwp); ///< Random reset a signal -extern WDataOutP VL_ZERO_RESET_W(int obits, WDataOutP outwp); ///< Zero reset a signal +extern WDataOutP VL_ZERO_RESET_W(int obits, WDataOutP outwp); ///< Zero reset a signal (slow - else use VL_ZERO_W) /// Math extern WDataOutP _vl_moddiv_w(int lbits, WDataOutP owp, WDataInP lwp, WDataInP rwp, bool is_modulus); @@ -398,7 +398,7 @@ extern const char* vl_mc_scan_plusargs(const char* prefixp); // PLIish //========================================================================= // Base macros -/// Return true if data[bit] set +/// Return true if data[bit] set; not 0/1 return, but 0/non-zero return. #define VL_BITISSET_I(data,bit) (data & (VL_UL(1)<>32 or more - return VL_ZERO_RESET_W(obits, owp); + return VL_ZERO_W(obits, owp); } } return VL_SHIFTL_WWI(obits,lbits,32,owp,lwp,rwp[0]); @@ -1633,7 +1638,7 @@ static inline WDataOutP VL_SHIFTR_WWI(int obits,int,int,WDataOutP owp,WDataInP l static inline WDataOutP VL_SHIFTR_WWW(int obits,int lbits,int rbits,WDataOutP owp,WDataInP lwp, WDataInP rwp) { for (int i=1; i < VL_WORDS_I(rbits); i++) { if (VL_UNLIKELY(rwp[i])) { // Huge shift 1>>32 or more - return VL_ZERO_RESET_W(obits, owp); + return VL_ZERO_W(obits, owp); } } return VL_SHIFTR_WWI(obits,lbits,32,owp,lwp,rwp[0]); diff --git a/include/verilated_heavy.h b/include/verilated_heavy.h index 5d9a1c8f3..b5c3e422e 100644 --- a/include/verilated_heavy.h +++ b/include/verilated_heavy.h @@ -38,14 +38,14 @@ extern string VL_CVT_PACK_STR_NW(int lwords, WDataInP lwp); inline string VL_CVT_PACK_STR_NQ(QData lhs) { - IData lw[2]; VL_SET_WQ(lw, lhs); + WData lw[2]; VL_SET_WQ(lw, lhs); return VL_CVT_PACK_STR_NW(2, lw); } inline string VL_CVT_PACK_STR_NN(const string& lhs) { return lhs; } inline string VL_CVT_PACK_STR_NI(IData lhs) { - IData lw[1]; lw[0] = lhs; + WData lw[1]; lw[0] = lhs; return VL_CVT_PACK_STR_NW(1, lw); } inline string VL_CONCATN_NNN(const string& lhs, const string& rhs) { @@ -68,13 +68,13 @@ extern void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, extern string VL_SFORMATF_NX(const char* formatp, ...); extern IData VL_VALUEPLUSARGS_INW(int rbits, const string& ld, WDataOutP rdp); inline IData VL_VALUEPLUSARGS_INI(int rbits, const string& ld, IData& rdr) { - IData rwp[1]; + WData rwp[1]; IData got = VL_VALUEPLUSARGS_INW(rbits,ld,rwp); if (got) rdr = rwp[0]; return got; } inline IData VL_VALUEPLUSARGS_INQ(int rbits, const string& ld, QData& rdr) { - IData rwp[2]; + WData rwp[2]; IData got = VL_VALUEPLUSARGS_INW(rbits,ld,rwp); if (got) rdr = VL_SET_QW(rwp); return got; diff --git a/include/verilated_vpi.cpp b/include/verilated_vpi.cpp index 781612d69..7ee66e00d 100644 --- a/include/verilated_vpi.cpp +++ b/include/verilated_vpi.cpp @@ -1255,7 +1255,7 @@ void vpi_get_time(vpiHandle object, p_vpi_time time_p) { } if (time_p->type == vpiSimTime) { QData qtime = VL_TIME_Q(); - IData itime[2]; + WData itime[2]; VL_SET_WQ(itime, qtime); time_p->low = itime[0]; time_p->high = itime[1];