1
0
Fork 0
forked from len0rd/rockbox

Shave off another 4 instructions (8 bytes).

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18970 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2008-11-01 23:41:23 +00:00
parent a85e2cd991
commit 66f496cb88

View file

@ -98,10 +98,9 @@ getoff_n2e:
getnextb(cnt)
jnextb0 off_n2e
mov cnt, tmp
mov #-4, tmp ! T=1 on entry, so this does
addc cnt, tmp ! tmp = cnt - 3, T = (cnt >= 3)
mov #0, len ! cnt and len share a reg!
add #-3, tmp
cmp/pz tmp
bf offprev_n2e ! cnt was 2
mov.b @src+, off ! low 7+1 bits
shll8 tmp
@ -112,19 +111,18 @@ getoff_n2e:
bt eof_n2e
shar off
bt lenlast_n2e
bra lenmore_n2e
mov #1, len
bf lenmore_n2e ! always taken if the preceding bt isn't
offprev_n2e:
jnextb1 lenlast_n2e
mov #1, len
lenmore_n2e:
mov #1, len
jnextb1 lenlast_n2e
len_n2e:
getnextb(len)
jnextb0 len_n2e
bra gotlen_n2e
add #6-2, len
mov #6-2, tmp
get1_n2e: ! in: T bit set
mov.b @src+, bits ! SH1 sign-extends on load
@ -135,19 +133,17 @@ get1_n2e: ! in: T bit set
lenlast_n2e:
getnextb(len) ! 0,1,2,3
add #2, len
mov #2, tmp
gotlen_n2e:
cmp/gt off, wrnk
movt tmp ! too far away, so minimum match length is 3
add tmp, len
cmp/gt off, wrnk ! too far away, so minimum match length is 3
addc tmp, len
copy_n2e:
mov.b @(off,dst), tmp
add #-1, len
mov.b @(off,dst), tmp
tst len, len
mov.b tmp, @dst
add #1, dst
tst len, len
bf copy_n2e
bra top_n2e
nop
bt top_n2e ! always taken if the preceding bf isn't
.size ucl_nrv2e_decompress_8, .-ucl_nrv2e_decompress_8