vec4 versions of %cassign/vec4/off and %force/vec4/off send flags[4].

This commit is contained in:
Stephen Williams 2014-01-18 17:08:36 -08:00
parent f94a655121
commit d2c2d6d8dc
2 changed files with 14 additions and 0 deletions

View File

@ -284,6 +284,10 @@ variable. This is similar to %set, but it uses the cassign port
signal responds differently. See "VARIABLE STATEMENTS" in the
README.txt file.
The %cassign/vec4/off instruction will check the flags[4] flag, and if
it is 1, it will suppress the assignment. This is so that failed index
calculations can report the failure by setting the flag.
* %cassign/wr <var-label>
Perform a continuous assign of a constant real value to the target
@ -582,6 +586,10 @@ part comes from the width of the popped value, and the <off> is an
index register that contains the cannonical offset where the value
sets written.
The %foce/vec4/off instruction will test the value if flags[4], and if
it is 1, will suppress the actual assignment. This is intended to help
with detection of invalid index expressions.
* %force/wr <var-label>
Force a constant real value to the target variable. See %force/v

View File

@ -1719,6 +1719,9 @@ bool of_CASSIGN_VEC4_OFF(vthread_t thr, vvp_code_t cp)
vvp_vector4_t value = thr->pop_vec4();
unsigned wid = value.size();
if (thr->flags[4] == BIT4_1)
return true;
vvp_signal_value*sig = dynamic_cast<vvp_signal_value*> (net->fil);
assert(sig);
@ -3059,6 +3062,9 @@ bool of_FORCE_VEC4_OFF(vthread_t thr, vvp_code_t cp)
assert(net->fil);
if (thr->flags[4] == BIT4_1)
return true;
// This is the width of the target vector.
unsigned use_size = net->fil->filter_size();