diff --git a/vvp/vpi_callback.cc b/vvp/vpi_callback.cc index 4fc8bcc48..d09a89c18 100644 --- a/vvp/vpi_callback.cc +++ b/vvp/vpi_callback.cc @@ -987,28 +987,26 @@ static void real_signal_value(struct t_vpi_value*vp, double rval) break; case vpiBinStrVal: { - uint64_t val = vlg_round_to_u64(rval); - unsigned len = 0; + const uint64_t val = vlg_round_to_u64(rval); + unsigned len = 0; - while (val > 0) { - len += 1; - val /= 2; - } + // Compute bit‑width; For val==0, this yields len==1 + uint64_t tmp = val; + do { + len += 1; + tmp /= 2; + } while (tmp > 0); - val = vlg_round_to_u64(rval); - for (unsigned idx = 0 ; idx < len ; idx += 1) { - rbuf[len-idx-1] = (val & 1)? '1' : '0'; - val /= 2; - } + tmp = val; + for (unsigned idx = 0; idx < len; idx += 1) { + rbuf[len - idx - 1] = (tmp & 1) ? '1' : '0'; + tmp /= 2; + } - rbuf[len] = 0; - if (len == 0) { - rbuf[0] = '0'; - rbuf[1] = 0; - } - vp->value.str = rbuf; - break; - } + rbuf[len] = '\0'; + vp->value.str = rbuf; + break; + } case vpiSuppressVal: break; diff --git a/vvp/vpi_vthr_vector.cc b/vvp/vpi_vthr_vector.cc index 87ea1bc34..09c278f7f 100644 --- a/vvp/vpi_vthr_vector.cc +++ b/vvp/vpi_vthr_vector.cc @@ -143,28 +143,25 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp) break; case vpiBinStrVal: { - uint64_t vali = vlg_round_to_u64(val); - unsigned len = 0; + const uint64_t vali = vlg_round_to_u64(val); + unsigned len = 0; - while (vali > 0) { - len += 1; - vali /= 2; - } + uint64_t tmp = vali; + do { + len += 1; + tmp /= 2; + } while (tmp > 0); - vali = vlg_round_to_u64(val); - for (unsigned idx = 0 ; idx < len ; idx += 1) { - rbuf[len-idx-1] = (vali & 1)? '1' : '0'; - vali /= 2; - } + tmp = vali; + for (unsigned idx = 0; idx < len; idx += 1) { + rbuf[len - idx - 1] = (tmp & 1) ? '1' : '0'; + tmp /= 2; + } - rbuf[len] = 0; - if (len == 0) { - rbuf[0] = '0'; - rbuf[1] = 0; - } - vp->value.str = rbuf; - break; - } + rbuf[len] = '\0'; + vp->value.str = rbuf; + break; + } default: fprintf(stderr, "vvp error: get %d not supported "