mirror of
https://github.com/verilator/verilator.git
synced 2025-02-08 14:41:48 +00:00
git_get_value_array: fix index accessing order.
Adhering more to the standard verilog endianess index ordering. Signed-off-by: Diego Roux <diegoroux04@protonmail.com>
This commit is contained in:
parent
5aa3b7d000
commit
164dd8ec96
@ -2929,23 +2929,44 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT8) {
|
if (varp->vltype() == VLVT_UINT8) {
|
||||||
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
integers[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
integers[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
integers[i] = ptr[index++];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
integers[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
integers[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
integers[i] = ptr[index++];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT32) {
|
} else if (varp->vltype() == VLVT_UINT32) {
|
||||||
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
integers[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
integers[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
integers[i] = ptr[index++];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2970,18 +2991,34 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT8) {
|
if (varp->vltype() == VLVT_UINT8) {
|
||||||
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
shortints[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
shortints[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
shortints[i] = ptr[index++];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
shortints[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
shortints[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
shortints[i] = ptr[index++];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
} else if (arrayvalue_p->format == vpiLongIntVal) {
|
} else if (arrayvalue_p->format == vpiLongIntVal) {
|
||||||
PLI_INT64 *longints;
|
PLI_INT64 *longints;
|
||||||
|
|
||||||
@ -3002,25 +3039,48 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT8) {
|
if (varp->vltype() == VLVT_UINT8) {
|
||||||
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
longints[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
longints[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
longints[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
longints[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
longints[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
longints[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT64) {
|
} else if (varp->vltype() == VLVT_UINT64) {
|
||||||
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
longints[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
longints[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
longints[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
} else if (arrayvalue_p->format == vpiVectorVal) {
|
} else if (arrayvalue_p->format == vpiVectorVal) {
|
||||||
p_vpi_vecval vectors;
|
p_vpi_vecval vectors;
|
||||||
|
|
||||||
@ -3058,55 +3118,106 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT8) {
|
if (varp->vltype() == VLVT_UINT8) {
|
||||||
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
vectors[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
vectors[i].bval = 0x00;
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
vectors[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
vectors[i].bval = 0x00;
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT32) {
|
} else if (varp->vltype() == VLVT_UINT32) {
|
||||||
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
vectors[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
vectors[i].bval = 0x00;
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
vectors[i].aval = ptr[index];
|
||||||
|
vectors[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT64) {
|
} else if (varp->vltype() == VLVT_UINT64) {
|
||||||
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
vectors[1].aval = static_cast<IData>(ptr[index] >> 32ULL);
|
for (int i = 0; i < num; i++) {
|
||||||
vectors[1].bval = 0x00;
|
vectors[1].aval = static_cast<IData>(ptr[index] >> 32ULL);
|
||||||
vectors[0].aval = static_cast<IData>(ptr[index++]);
|
vectors[1].bval = 0x00;
|
||||||
vectors[0].bval = 0x00;
|
vectors[0].aval = static_cast<IData>(ptr[index]);
|
||||||
|
vectors[0].bval = 0x00;
|
||||||
|
|
||||||
vectors += 2;
|
vectors += 2;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
vectors[1].aval = static_cast<IData>(ptr[index] >> 32ULL);
|
||||||
|
vectors[1].bval = 0x00;
|
||||||
|
vectors[0].aval = static_cast<IData>(ptr[index]);
|
||||||
|
vectors[0].bval = 0x00;
|
||||||
|
|
||||||
|
vectors += 2;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_WDATA) {
|
} else if (varp->vltype() == VLVT_WDATA) {
|
||||||
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
||||||
|
|
||||||
const int words = VL_WORDS_I(varp->packed().elements());
|
const int words = VL_WORDS_I(varp->packed().elements());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
for (int j = 0; j < words; j++) {
|
for (int i = 0; i < num; i++) {
|
||||||
vectors[i * words + j].aval = ptr[index * words + j];
|
for (int j = 0; j < words; j++) {
|
||||||
vectors[i * words + j].bval = 0x00;
|
vectors[i * words + j].aval = ptr[index * words + j];
|
||||||
}
|
vectors[i * words + j].bval = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
index = ++index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
for (int j = 0; j < words; j++) {
|
||||||
|
vectors[i * words + j].aval = ptr[index * words + j];
|
||||||
|
vectors[i * words + j].bval = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3153,11 +3264,20 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
uint8_t bval;
|
uint8_t bval;
|
||||||
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
rawvals[i].bval = 0x00;
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
@ -3167,11 +3287,20 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
uint16_t bval;
|
uint16_t bval;
|
||||||
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
rawvals[i].bval = 0x00;
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT32) {
|
} else if (varp->vltype() == VLVT_UINT32) {
|
||||||
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
||||||
@ -3181,11 +3310,20 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
uint32_t bval;
|
uint32_t bval;
|
||||||
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
rawvals[i].bval = 0x00;
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT64) {
|
} else if (varp->vltype() == VLVT_UINT64) {
|
||||||
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
||||||
@ -3195,11 +3333,20 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
uint64_t bval;
|
uint64_t bval;
|
||||||
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
} *rawvals = reinterpret_cast<s_rawvals*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i].aval = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
rawvals[i].bval = 0x00;
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
index = index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
rawvals[i].aval = ptr[index];
|
||||||
|
rawvals[i].bval = 0x00;
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_WDATA) {
|
} else if (varp->vltype() == VLVT_WDATA) {
|
||||||
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
||||||
@ -3207,18 +3354,34 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
|
|
||||||
const int words = VL_WORDS_I(varp->packed().elements());
|
const int words = VL_WORDS_I(varp->packed().elements());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
int j = 0;
|
for (int i = 0; i < num; i++) {
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
for (; j < words; j++) {
|
for (; j < words; j++) {
|
||||||
rawvals[i * words * 2 + j] = ptr[index * words + j];
|
rawvals[i * words * 2 + j] = ptr[index * words + j];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; j < (words * 2); j++) {
|
||||||
|
rawvals[i * words * 2 + j] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
index = ++index % size;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
for (; j < (words * 2); j++) {
|
for (; j < words; j++) {
|
||||||
rawvals[i * words * 2 + j] = 0x00;
|
rawvals[i * words * 2 + j] = ptr[index * words + j];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; j < (words * 2); j++) {
|
||||||
|
rawvals[i * words * 2 + j] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
}
|
}
|
||||||
|
|
||||||
index = ++index % size;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3260,33 +3423,61 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT8) {
|
if (varp->vltype() == VLVT_UINT8) {
|
||||||
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
CData *ptr = reinterpret_cast<CData*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
value_ptr[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
value_ptr[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
value_ptr[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT16) {
|
} else if (varp->vltype() == VLVT_UINT16) {
|
||||||
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
SData *ptr = reinterpret_cast<SData*>(vop->varDatap());
|
||||||
SData *rawvals = reinterpret_cast<SData*>(value_ptr);
|
SData *rawvals = reinterpret_cast<SData*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
value_ptr[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
value_ptr[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT32) {
|
} else if (varp->vltype() == VLVT_UINT32) {
|
||||||
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
IData *ptr = reinterpret_cast<IData*>(vop->varDatap());
|
||||||
IData *rawvals = reinterpret_cast<IData*>(value_ptr);
|
IData *rawvals = reinterpret_cast<IData*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
value_ptr[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
value_ptr[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_UINT64) {
|
} else if (varp->vltype() == VLVT_UINT64) {
|
||||||
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
QData *ptr = reinterpret_cast<QData*>(vop->varDatap());
|
||||||
QData *rawvals = reinterpret_cast<QData*>(value_ptr);
|
QData *rawvals = reinterpret_cast<QData*>(value_ptr);
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
rawvals[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
value_ptr[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
value_ptr[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (varp->vltype() == VLVT_WDATA) {
|
} else if (varp->vltype() == VLVT_WDATA) {
|
||||||
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
EData *ptr = reinterpret_cast<EData*>(vop->varDatap());
|
||||||
@ -3294,12 +3485,22 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
|
|
||||||
const int words = VL_WORDS_I(varp->packed().elements());
|
const int words = VL_WORDS_I(varp->packed().elements());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
for (int j = 0; j < words; j++) {
|
for (int i = 0; i < num; i++) {
|
||||||
rawvals[i * words + j] = ptr[index * words + j];
|
for (int j = 0; j < words; j++) {
|
||||||
}
|
rawvals[i * words + j] = ptr[index * words + j];
|
||||||
|
}
|
||||||
|
|
||||||
index = ++index % size;
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
for (int j = 0; j < words; j++) {
|
||||||
|
rawvals[i * words + j] = ptr[index * words + j];
|
||||||
|
}
|
||||||
|
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3323,9 +3524,16 @@ void vl_get_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
if (varp->vltype() == VLVT_UINT64) {
|
if (varp->vltype() == VLVT_UINT64) {
|
||||||
double *ptr = reinterpret_cast<double*>(vop->varDatap());
|
double *ptr = reinterpret_cast<double*>(vop->varDatap());
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
if (vop->rangep()->left() < vop->rangep()->right()) {
|
||||||
reals[i] = ptr[index++];
|
for (int i = 0; i < num; i++) {
|
||||||
index = index % size;
|
reals[i] = ptr[index];
|
||||||
|
index = ++index % size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
reals[i] = ptr[index];
|
||||||
|
index = (--index + size) % size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user