support up to 128Kib vectors
This commit is contained in:
parent
4ed6dee171
commit
0aff9e1401
@ -33,8 +33,9 @@ const properties = {
|
||||
triee: 'ptr', // trigger event emitter
|
||||
lifee: 'ptr', // life cycle event emmiter
|
||||
info: 'ptr',
|
||||
value: 'i64', // value of the signal on change event
|
||||
mask: 'i64', // mask (x, z) of the signal on change event
|
||||
value: 'ptr', // value of the signal on change event
|
||||
mask: 'ptr', // mask (x, z) of the signal on change event
|
||||
digitCount: 'i32',
|
||||
tmpStr: 'ptr',
|
||||
stackPointer: 'i32',
|
||||
id: 'ptr',
|
||||
|
26
test/any.js
26
test/any.js
File diff suppressed because one or more lines are too long
5
vcd.c
5
vcd.c
@ -124,11 +124,16 @@ METHOD(init) {
|
||||
|
||||
static char triggerString [4096] = " ";
|
||||
static char tmpStr [4096] = " ";
|
||||
static uint64_t valueBuf [4096] = {};
|
||||
static uint64_t maskBuf [4096] = {};
|
||||
|
||||
state->trigger = triggerString;
|
||||
state->reason = "NO REASON";
|
||||
state->napi_env = env;
|
||||
state->tmpStr = tmpStr;
|
||||
state->value = valueBuf;
|
||||
state->mask = maskBuf;
|
||||
state->digitCount = 0;
|
||||
|
||||
napi_value status;
|
||||
ASSERT(status, napi_create_string_latin1(env, "declaration", NAPI_AUTO_LENGTH, &status))
|
||||
|
45
vcd_spans.c
45
vcd_spans.c
@ -118,27 +118,31 @@ int idSpan(vcd_parser_t* state, const unsigned char* p, const unsigned char* end
|
||||
napi_env env = state->napi_env;
|
||||
if (stringEq((state->trigger), p, endp)) {
|
||||
const uint8_t command = state->command;
|
||||
uint64_t value = state->value;
|
||||
uint64_t mask = state->mask;
|
||||
uint64_t* value = state->value;
|
||||
uint64_t* mask = state->mask;
|
||||
if (command == 14) {
|
||||
value = 0;
|
||||
mask = 0;
|
||||
value[0] = 0;
|
||||
mask[0] = 0;
|
||||
} else
|
||||
if (command == 15) {
|
||||
value = 1;
|
||||
mask = 0;
|
||||
value[0] = 1;
|
||||
mask[0] = 0;
|
||||
}
|
||||
state->value = 0;
|
||||
state->mask = 0;
|
||||
const int valueWords = (state->digitCount >> 6) + 1;
|
||||
napi_value undefined, eventName, aTime, aCommand, aValue, aMask, return_val;
|
||||
ASSERT(undefined, napi_get_undefined(env, &undefined))
|
||||
ASSERT(eventName, napi_create_string_latin1(env, (char*)p, (endp - p - 1), &eventName))
|
||||
ASSERT(aTime, napi_create_int64(env, state->time, &aTime))
|
||||
ASSERT(aCommand, napi_create_int32(env, command, &aCommand))
|
||||
ASSERT(aValue, napi_create_bigint_uint64(env, value, &aValue))
|
||||
ASSERT(aMask, napi_create_bigint_uint64(env, mask, &aMask))
|
||||
ASSERT(aValue, napi_create_bigint_words(env, 0, valueWords, value, &aValue))
|
||||
ASSERT(aMask, napi_create_bigint_words(env, 0, valueWords, mask, &aMask))
|
||||
napi_value* argv[] = {&eventName, &aTime, &aCommand, &aValue, &aMask};
|
||||
ASSERT(state->triee, napi_call_function(env, undefined, state->triee, 5, *argv, &return_val))
|
||||
for (int i = 0; i < valueWords; i++) {
|
||||
value[i] = 0;
|
||||
mask[i] = 0;
|
||||
}
|
||||
state->digitCount = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -149,8 +153,25 @@ int onDigit(
|
||||
const unsigned char* endp,
|
||||
int digit
|
||||
) {
|
||||
state->value = (state->value << 1) + (digit & 1);
|
||||
state->mask = (state->mask << 1) + ((digit >> 1) & 1);
|
||||
unsigned int valueCin = (digit & 1);
|
||||
unsigned int maskCin = ((digit >> 1) & 1);
|
||||
unsigned int valueCout;
|
||||
unsigned int maskCout;
|
||||
uint64_t* value = state->value;
|
||||
uint64_t* mask = state->mask;
|
||||
const int valueWordsMinus = (state->digitCount >> 6);
|
||||
for (int i = 0; i <= valueWordsMinus; i++) {
|
||||
|
||||
valueCout = value[i] >> 63;
|
||||
value[i] = (value[i] << 1) + valueCin;
|
||||
valueCin = valueCout;
|
||||
|
||||
maskCout = mask[i] >> 63;
|
||||
mask[i] = (mask[i] << 1) + maskCin;
|
||||
maskCin = maskCout;
|
||||
|
||||
}
|
||||
state->digitCount += 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user