z80_unpacker: attempt for faster decode_number (+6B, ~1% faster) => not good

archived in comments for future reference
This commit is contained in:
Peter Helcmanovsky (Ped)
2022-09-19 11:42:56 +02:00
parent 00d084105a
commit c1ffd0e7ed

View File

@@ -15,7 +15,7 @@
;; modifies: all registers except IY, requires 10 bytes of stack space ;; modifies: all registers except IY, requires 10 bytes of stack space
;; ;;
; DEFINE BACKWARDS_UNPACK ; uncomment to build backwards depacker ; DEFINE BACKWARDS_UNPACK ; uncomment to build backwards depacker (write_ptr--, upkr_data_ptr--)
; initial IX points at last byte of compressed data ; initial IX points at last byte of compressed data
; initial DE' points at last byte of unpacked data ; initial DE' points at last byte of unpacked data
@@ -140,6 +140,7 @@ unpack:
push de push de
exx exx
IFNDEF BACKWARDS_UNPACK IFNDEF BACKWARDS_UNPACK
; forward unpack (write_ptr++, upkr_data_ptr++)
ld h,d ; DE = write_ptr ld h,d ; DE = write_ptr
ld l,e ld l,e
.offset+*: ld bc,0 .offset+*: ld bc,0
@@ -147,6 +148,7 @@ unpack:
pop bc ; BC = length pop bc ; BC = length
ldir ldir
ELSE ELSE
; backward unpack (write_ptr--, upkr_data_ptr--)
.offset+*: ld hl,0 .offset+*: ld hl,0
add hl,de ; HL = write_ptr + offset add hl,de ; HL = write_ptr + offset
pop bc ; BC = length pop bc ; BC = length
@@ -311,6 +313,37 @@ decode_number:
jr c,.fix_bit_pos ; until stop bit is reached (all bits did land to correct position) jr c,.fix_bit_pos ; until stop bit is reached (all bits did land to correct position)
ret ; return with CF=0 (important for unpack routine) ret ; return with CF=0 (important for unpack routine)
/*
archived: negligibly faster but +6B longer decode_number variant using HL' and BC' to
do `number|=(1<<bit_pos);` type of logic in single loop.
*/
; decode_number:
; exx
; ld bc,1
; ld l,b
; ld h,b ; HL = 0
; .loop
; exx
; inc c
; call decode_bit
; jr nc,.done
; inc c
; call decode_bit
; exx
; jr nc,.b0
; add hl,bc
; .b0:
; sla c
; rl b
; jr .loop
; .done:
; exx
; add hl,bc
; push hl
; exx
; pop de
; ret
DISPLAY "upkr.unpack total size: ",/D,$-unpack DISPLAY "upkr.unpack total size: ",/D,$-unpack
; reserve space for probs array without emitting any machine code (using only EQU) ; reserve space for probs array without emitting any machine code (using only EQU)