diff --git a/include/fstcpp/fstcpp_variable_info.h b/include/fstcpp/fstcpp_variable_info.h index b91ab5103..f707aaaa8 100644 --- a/include/fstcpp/fstcpp_variable_info.h +++ b/include/fstcpp/fstcpp_variable_info.h @@ -310,7 +310,8 @@ public: info.resize(needed); EmitWriterHelper wh(info.data_ptr()); const double nan_val = std::numeric_limits::quiet_NaN(); - const uint64_t nan_val_u64 = *reinterpret_cast(&nan_val); + uint64_t nan_val_u64; + std::memcpy(&nan_val_u64, &nan_val, sizeof(nan_val_u64)); wh.writeTimeIndexAndEncoding(0, EncodingType::BINARY).write(nan_val_u64); } diff --git a/include/fstcpp/fstcpp_writer.cpp b/include/fstcpp/fstcpp_writer.cpp index b965e80b7..7f7b46458 100644 --- a/include/fstcpp/fstcpp_writer.cpp +++ b/include/fstcpp/fstcpp_writer.cpp @@ -271,7 +271,7 @@ void Writer::emitValueChange(Handle handle, const char *val) { FST_DCHECK_NE(bitwidth, 0); val += bitwidth; - thread_local static std::vector t_packed_value_buffer; + static std::vector t_packed_value_buffer; const unsigned num_words{(bitwidth + 63) / 64}; t_packed_value_buffer.assign(num_words, 0); for (unsigned i = 0; i < num_words; ++i) { diff --git a/include/verilated.mk.in b/include/verilated.mk.in index b936d8c45..9afb5757b 100644 --- a/include/verilated.mk.in +++ b/include/verilated.mk.in @@ -208,7 +208,6 @@ VK_USER_OBJS = $(addsuffix .o, $(VM_USER_CLASSES)) ifneq ($(VM_TRACE_FST),0) ifneq ($(VM_TRACE_FST),) - VM_GLOBAL_FAST += fstcpp_writer fstcpp_variable_info LDLIBS = -llz4 -lz endif endif diff --git a/include/verilated_fst_c.cpp b/include/verilated_fst_c.cpp index 8d72b2b08..3abfb40b6 100644 --- a/include/verilated_fst_c.cpp +++ b/include/verilated_fst_c.cpp @@ -26,9 +26,9 @@ #include "verilated.h" #include "verilated_fst_c.h" -// Include fstcpp library -#include "fstcpp/fstcpp.h" -#include "fstcpp/fstcpp_writer.h" +// Include fstcpp cpp file directly +#include "fstcpp/fstcpp_variable_info.cpp" +#include "fstcpp/fstcpp_writer.cpp" #include #include @@ -453,5 +453,7 @@ void VerilatedFstBuffer::emitWData(uint32_t code, const WData* newvalp, int bits VL_ATTR_ALWINLINE void VerilatedFstBuffer::emitDouble(uint32_t code, double newval) { m_owner.emitTimeChangeMaybe(); - m_fst->emitValueChange(m_symbolp[code], *reinterpret_cast(&newval)); + uint64_t newval_u64; + std::memcpy(&newval_u64, &newval, sizeof(newval_u64)); + m_fst->emitValueChange(m_symbolp[code], newval_u64); } diff --git a/test_regress/t/t_dist_whitespace.py b/test_regress/t/t_dist_whitespace.py index 2b4fa35f3..c6678f5b6 100755 --- a/test_regress/t/t_dist_whitespace.py +++ b/test_regress/t/t_dist_whitespace.py @@ -11,7 +11,7 @@ import vltest_bootstrap test.scenarios('dist') -Tabs_Exempt_Re = r'(\.out$)|(/gtkwave)|(Makefile)|(\.mk$)|(\.mk\.in$)|test_regress/t/t_preproc\.v|install-sh' +Tabs_Exempt_Re = r'(\.out$)|(/fstcpp)|(Makefile)|(\.mk$)|(\.mk\.in$)|test_regress/t/t_preproc\.v|install-sh' Unicode_Exempt_Re = r'(Changes$|CONTRIBUTORS$|LICENSES?|contributors.rst$|spelling.txt$)'