Minor performance tweak of vector_to_array function.

This commit is contained in:
Stephen Williams 2007-12-02 19:00:12 -08:00
parent e5381feb85
commit 68a9526fec
2 changed files with 13 additions and 2 deletions

View File

@ -170,16 +170,17 @@ void vthread_put_real(struct vthread_s*thr, unsigned addr, double val)
static unsigned long* vector_to_array(struct vthread_s*thr,
unsigned addr, unsigned wid)
{
unsigned awid = (wid + CPU_WORD_BITS - 1) / (CPU_WORD_BITS);
if (addr == 0) {
unsigned awid = (wid + CPU_WORD_BITS - 1) / (CPU_WORD_BITS);
unsigned long*val = new unsigned long[awid];
for (unsigned idx = 0 ; idx < awid ; idx += 1)
val[idx] = 0;
return val;
}
if (addr == 1) {
unsigned awid = (wid + CPU_WORD_BITS - 1) / (CPU_WORD_BITS);
unsigned long*val = new unsigned long[awid];
for (unsigned idx = 0 ; idx < awid ; idx += 1)
val[idx] = -1UL;

View File

@ -355,6 +355,9 @@ unsigned long* vvp_vector4_t::subarray(unsigned adr, unsigned wid) const
unsigned long tmp = bits_ptr_[adr/BITS_PER_WORD];
tmp >>= 2UL * (adr%BITS_PER_WORD);
unsigned long mask1 = 1;
const unsigned long mask1_last = 1UL << (BIT2_PER_WORD-1);
unsigned long*val_ptr = val;
for (unsigned idx = 0 ; idx < wid ; idx += 1) {
/* Starting a new word? */
if (adr%BITS_PER_WORD == 0)
@ -363,10 +366,17 @@ unsigned long* vvp_vector4_t::subarray(unsigned adr, unsigned wid) const
if (tmp&2)
goto x_out;
if (tmp&1)
val[idx/BIT2_PER_WORD] |= 1UL << (idx % BIT2_PER_WORD);
*val_ptr |= mask1;
adr += 1;
tmp >>= 2UL;
if (mask1 == mask1_last) {
val_ptr += 1;
mask1 = 1;
} else {
mask1 <<= 1;
}
}
}