Support negative index for %assign/av opcodes.
If the array index is negative these opcodes need to just return.
(cherry picked from commit 9d765820bf)
This commit is contained in:
parent
df177e9e14
commit
f34485d415
|
|
@ -824,10 +824,12 @@ bool of_ASSIGN_AV(vthread_t thr, vvp_code_t cp)
|
|||
{
|
||||
unsigned wid = thr->words[0].w_int;
|
||||
long off = thr->words[1].w_int;
|
||||
unsigned adr = thr->words[3].w_int;
|
||||
long adr = thr->words[3].w_int;
|
||||
unsigned delay = cp->bit_idx[0];
|
||||
unsigned bit = cp->bit_idx[1];
|
||||
|
||||
if (adr < 0) return true;
|
||||
|
||||
long vwidth = get_array_word_size(cp->array);
|
||||
// We fell off the MSB end.
|
||||
if (off >= vwidth) return true;
|
||||
|
|
@ -861,10 +863,12 @@ bool of_ASSIGN_AVD(vthread_t thr, vvp_code_t cp)
|
|||
{
|
||||
unsigned wid = thr->words[0].w_int;
|
||||
long off = thr->words[1].w_int;
|
||||
unsigned adr = thr->words[3].w_int;
|
||||
long adr = thr->words[3].w_int;
|
||||
vvp_time64_t delay = thr->words[cp->bit_idx[0]].w_int;
|
||||
unsigned bit = cp->bit_idx[1];
|
||||
|
||||
if (adr < 0) return true;
|
||||
|
||||
long vwidth = get_array_word_size(cp->array);
|
||||
// We fell off the MSB end.
|
||||
if (off >= vwidth) return true;
|
||||
|
|
@ -892,9 +896,11 @@ bool of_ASSIGN_AVE(vthread_t thr, vvp_code_t cp)
|
|||
{
|
||||
unsigned wid = thr->words[0].w_int;
|
||||
long off = thr->words[1].w_int;
|
||||
unsigned adr = thr->words[3].w_int;
|
||||
long adr = thr->words[3].w_int;
|
||||
unsigned bit = cp->bit_idx[0];
|
||||
|
||||
if (adr < 0) return true;
|
||||
|
||||
long vwidth = get_array_word_size(cp->array);
|
||||
// We fell off the MSB end.
|
||||
if (off >= vwidth) return true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue