FS#10071 - Trying out Tremolo optimisations for tremor on ARM

Attached to Project: Rockbox
Opened by Dave Hooper (stripwax) - Sunday, 29 March 2009, 20:36 GMT
Task Type Patches
Category Codecs
Status Unconfirmed
Assigned To No-one
Operating System PortalPlayer-based
Severity Low
Priority Normal
Reported Version Version 3.1
Due in Version Undecided
Due Date Undecided
Percent Complete 0%
Votes 0
Private No


This first patch is a merge of Tremolo's bitwise.c and bitwiseARM.s code into rockbox libtremor. As a naive version of the merge, I have taken out the previous rockbox optimisations to huffman decode (originally implemented in  FS#6848 ). Versus svn, decoding speed is worse with this patch. However something that incorporates both  FS#6848  and the Tremolo bitwise optimisations for little-endian ARM may well turn out better. This patch is seriously not committable, the arch-specific stuff is not done cleanly in the headers or the makefile
This task depends upon

Comment by Dave Hooper (stripwax) - Sunday, 29 March 2009, 20:40 GMT
including missing bitwiseARM.s from previous file. should go into apps/codecs/libtremor
Quick note on the patch - bitwise.c and bitwiseARM.s are unchanged from the Tremolo versions (so contains all the original testing code etc by the Tremolo author) - not a very clean patch in any case.
Comment by Dave Hooper (stripwax) - Sunday, 29 March 2009, 21:18 GMT
According to test_codec - vorbis_500 worse by about 9MHz over current svn, vorbis_096 worse by about 2MHz over current svn
Comment by Dave Hooper (stripwax) - Sunday, 29 March 2009, 21:24 GMT
Slightly saner / smaller version of patch
Comment by Dave Hooper (stripwax) - Sunday, 29 March 2009, 22:30 GMT
Updated patch to preserve the vorbis_book_decodevv_add_2ch_even and decode_packed_block functions from  FS#6848  (but significantly does NOT include the optimisation of the packed reads that were implemented in decode_packed_block in  FS#6848  i.e. we always just call back to decode_packed_entry_number ). Still noticeably worse than svn forall but the lowest bitrates (e.g. vorbis_500 worse by ~6MHz; vorbis_096 worse by 1.4MHz)

Also attaching runs of test_codec from current svn build (all codecs actually) and run of test_codec on vorbis with just this patch