;
; jdsammmx.asm - upsampling (MMX)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
;
; Based on
; x86 SIMD extension for IJG JPEG library
; Copyright (C) 1999-2006, MIYASAKA Masaru.
; For conditions of distribution and use, see copyright notice in jsimdext.inc
;
; This file should be assembled with NASM (Netwide Assembler),
; can *not* be assembled with Microsoft's MASM or any compatible
; assembler (including Borland's Turbo Assembler).
; NASM is available from http://nasm.sourceforge.net/ or
; http://sourceforge.net/project/showfiles.php?group_id=6208
;
; [TAB8]

%include "jsimdext.inc"

; --------------------------------------------------------------------------
        SECTION SEG_CONST

        alignz  16
        global  EXTN(jconst_fancy_upsample_mmx)

EXTN(jconst_fancy_upsample_mmx):

PW_ONE          times 4 dw  1
PW_TWO          times 4 dw  2
PW_THREE        times 4 dw  3
PW_SEVEN        times 4 dw  7
PW_EIGHT        times 4 dw  8

        alignz  16

; --------------------------------------------------------------------------
        SECTION SEG_TEXT
        BITS    32
;
; Fancy processing for the common case of 2:1 horizontal and 1:1 vertical.
;
; The upsampling algorithm is linear interpolation between pixel centers,
; also known as a "triangle filter".  This is a good compromise between
; speed and visual quality.  The centers of the output pixels are 1/4 and 3/4
; of the way between input pixel centers.
;
; GLOBAL(void)
; jsimd_h2v1_fancy_upsample_mmx (int max_v_samp_factor,
;                                JDIMENSION downsampled_width,
;                                JSAMPARRAY input_data,
;                                JSAMPARRAY * output_data_ptr);
;

%define max_v_samp(b)           (b)+8           ; int max_v_samp_factor
%define downsamp_width(b)       (b)+12          ; JDIMENSION downsampled_width
%define input_data(b)           (b)+16          ; JSAMPARRAY input_data
%define output_data_ptr(b)      (b)+20          ; JSAMPARRAY * output_data_ptr

        align   16
        global  EXTN(jsimd_h2v1_fancy_upsample_mmx)

EXTN(jsimd_h2v1_fancy_upsample_mmx):
        push    ebp
        mov     ebp,esp
        pushpic ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        get_GOT ebx             ; get GOT address

        mov     eax, JDIMENSION [downsamp_width(ebp)]  ; colctr
        test    eax,eax
        jz      near .return

        mov     ecx, INT [max_v_samp(ebp)]      ; rowctr
        test    ecx,ecx
        jz      near .return

        mov     esi, JSAMPARRAY [input_data(ebp)]       ; input_data
        mov     edi, POINTER [output_data_ptr(ebp)]
        mov     edi, JSAMPARRAY [edi]                   ; output_data
        alignx  16,7
.rowloop:
        push    eax                     ; colctr
        push    edi
        push    esi

        mov     esi, JSAMPROW [esi]     ; inptr
        mov     edi, JSAMPROW [edi]     ; outptr

        test    eax, SIZEOF_MMWORD-1
        jz      short .skip
        mov     dl, JSAMPLE [esi+(eax-1)*SIZEOF_JSAMPLE]
        mov     JSAMPLE [esi+eax*SIZEOF_JSAMPLE], dl    ; insert a dummy sample
.skip:
        pxor    mm0,mm0                 ; mm0=(all 0's)
        pcmpeqb mm7,mm7
        psrlq   mm7,(SIZEOF_MMWORD-1)*BYTE_BIT
        pand    mm7, MMWORD [esi+0*SIZEOF_MMWORD]

        add     eax, byte SIZEOF_MMWORD-1
        and     eax, byte -SIZEOF_MMWORD
        cmp     eax, byte SIZEOF_MMWORD
        ja      short .columnloop
        alignx  16,7

.columnloop_last:
        pcmpeqb mm6,mm6
        psllq   mm6,(SIZEOF_MMWORD-1)*BYTE_BIT
        pand    mm6, MMWORD [esi+0*SIZEOF_MMWORD]
        jmp     short .upsample
        alignx  16,7

.columnloop:
        movq    mm6, MMWORD [esi+1*SIZEOF_MMWORD]
        psllq   mm6,(SIZEOF_MMWORD-1)*BYTE_BIT

.upsample:
        movq    mm1, MMWORD [esi+0*SIZEOF_MMWORD]
        movq    mm2,mm1
        movq    mm3,mm1                 ; mm1=( 0 1 2 3 4 5 6 7)
        psllq   mm2,BYTE_BIT            ; mm2=( - 0 1 2 3 4 5 6)
        psrlq   mm3,BYTE_BIT            ; mm3=( 1 2 3 4 5 6 7 -)

        por     mm2,mm7                 ; mm2=(-1 0 1 2 3 4 5 6)
        por     mm3,mm6                 ; mm3=( 1 2 3 4 5 6 7 8)

        movq    mm7,mm1
        psrlq   mm7,(SIZEOF_MMWORD-1)*BYTE_BIT  ; mm7=( 7 - - - - - - -)

        movq      mm4,mm1
        punpcklbw mm1,mm0               ; mm1=( 0 1 2 3)
        punpckhbw mm4,mm0               ; mm4=( 4 5 6 7)
        movq      mm5,mm2
        punpcklbw mm2,mm0               ; mm2=(-1 0 1 2)
        punpckhbw mm5,mm0               ; mm5=( 3 4 5 6)
        movq      mm6,mm3
        punpcklbw mm3,mm0               ; mm3=( 1 2 3 4)
        punpckhbw mm6,mm0               ; mm6=( 5 6 7 8)

        pmullw  mm1,[GOTOFF(ebx,PW_THREE)]
        pmullw  mm4,[GOTOFF(ebx,PW_THREE)]
        paddw   mm2,[GOTOFF(ebx,PW_ONE)]
        paddw   mm5,[GOTOFF(ebx,PW_ONE)]
        paddw   mm3,[GOTOFF(ebx,PW_TWO)]
        paddw   mm6,[GOTOFF(ebx,PW_TWO)]

        paddw   mm2,mm1
        paddw   mm5,mm4
        psrlw   mm2,2                   ; mm2=OutLE=( 0  2  4  6)
        psrlw   mm5,2                   ; mm5=OutHE=( 8 10 12 14)
        paddw   mm3,mm1
        paddw   mm6,mm4
        psrlw   mm3,2                   ; mm3=OutLO=( 1  3  5  7)
        psrlw   mm6,2                   ; mm6=OutHO=( 9 11 13 15)

        psllw   mm3,BYTE_BIT
        psllw   mm6,BYTE_BIT
        por     mm2,mm3                 ; mm2=OutL=( 0  1  2  3  4  5  6  7)
        por     mm5,mm6                 ; mm5=OutH=( 8  9 10 11 12 13 14 15)

        movq    MMWORD [edi+0*SIZEOF_MMWORD], mm2
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mm5

        sub     eax, byte SIZEOF_MMWORD
        add     esi, byte 1*SIZEOF_MMWORD       ; inptr
        add     edi, byte 2*SIZEOF_MMWORD       ; outptr
        cmp     eax, byte SIZEOF_MMWORD
        ja      near .columnloop
        test    eax,eax
        jnz     near .columnloop_last

        pop     esi
        pop     edi
        pop     eax

        add     esi, byte SIZEOF_JSAMPROW       ; input_data
        add     edi, byte SIZEOF_JSAMPROW       ; output_data
        dec     ecx                             ; rowctr
        jg      near .rowloop

        emms            ; empty MMX state

.return:
        pop     edi
        pop     esi
;       pop     edx             ; need not be preserved
;       pop     ecx             ; need not be preserved
        poppic  ebx
        pop     ebp
        ret

; --------------------------------------------------------------------------
;
; Fancy processing for the common case of 2:1 horizontal and 2:1 vertical.
; Again a triangle filter; see comments for h2v1 case, above.
;
; GLOBAL(void)
; jsimd_h2v2_fancy_upsample_mmx (int max_v_samp_factor,
;                                JDIMENSION downsampled_width,
;                                JSAMPARRAY input_data,
;                                JSAMPARRAY * output_data_ptr);
;

%define max_v_samp(b)           (b)+8           ; int max_v_samp_factor
%define downsamp_width(b)       (b)+12          ; JDIMENSION downsampled_width
%define input_data(b)           (b)+16          ; JSAMPARRAY input_data
%define output_data_ptr(b)      (b)+20          ; JSAMPARRAY * output_data_ptr

%define original_ebp    ebp+0
%define wk(i)           ebp-(WK_NUM-(i))*SIZEOF_MMWORD  ; mmword wk[WK_NUM]
%define WK_NUM          4
%define gotptr          wk(0)-SIZEOF_POINTER    ; void * gotptr

        align   16
        global  EXTN(jsimd_h2v2_fancy_upsample_mmx)

EXTN(jsimd_h2v2_fancy_upsample_mmx):
        push    ebp
        mov     eax,esp                         ; eax = original ebp
        sub     esp, byte 4
        and     esp, byte (-SIZEOF_MMWORD)      ; align to 64 bits
        mov     [esp],eax
        mov     ebp,esp                         ; ebp = aligned ebp
        lea     esp, [wk(0)]
        pushpic eax             ; make a room for GOT address
        push    ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        get_GOT ebx                     ; get GOT address
        movpic  POINTER [gotptr], ebx   ; save GOT address

        mov     edx,eax                         ; edx = original ebp
        mov     eax, JDIMENSION [downsamp_width(edx)]  ; colctr
        test    eax,eax
        jz      near .return

        mov     ecx, INT [max_v_samp(edx)]      ; rowctr
        test    ecx,ecx
        jz      near .return

        mov     esi, JSAMPARRAY [input_data(edx)]       ; input_data
        mov     edi, POINTER [output_data_ptr(edx)]
        mov     edi, JSAMPARRAY [edi]                   ; output_data
        alignx  16,7
.rowloop:
        push    eax                                     ; colctr
        push    ecx
        push    edi
        push    esi

        mov     ecx, JSAMPROW [esi-1*SIZEOF_JSAMPROW]   ; inptr1(above)
        mov     ebx, JSAMPROW [esi+0*SIZEOF_JSAMPROW]   ; inptr0
        mov     esi, JSAMPROW [esi+1*SIZEOF_JSAMPROW]   ; inptr1(below)
        mov     edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]   ; outptr0
        mov     edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW]   ; outptr1

        test    eax, SIZEOF_MMWORD-1
        jz      short .skip
        push    edx
        mov     dl, JSAMPLE [ecx+(eax-1)*SIZEOF_JSAMPLE]
        mov     JSAMPLE [ecx+eax*SIZEOF_JSAMPLE], dl
        mov     dl, JSAMPLE [ebx+(eax-1)*SIZEOF_JSAMPLE]
        mov     JSAMPLE [ebx+eax*SIZEOF_JSAMPLE], dl
        mov     dl, JSAMPLE [esi+(eax-1)*SIZEOF_JSAMPLE]
        mov     JSAMPLE [esi+eax*SIZEOF_JSAMPLE], dl    ; insert a dummy sample
        pop     edx
.skip:
        ; -- process the first column block

        movq    mm0, MMWORD [ebx+0*SIZEOF_MMWORD]       ; mm0=row[ 0][0]
        movq    mm1, MMWORD [ecx+0*SIZEOF_MMWORD]       ; mm1=row[-1][0]
        movq    mm2, MMWORD [esi+0*SIZEOF_MMWORD]       ; mm2=row[+1][0]

        pushpic ebx
        movpic  ebx, POINTER [gotptr]   ; load GOT address

        pxor      mm3,mm3               ; mm3=(all 0's)
        movq      mm4,mm0
        punpcklbw mm0,mm3               ; mm0=row[ 0][0]( 0 1 2 3)
        punpckhbw mm4,mm3               ; mm4=row[ 0][0]( 4 5 6 7)
        movq      mm5,mm1
        punpcklbw mm1,mm3               ; mm1=row[-1][0]( 0 1 2 3)
        punpckhbw mm5,mm3               ; mm5=row[-1][0]( 4 5 6 7)
        movq      mm6,mm2
        punpcklbw mm2,mm3               ; mm2=row[+1][0]( 0 1 2 3)
        punpckhbw mm6,mm3               ; mm6=row[+1][0]( 4 5 6 7)

        pmullw  mm0,[GOTOFF(ebx,PW_THREE)]
        pmullw  mm4,[GOTOFF(ebx,PW_THREE)]

        pcmpeqb mm7,mm7
        psrlq   mm7,(SIZEOF_MMWORD-2)*BYTE_BIT

        paddw   mm1,mm0                 ; mm1=Int0L=( 0 1 2 3)
        paddw   mm5,mm4                 ; mm5=Int0H=( 4 5 6 7)
        paddw   mm2,mm0                 ; mm2=Int1L=( 0 1 2 3)
        paddw   mm6,mm4                 ; mm6=Int1H=( 4 5 6 7)

        movq    MMWORD [edx+0*SIZEOF_MMWORD], mm1       ; temporarily save
        movq    MMWORD [edx+1*SIZEOF_MMWORD], mm5       ; the intermediate data
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mm2
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mm6

        pand    mm1,mm7                 ; mm1=( 0 - - -)
        pand    mm2,mm7                 ; mm2=( 0 - - -)

        movq    MMWORD [wk(0)], mm1
        movq    MMWORD [wk(1)], mm2

        poppic  ebx

        add     eax, byte SIZEOF_MMWORD-1
        and     eax, byte -SIZEOF_MMWORD
        cmp     eax, byte SIZEOF_MMWORD
        ja      short .columnloop
        alignx  16,7

.columnloop_last:
        ; -- process the last column block

        pushpic ebx
        movpic  ebx, POINTER [gotptr]   ; load GOT address

        pcmpeqb mm1,mm1
        psllq   mm1,(SIZEOF_MMWORD-2)*BYTE_BIT
        movq    mm2,mm1

        pand    mm1, MMWORD [edx+1*SIZEOF_MMWORD]       ; mm1=( - - - 7)
        pand    mm2, MMWORD [edi+1*SIZEOF_MMWORD]       ; mm2=( - - - 7)

        movq    MMWORD [wk(2)], mm1
        movq    MMWORD [wk(3)], mm2

        jmp     short .upsample
        alignx  16,7

.columnloop:
        ; -- process the next column block

        movq    mm0, MMWORD [ebx+1*SIZEOF_MMWORD]       ; mm0=row[ 0][1]
        movq    mm1, MMWORD [ecx+1*SIZEOF_MMWORD]       ; mm1=row[-1][1]
        movq    mm2, MMWORD [esi+1*SIZEOF_MMWORD]       ; mm2=row[+1][1]

        pushpic ebx
        movpic  ebx, POINTER [gotptr]   ; load GOT address

        pxor      mm3,mm3               ; mm3=(all 0's)
        movq      mm4,mm0
        punpcklbw mm0,mm3               ; mm0=row[ 0][1]( 0 1 2 3)
        punpckhbw mm4,mm3               ; mm4=row[ 0][1]( 4 5 6 7)
        movq      mm5,mm1
        punpcklbw mm1,mm3               ; mm1=row[-1][1]( 0 1 2 3)
        punpckhbw mm5,mm3               ; mm5=row[-1][1]( 4 5 6 7)
        movq      mm6,mm2
        punpcklbw mm2,mm3               ; mm2=row[+1][1]( 0 1 2 3)
        punpckhbw mm6,mm3               ; mm6=row[+1][1]( 4 5 6 7)

        pmullw  mm0,[GOTOFF(ebx,PW_THREE)]
        pmullw  mm4,[GOTOFF(ebx,PW_THREE)]

        paddw   mm1,mm0                 ; mm1=Int0L=( 0 1 2 3)
        paddw   mm5,mm4                 ; mm5=Int0H=( 4 5 6 7)
        paddw   mm2,mm0                 ; mm2=Int1L=( 0 1 2 3)
        paddw   mm6,mm4                 ; mm6=Int1H=( 4 5 6 7)

        movq    MMWORD [edx+2*SIZEOF_MMWORD], mm1       ; temporarily save
        movq    MMWORD [edx+3*SIZEOF_MMWORD], mm5       ; the intermediate data
        movq    MMWORD [edi+2*SIZEOF_MMWORD], mm2
        movq    MMWORD [edi+3*SIZEOF_MMWORD], mm6

        psllq   mm1,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm1=( - - - 0)
        psllq   mm2,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm2=( - - - 0)

        movq    MMWORD [wk(2)], mm1
        movq    MMWORD [wk(3)], mm2

.upsample:
        ; -- process the upper row

        movq    mm7, MMWORD [edx+0*SIZEOF_MMWORD]       ; mm7=Int0L=( 0 1 2 3)
        movq    mm3, MMWORD [edx+1*SIZEOF_MMWORD]       ; mm3=Int0H=( 4 5 6 7)

        movq    mm0,mm7
        movq    mm4,mm3
        psrlq   mm0,2*BYTE_BIT                  ; mm0=( 1 2 3 -)
        psllq   mm4,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm4=( - - - 4)
        movq    mm5,mm7
        movq    mm6,mm3
        psrlq   mm5,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm5=( 3 - - -)
        psllq   mm6,2*BYTE_BIT                  ; mm6=( - 4 5 6)

        por     mm0,mm4                         ; mm0=( 1 2 3 4)
        por     mm5,mm6                         ; mm5=( 3 4 5 6)

        movq    mm1,mm7
        movq    mm2,mm3
        psllq   mm1,2*BYTE_BIT                  ; mm1=( - 0 1 2)
        psrlq   mm2,2*BYTE_BIT                  ; mm2=( 5 6 7 -)
        movq    mm4,mm3
        psrlq   mm4,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm4=( 7 - - -)

        por     mm1, MMWORD [wk(0)]             ; mm1=(-1 0 1 2)
        por     mm2, MMWORD [wk(2)]             ; mm2=( 5 6 7 8)

        movq    MMWORD [wk(0)], mm4

        pmullw  mm7,[GOTOFF(ebx,PW_THREE)]
        pmullw  mm3,[GOTOFF(ebx,PW_THREE)]
        paddw   mm1,[GOTOFF(ebx,PW_EIGHT)]
        paddw   mm5,[GOTOFF(ebx,PW_EIGHT)]
        paddw   mm0,[GOTOFF(ebx,PW_SEVEN)]
        paddw   mm2,[GOTOFF(ebx,PW_SEVEN)]

        paddw   mm1,mm7
        paddw   mm5,mm3
        psrlw   mm1,4                   ; mm1=Out0LE=( 0  2  4  6)
        psrlw   mm5,4                   ; mm5=Out0HE=( 8 10 12 14)
        paddw   mm0,mm7
        paddw   mm2,mm3
        psrlw   mm0,4                   ; mm0=Out0LO=( 1  3  5  7)
        psrlw   mm2,4                   ; mm2=Out0HO=( 9 11 13 15)

        psllw   mm0,BYTE_BIT
        psllw   mm2,BYTE_BIT
        por     mm1,mm0                 ; mm1=Out0L=( 0  1  2  3  4  5  6  7)
        por     mm5,mm2                 ; mm5=Out0H=( 8  9 10 11 12 13 14 15)

        movq    MMWORD [edx+0*SIZEOF_MMWORD], mm1
        movq    MMWORD [edx+1*SIZEOF_MMWORD], mm5

        ; -- process the lower row

        movq    mm6, MMWORD [edi+0*SIZEOF_MMWORD]       ; mm6=Int1L=( 0 1 2 3)
        movq    mm4, MMWORD [edi+1*SIZEOF_MMWORD]       ; mm4=Int1H=( 4 5 6 7)

        movq    mm7,mm6
        movq    mm3,mm4
        psrlq   mm7,2*BYTE_BIT                  ; mm7=( 1 2 3 -)
        psllq   mm3,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm3=( - - - 4)
        movq    mm0,mm6
        movq    mm2,mm4
        psrlq   mm0,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm0=( 3 - - -)
        psllq   mm2,2*BYTE_BIT                  ; mm2=( - 4 5 6)

        por     mm7,mm3                         ; mm7=( 1 2 3 4)
        por     mm0,mm2                         ; mm0=( 3 4 5 6)

        movq    mm1,mm6
        movq    mm5,mm4
        psllq   mm1,2*BYTE_BIT                  ; mm1=( - 0 1 2)
        psrlq   mm5,2*BYTE_BIT                  ; mm5=( 5 6 7 -)
        movq    mm3,mm4
        psrlq   mm3,(SIZEOF_MMWORD-2)*BYTE_BIT  ; mm3=( 7 - - -)

        por     mm1, MMWORD [wk(1)]             ; mm1=(-1 0 1 2)
        por     mm5, MMWORD [wk(3)]             ; mm5=( 5 6 7 8)

        movq    MMWORD [wk(1)], mm3

        pmullw  mm6,[GOTOFF(ebx,PW_THREE)]
        pmullw  mm4,[GOTOFF(ebx,PW_THREE)]
        paddw   mm1,[GOTOFF(ebx,PW_EIGHT)]
        paddw   mm0,[GOTOFF(ebx,PW_EIGHT)]
        paddw   mm7,[GOTOFF(ebx,PW_SEVEN)]
        paddw   mm5,[GOTOFF(ebx,PW_SEVEN)]

        paddw   mm1,mm6
        paddw   mm0,mm4
        psrlw   mm1,4                   ; mm1=Out1LE=( 0  2  4  6)
        psrlw   mm0,4                   ; mm0=Out1HE=( 8 10 12 14)
        paddw   mm7,mm6
        paddw   mm5,mm4
        psrlw   mm7,4                   ; mm7=Out1LO=( 1  3  5  7)
        psrlw   mm5,4                   ; mm5=Out1HO=( 9 11 13 15)

        psllw   mm7,BYTE_BIT
        psllw   mm5,BYTE_BIT
        por     mm1,mm7                 ; mm1=Out1L=( 0  1  2  3  4  5  6  7)
        por     mm0,mm5                 ; mm0=Out1H=( 8  9 10 11 12 13 14 15)

        movq    MMWORD [edi+0*SIZEOF_MMWORD], mm1
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mm0

        poppic  ebx

        sub     eax, byte SIZEOF_MMWORD
        add     ecx, byte 1*SIZEOF_MMWORD       ; inptr1(above)
        add     ebx, byte 1*SIZEOF_MMWORD       ; inptr0
        add     esi, byte 1*SIZEOF_MMWORD       ; inptr1(below)
        add     edx, byte 2*SIZEOF_MMWORD       ; outptr0
        add     edi, byte 2*SIZEOF_MMWORD       ; outptr1
        cmp     eax, byte SIZEOF_MMWORD
        ja      near .columnloop
        test    eax,eax
        jnz     near .columnloop_last

        pop     esi
        pop     edi
        pop     ecx
        pop     eax

        add     esi, byte 1*SIZEOF_JSAMPROW     ; input_data
        add     edi, byte 2*SIZEOF_JSAMPROW     ; output_data
        sub     ecx, byte 2                     ; rowctr
        jg      near .rowloop

        emms            ; empty MMX state

.return:
        pop     edi
        pop     esi
;       pop     edx             ; need not be preserved
;       pop     ecx             ; need not be preserved
        pop     ebx
        mov     esp,ebp         ; esp <- aligned ebp
        pop     esp             ; esp <- original ebp
        pop     ebp
        ret

; --------------------------------------------------------------------------
;
; Fast processing for the common case of 2:1 horizontal and 1:1 vertical.
; It's still a box filter.
;
; GLOBAL(void)
; jsimd_h2v1_upsample_mmx (int max_v_samp_factor,
;                          JDIMENSION output_width,
;                          JSAMPARRAY input_data,
;                          JSAMPARRAY * output_data_ptr);
;

%define max_v_samp(b)           (b)+8           ; int max_v_samp_factor
%define output_width(b)         (b)+12          ; JDIMENSION output_width
%define input_data(b)           (b)+16          ; JSAMPARRAY input_data
%define output_data_ptr(b)      (b)+20          ; JSAMPARRAY * output_data_ptr

        align   16
        global  EXTN(jsimd_h2v1_upsample_mmx)

EXTN(jsimd_h2v1_upsample_mmx):
        push    ebp
        mov     ebp,esp
;       push    ebx             ; unused
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        mov     edx, JDIMENSION [output_width(ebp)]
        add     edx, byte (2*SIZEOF_MMWORD)-1
        and     edx, byte -(2*SIZEOF_MMWORD)
        jz      short .return

        mov     ecx, INT [max_v_samp(ebp)]      ; rowctr
        test    ecx,ecx
        jz      short .return

        mov     esi, JSAMPARRAY [input_data(ebp)]       ; input_data
        mov     edi, POINTER [output_data_ptr(ebp)]
        mov     edi, JSAMPARRAY [edi]                   ; output_data
        alignx  16,7
.rowloop:
        push    edi
        push    esi

        mov     esi, JSAMPROW [esi]             ; inptr
        mov     edi, JSAMPROW [edi]             ; outptr
        mov     eax,edx                         ; colctr
        alignx  16,7
.columnloop:

        movq    mm0, MMWORD [esi+0*SIZEOF_MMWORD]

        movq      mm1,mm0
        punpcklbw mm0,mm0
        punpckhbw mm1,mm1

        movq    MMWORD [edi+0*SIZEOF_MMWORD], mm0
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mm1

        sub     eax, byte 2*SIZEOF_MMWORD
        jz      short .nextrow

        movq    mm2, MMWORD [esi+1*SIZEOF_MMWORD]

        movq      mm3,mm2
        punpcklbw mm2,mm2
        punpckhbw mm3,mm3

        movq    MMWORD [edi+2*SIZEOF_MMWORD], mm2
        movq    MMWORD [edi+3*SIZEOF_MMWORD], mm3

        sub     eax, byte 2*SIZEOF_MMWORD
        jz      short .nextrow

        add     esi, byte 2*SIZEOF_MMWORD       ; inptr
        add     edi, byte 4*SIZEOF_MMWORD       ; outptr
        jmp     short .columnloop
        alignx  16,7

.nextrow:
        pop     esi
        pop     edi

        add     esi, byte SIZEOF_JSAMPROW       ; input_data
        add     edi, byte SIZEOF_JSAMPROW       ; output_data
        dec     ecx                             ; rowctr
        jg      short .rowloop

        emms            ; empty MMX state

.return:
        pop     edi
        pop     esi
;       pop     edx             ; need not be preserved
;       pop     ecx             ; need not be preserved
;       pop     ebx             ; unused
        pop     ebp
        ret

; --------------------------------------------------------------------------
;
; Fast processing for the common case of 2:1 horizontal and 2:1 vertical.
; It's still a box filter.
;
; GLOBAL(void)
; jsimd_h2v2_upsample_mmx (int max_v_samp_factor,
;                          JDIMENSION output_width,
;                          JSAMPARRAY input_data,
;                          JSAMPARRAY * output_data_ptr);
;

%define max_v_samp(b)           (b)+8           ; int max_v_samp_factor
%define output_width(b)         (b)+12          ; JDIMENSION output_width
%define input_data(b)           (b)+16          ; JSAMPARRAY input_data
%define output_data_ptr(b)      (b)+20          ; JSAMPARRAY * output_data_ptr

        align   16
        global  EXTN(jsimd_h2v2_upsample_mmx)

EXTN(jsimd_h2v2_upsample_mmx):
        push    ebp
        mov     ebp,esp
        push    ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        mov     edx, JDIMENSION [output_width(ebp)]
        add     edx, byte (2*SIZEOF_MMWORD)-1
        and     edx, byte -(2*SIZEOF_MMWORD)
        jz      near .return

        mov     ecx, INT [max_v_samp(ebp)]      ; rowctr
        test    ecx,ecx
        jz      short .return

        mov     esi, JSAMPARRAY [input_data(ebp)]       ; input_data
        mov     edi, POINTER [output_data_ptr(ebp)]
        mov     edi, JSAMPARRAY [edi]                   ; output_data
        alignx  16,7
.rowloop:
        push    edi
        push    esi

        mov     esi, JSAMPROW [esi]                     ; inptr
        mov     ebx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]   ; outptr0
        mov     edi, JSAMPROW [edi+1*SIZEOF_JSAMPROW]   ; outptr1
        mov     eax,edx                                 ; colctr
        alignx  16,7
.columnloop:

        movq    mm0, MMWORD [esi+0*SIZEOF_MMWORD]

        movq      mm1,mm0
        punpcklbw mm0,mm0
        punpckhbw mm1,mm1

        movq    MMWORD [ebx+0*SIZEOF_MMWORD], mm0
        movq    MMWORD [ebx+1*SIZEOF_MMWORD], mm1
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mm0
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mm1

        sub     eax, byte 2*SIZEOF_MMWORD
        jz      short .nextrow

        movq    mm2, MMWORD [esi+1*SIZEOF_MMWORD]

        movq      mm3,mm2
        punpcklbw mm2,mm2
        punpckhbw mm3,mm3

        movq    MMWORD [ebx+2*SIZEOF_MMWORD], mm2
        movq    MMWORD [ebx+3*SIZEOF_MMWORD], mm3
        movq    MMWORD [edi+2*SIZEOF_MMWORD], mm2
        movq    MMWORD [edi+3*SIZEOF_MMWORD], mm3

        sub     eax, byte 2*SIZEOF_MMWORD
        jz      short .nextrow

        add     esi, byte 2*SIZEOF_MMWORD       ; inptr
        add     ebx, byte 4*SIZEOF_MMWORD       ; outptr0
        add     edi, byte 4*SIZEOF_MMWORD       ; outptr1
        jmp     short .columnloop
        alignx  16,7

.nextrow:
        pop     esi
        pop     edi

        add     esi, byte 1*SIZEOF_JSAMPROW     ; input_data
        add     edi, byte 2*SIZEOF_JSAMPROW     ; output_data
        sub     ecx, byte 2                     ; rowctr
        jg      short .rowloop

        emms            ; empty MMX state

.return:
        pop     edi
        pop     esi
;       pop     edx             ; need not be preserved
;       pop     ecx             ; need not be preserved
        pop     ebx
        pop     ebp
        ret

; For some reason, the OS X linker does not honor the request to align the
; segment unless we do this.
        align   16
