Refactor the logic for binary string value conversion.
This commit is contained in:
parent
aa6ae73740
commit
b35b74ac9c
|
|
@ -987,25 +987,23 @@ static void real_signal_value(struct t_vpi_value*vp, double rval)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case vpiBinStrVal: {
|
case vpiBinStrVal: {
|
||||||
uint64_t val = vlg_round_to_u64(rval);
|
const uint64_t val = vlg_round_to_u64(rval);
|
||||||
unsigned len = 0;
|
unsigned len = 0;
|
||||||
|
|
||||||
while (val > 0) {
|
// Compute bit‑width; For val==0, this yields len==1
|
||||||
|
uint64_t tmp = val;
|
||||||
|
do {
|
||||||
len += 1;
|
len += 1;
|
||||||
val /= 2;
|
tmp /= 2;
|
||||||
}
|
} while (tmp > 0);
|
||||||
|
|
||||||
val = vlg_round_to_u64(rval);
|
tmp = val;
|
||||||
for (unsigned idx = 0; idx < len; idx += 1) {
|
for (unsigned idx = 0; idx < len; idx += 1) {
|
||||||
rbuf[len-idx-1] = (val & 1)? '1' : '0';
|
rbuf[len - idx - 1] = (tmp & 1) ? '1' : '0';
|
||||||
val /= 2;
|
tmp /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
rbuf[len] = 0;
|
rbuf[len] = '\0';
|
||||||
if (len == 0) {
|
|
||||||
rbuf[0] = '0';
|
|
||||||
rbuf[1] = 0;
|
|
||||||
}
|
|
||||||
vp->value.str = rbuf;
|
vp->value.str = rbuf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -143,25 +143,22 @@ static void vthr_real_get_value(vpiHandle ref, s_vpi_value*vp)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case vpiBinStrVal: {
|
case vpiBinStrVal: {
|
||||||
uint64_t vali = vlg_round_to_u64(val);
|
const uint64_t vali = vlg_round_to_u64(val);
|
||||||
unsigned len = 0;
|
unsigned len = 0;
|
||||||
|
|
||||||
while (vali > 0) {
|
uint64_t tmp = vali;
|
||||||
|
do {
|
||||||
len += 1;
|
len += 1;
|
||||||
vali /= 2;
|
tmp /= 2;
|
||||||
}
|
} while (tmp > 0);
|
||||||
|
|
||||||
vali = vlg_round_to_u64(val);
|
tmp = vali;
|
||||||
for (unsigned idx = 0; idx < len; idx += 1) {
|
for (unsigned idx = 0; idx < len; idx += 1) {
|
||||||
rbuf[len-idx-1] = (vali & 1)? '1' : '0';
|
rbuf[len - idx - 1] = (tmp & 1) ? '1' : '0';
|
||||||
vali /= 2;
|
tmp /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
rbuf[len] = 0;
|
rbuf[len] = '\0';
|
||||||
if (len == 0) {
|
|
||||||
rbuf[0] = '0';
|
|
||||||
rbuf[1] = 0;
|
|
||||||
}
|
|
||||||
vp->value.str = rbuf;
|
vp->value.str = rbuf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue