mirror of
https://github.com/exoticorn/upkr.git
synced 2026-01-20 19:46:42 +01:00
z80_unpacker: optimisation: -1B and -1T in decode_bit = 173B
This commit is contained in:
Binary file not shown.
@@ -259,16 +259,16 @@ decode_bit:
|
|||||||
; so 7*128 > 250 and thus edge case `ADD hl=(7*128+0),de=(-250)` => CF=1
|
; so 7*128 > 250 and thus edge case `ADD hl=(7*128+0),de=(-250)` => CF=1
|
||||||
.bit_is_0_2:
|
.bit_is_0_2:
|
||||||
; *** adjust probs[context_index]
|
; *** adjust probs[context_index]
|
||||||
ld e,a ; preserve prob
|
|
||||||
rra ; + (bit<<4) ; part of -prob_offset, needs another -16
|
rra ; + (bit<<4) ; part of -prob_offset, needs another -16
|
||||||
and $FC ; clear/keep correct bits to get desired (prob>>4) + extras, CF=0
|
and $FC ; clear/keep correct bits to get desired (prob>>4) + extras, CF=0
|
||||||
rra
|
rra
|
||||||
rra
|
rra
|
||||||
rra ; A = (bit<<4) + (prob>>4), CF=(prob & 8)
|
rra ; A = (bit<<4) + (prob>>4), CF=(prob & 8)
|
||||||
adc a,-16 ; A = (bit<<4) - 16 + ((prob + 8)>>4) ; -prob_offset = (bit<<4) - 16
|
adc a,-16 ; A = (bit<<4) - 16 + ((prob + 8)>>4) ; -prob_offset = (bit<<4) - 16
|
||||||
sub e ; A = (bit<<4) - 16 + ((prob + 8)>>4) - prob ; = ((prob + 8)>>4) - prob_offset - prob
|
ld e,a
|
||||||
neg ; A = prob_offset + prob - ((prob + 8)>>4)
|
|
||||||
pop bc
|
pop bc
|
||||||
|
ld a,(bc) ; A = prob (cheaper + shorter to re-read again from memory)
|
||||||
|
sub e ; A = 16 - (bit<<4) + prob - ((prob + 8)>>4) ; = prob_offset + prob - ((prob + 8)>>4)
|
||||||
ld (bc),a ; probs[context_index] = prob_offset + prob - ((prob + 8) >> 4);
|
ld (bc),a ; probs[context_index] = prob_offset + prob - ((prob + 8) >> 4);
|
||||||
add a,d ; restore CF = bit (D = bit ? $FF : $00 && A > 0)
|
add a,d ; restore CF = bit (D = bit ? $FF : $00 && A > 0)
|
||||||
pop de
|
pop de
|
||||||
|
|||||||
Reference in New Issue
Block a user