Instruction %concat/vec4, %pad/u and %shiftl manipulate stack in place
This commit is contained in:
parent
aadd67cd3b
commit
1612c6d638
|
|
@ -1808,13 +1808,13 @@ bool of_CONCATI_STR(vthread_t thr, vvp_code_t cp)
|
|||
bool of_CONCAT_VEC4(vthread_t thr, vvp_code_t)
|
||||
{
|
||||
vvp_vector4_t lsb = thr->pop_vec4();
|
||||
vvp_vector4_t msb = thr->pop_vec4();
|
||||
vvp_vector4_t&msb = thr->peek_vec4();
|
||||
|
||||
vvp_vector4_t res (msb.size()+lsb.size(), BIT4_X);
|
||||
res.set_vec(0, lsb);
|
||||
res.set_vec(lsb.size(), msb);
|
||||
|
||||
thr->push_vec4(res);
|
||||
msb = res;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -3743,7 +3743,7 @@ bool of_PAD_U(vthread_t thr, vvp_code_t cp)
|
|||
{
|
||||
unsigned wid = cp->number;
|
||||
|
||||
vvp_vector4_t val = thr->pop_vec4();
|
||||
vvp_vector4_t&val = thr->peek_vec4();
|
||||
unsigned old_size = val.size();
|
||||
val.resize(wid);
|
||||
|
||||
|
|
@ -3753,8 +3753,6 @@ bool of_PAD_U(vthread_t thr, vvp_code_t cp)
|
|||
val.set_bit(idx,pad);
|
||||
}
|
||||
|
||||
thr->push_vec4(val);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -4841,13 +4839,15 @@ bool of_SET_DAR_OBJ_STR(vthread_t thr, vvp_code_t cp)
|
|||
|
||||
/*
|
||||
* %shiftl <idx>
|
||||
*
|
||||
* Pop the operand, then push the result.
|
||||
*/
|
||||
bool of_SHIFTL(vthread_t thr, vvp_code_t cp)
|
||||
{
|
||||
int use_index = cp->number;
|
||||
int shift = thr->words[use_index].w_int;
|
||||
|
||||
vvp_vector4_t val = thr->pop_vec4();
|
||||
vvp_vector4_t&val = thr->peek_vec4();
|
||||
int wid = val.size();
|
||||
|
||||
if (thr->flags[4] == BIT4_1) {
|
||||
|
|
@ -4878,7 +4878,6 @@ bool of_SHIFTL(vthread_t thr, vvp_code_t cp)
|
|||
val.set_vec(wid-use_shift, tmp);
|
||||
}
|
||||
|
||||
thr->push_vec4(val);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue