[vorbis-dev] vorbis on playstation 2

David Etherton etherton at rockstarsandiego.com
Thu Feb 6 18:33:33 PST 2003



> Beware that the low accuracy uses unbalanced multiplications, like
24x8->32.
> This was done to get the best audio quality after many listening tests.
If
> you change that bit ratio in either direction you're likely to increase
> the presence of artifacts a lot.

Hmm.  Bummer.  I wish there was a four-wide integer 32-by-anything multiply
on PS2 but there isn't.

How about this optimiziation I tried for MULT31:

ogg_int32_t MULT31(ogg_int32_t x, ogg_int32_t y) {
  return ((ogg_int32_t) (((ogg_int64_t)x * y) >> 31));
}

ogg_int32_t MULT31x(ogg_int32_t x, ogg_int32_t y) {
  return ((ogg_int32_t) (((ogg_int64_t)x * y) >> 32) << 1);
}

doing a shift right by 32 and a shift left by one allows the compiler to
avoid double-wide shift insns:

0000000000000020 <MULT31>:
  20:   00850018        mult    $a0,$a1
  24:   00001812        mflo    $v1
  28:   00001010        mfhi    $v0
  2c:   0003183c        dsll32  $v1,$v1,0x0
  30:   0002103c        dsll32  $v0,$v0,0x0
  34:   0003183e        dsrl32  $v1,$v1,0x0
  38:   00431025        or      $v0,$v0,$v1
  3c:   00021078        dsll    $v0,$v0,0x1
  40:   0002103f        dsra32  $v0,$v0,0x0
  44:   03e00008        jr      $ra
  48:   00000000        nop

0000000000000010 <MULT31x>:
  10:   00850018        mult    $a0,$a1
  14:   00001010        mfhi    $v0
  18:   03e00008        jr      $ra
  1c:   00021040        sll     $v0,$v0,0x1

Would the single bit make a big difference?

-Dave

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Vorbis-dev mailing list