From aa3fad4d80ecadbfd7a9b282cf052ca92b8d5064 Mon Sep 17 00:00:00 2001 From: "Peter Helcmanovsky (Ped)" Date: Wed, 14 Sep 2022 23:48:59 +0200 Subject: [PATCH] z80_unpacker: optimisations: -3B and ~-24T in decode_bit = 177B --- z80_unpacker/unpack.asm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/z80_unpacker/unpack.asm b/z80_unpacker/unpack.asm index 7a26eb3..a779c23 100644 --- a/z80_unpacker/unpack.asm +++ b/z80_unpacker/unpack.asm @@ -210,7 +210,6 @@ decode_bit: push bc ld c,l ; C = (upkr_state & 255); (preserving the value) push af - push af jr nc,.bit_is_0 neg ; A = -prob == (256-prob), CF=1 preserved .bit_is_0: @@ -226,16 +225,14 @@ decode_bit: djnz .mulLoop ; until HL = state_scale * (upkr_state>>8), also BC becomes (upkr_state & 255) add hl,bc ; HL = state_scale * (upkr_state >> 8) + (upkr_state & 255) pop af + ld d,-16 ; D = -prob_offset (-16 0xF0 when bit = 0) jr nc,.bit_is_0_2 + ld d,b ; D = -prob_offset (0 when bit = 1) (also does fix following ADD) dec h add hl,de ; HL += -prob (HL += (256 - prob) - 256) .bit_is_0_2: ; HL = state_offset + state_scale * (upkr_state >> 8) + (upkr_state & 255) ; new upkr_state ; *** adjust probs[context_index] - pop af ; restore prob and bit - ld e,a - jr c,.bit_is_1 - ld d,-16 ; 0xF0 -.bit_is_1: ; D:E = -prob_offset:prob, A = prob + ld e,a ; D:E = -prob_offset:prob, A = prob and $F8 rra rra