All pastes #112300 Raw Edit

Someone

public text v1 · immutable
#112300 ·published 2006-08-02 20:37 UTC
rendered paste body
;
; This file makes heavy use of macros to define a bunch of almost-identical
; functions -- see huffyuv_a.h.
;

        .586
        .mmx
        .model  flat

; alignment has to be 'page' so that I can use 'align 32' below

_TEXT64 segment page public use32 'CODE'

        EXTERN  C encode1_shift:BYTE
        EXTERN  C encode1_add_shifted:DWORD
        EXTERN  C encode2_shift:BYTE
        EXTERN  C encode2_add_shifted:DWORD
        EXTERN  C encode3_shift:BYTE
        EXTERN  C encode3_add_shifted:DWORD

        EXTERN  C decode1:DWORD
        EXTERN  C decode1_shift:BYTE
        EXTERN  C decode2:DWORD
        EXTERN  C decode2_shift:BYTE
        EXTERN  C decode3:DWORD
        EXTERN  C decode3_shift:BYTE

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HUFF_CODEC_PROC_START   MACRO

        push    ebp
        push    edi
        push    esi
        push    ebx

        mov     esi,[esp+4+16]
        mov     edi,[esp+8+16]
        mov     ebp,[esp+12+16]
        mov     eax,[esi]

        ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HUFF_COMPRESS   MACRO   channel,index,back1,back2,increment
back = back1 or back2
IF back
        mov     cl,[esi+&index+&increment]
ELSE
        movzx   ebx,byte ptr [esi+&index+&increment]
ENDIF
;       xor     ebx,ebx
IF &back1
        sub     cl,[esi+&index+&increment-&back1]
ENDIF
IF &back2
        sub     cl,[esi+&index+&increment-&back2]
IF &back1
        add     cl,[esi+&index+&increment-&back1-&back2]
ENDIF
ENDIF
IF &increment
        add     esi,INCREMENT
ENDIF
;       mov     bl,cl
IF back
        movzx   ebx,cl
ENDIF
        mov     cl,&channel&_shift[ebx]
        mov     eax,&channel&_add_shifted[ebx*4]
        add     ch,cl
        jl      nostore_&index&

        sub     cl,ch
        sub     ch,32
        shld    edx,eax,cl