;
; jidctfst.asm - fast integer IDCT (MMX)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
;
; Based on the 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
;
; This file contains a fast, not so accurate integer implementation of
; the inverse DCT (Discrete Cosine Transform). The following code is
; based directly on the IJG's original jidctfst.c; see the jidctfst.c
; for more details.
;
; [TAB8]

%include "jsimdext.inc"
%include "jdct.inc"

; --------------------------------------------------------------------------

%define CONST_BITS      8       ; 14 is also OK.
%define PASS1_BITS      2

%if IFAST_SCALE_BITS != PASS1_BITS
%error "'IFAST_SCALE_BITS' must be equal to 'PASS1_BITS'."
%endif

%if CONST_BITS == 8
F_1_082 equ     277             ; FIX(1.082392200)
F_1_414 equ     362             ; FIX(1.414213562)
F_1_847 equ     473             ; FIX(1.847759065)
F_2_613 equ     669             ; FIX(2.613125930)
F_1_613 equ     (F_2_613 - 256) ; FIX(2.613125930) - FIX(1)
%else
; NASM cannot do compile-time arithmetic on floating-point constants.
%define DESCALE(x,n)  (((x)+(1<<((n)-1)))>>(n))
F_1_082 equ     DESCALE(1162209775,30-CONST_BITS)       ; FIX(1.082392200)
F_1_414 equ     DESCALE(1518500249,30-CONST_BITS)       ; FIX(1.414213562)
F_1_847 equ     DESCALE(1984016188,30-CONST_BITS)       ; FIX(1.847759065)
F_2_613 equ     DESCALE(2805822602,30-CONST_BITS)       ; FIX(2.613125930)
F_1_613 equ     (F_2_613 - (1 << CONST_BITS))   ; FIX(2.613125930) - FIX(1)
%endif

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

; PRE_MULTIPLY_SCALE_BITS <= 2 (to avoid overflow)
; CONST_BITS + CONST_SHIFT + PRE_MULTIPLY_SCALE_BITS == 16 (for pmulhw)

%define PRE_MULTIPLY_SCALE_BITS   2
%define CONST_SHIFT     (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)

        alignz  16
        global  EXTN(jconst_idct_ifast_mmx)

EXTN(jconst_idct_ifast_mmx):

PW_F1414        times 4 dw  F_1_414 << CONST_SHIFT
PW_F1847        times 4 dw  F_1_847 << CONST_SHIFT
PW_MF1613       times 4 dw -F_1_613 << CONST_SHIFT
PW_F1082        times 4 dw  F_1_082 << CONST_SHIFT
PB_CENTERJSAMP  times 8 db  CENTERJSAMPLE

        alignz  16

; --------------------------------------------------------------------------
        SECTION SEG_TEXT
        BITS    32
;
; Perform dequantization and inverse DCT on one block of coefficients.
;
; GLOBAL(void)
; jsimd_idct_ifast_mmx (void *dct_table, JCOEFPTR coef_block,
;                       JSAMPARRAY output_buf, JDIMENSION output_col)
;

%define dct_table(b)    (b)+8           ; jpeg_component_info *compptr
%define coef_block(b)   (b)+12          ; JCOEFPTR coef_block
%define output_buf(b)   (b)+16          ; JSAMPARRAY output_buf
%define output_col(b)   (b)+20          ; JDIMENSION output_col

%define original_ebp    ebp+0
%define wk(i)           ebp-(WK_NUM-(i))*SIZEOF_MMWORD  ; mmword wk[WK_NUM]
%define WK_NUM          2
%define workspace       wk(0)-DCTSIZE2*SIZEOF_JCOEF
                                        ; JCOEF workspace[DCTSIZE2]

        align   16
        global  EXTN(jsimd_idct_ifast_mmx)

EXTN(jsimd_idct_ifast_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, [workspace]
        push    ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        get_GOT ebx             ; get GOT address

        ; ---- Pass 1: process columns from input, store into work array.

;       mov     eax, [original_ebp]
        mov     edx, POINTER [dct_table(eax)]           ; quantptr
        mov     esi, JCOEFPTR [coef_block(eax)]         ; inptr
        lea     edi, [workspace]                        ; JCOEF *wsptr
        mov     ecx, DCTSIZE/4                          ; ctr
        alignx  16,7
.columnloop:
%ifndef NO_ZERO_COLUMN_TEST_IFAST_MMX
        mov     eax, DWORD [DWBLOCK(1,0,esi,SIZEOF_JCOEF)]
        or      eax, DWORD [DWBLOCK(2,0,esi,SIZEOF_JCOEF)]
        jnz     short .columnDCT

        movq    mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movq    mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
        por     mm0, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        por     mm1, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
        por     mm0, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        por     mm1, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
        por     mm0, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
        por     mm1,mm0
        packsswb mm1,mm1
        movd    eax,mm1
        test    eax,eax
        jnz     short .columnDCT

        ; -- AC terms all zero

        movq    mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        pmullw  mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_IFAST_MULT_TYPE)]

        movq      mm2,mm0               ; mm0=in0=(00 01 02 03)
        punpcklwd mm0,mm0               ; mm0=(00 00 01 01)
        punpckhwd mm2,mm2               ; mm2=(02 02 03 03)

        movq      mm1,mm0
        punpckldq mm0,mm0               ; mm0=(00 00 00 00)
        punpckhdq mm1,mm1               ; mm1=(01 01 01 01)
        movq      mm3,mm2
        punpckldq mm2,mm2               ; mm2=(02 02 02 02)
        punpckhdq mm3,mm3               ; mm3=(03 03 03 03)

        movq    MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm0
        movq    MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm0
        movq    MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm1
        movq    MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm1
        movq    MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm2
        movq    MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm2
        movq    MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm3
        movq    MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm3
        jmp     near .nextcolumn
        alignx  16,7
%endif
.columnDCT:

        ; -- Even part

        movq    mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        movq    mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
        pmullw  mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        pmullw  mm1, MMWORD [MMBLOCK(2,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        movq    mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
        movq    mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
        pmullw  mm2, MMWORD [MMBLOCK(4,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        pmullw  mm3, MMWORD [MMBLOCK(6,0,edx,SIZEOF_IFAST_MULT_TYPE)]

        movq    mm4,mm0
        movq    mm5,mm1
        psubw   mm0,mm2                 ; mm0=tmp11
        psubw   mm1,mm3
        paddw   mm4,mm2                 ; mm4=tmp10
        paddw   mm5,mm3                 ; mm5=tmp13

        psllw   mm1,PRE_MULTIPLY_SCALE_BITS
        pmulhw  mm1,[GOTOFF(ebx,PW_F1414)]
        psubw   mm1,mm5                 ; mm1=tmp12

        movq    mm6,mm4
        movq    mm7,mm0
        psubw   mm4,mm5                 ; mm4=tmp3
        psubw   mm0,mm1                 ; mm0=tmp2
        paddw   mm6,mm5                 ; mm6=tmp0
        paddw   mm7,mm1                 ; mm7=tmp1

        movq    MMWORD [wk(1)], mm4     ; wk(1)=tmp3
        movq    MMWORD [wk(0)], mm0     ; wk(0)=tmp2

        ; -- Odd part

        movq    mm2, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movq    mm3, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        pmullw  mm2, MMWORD [MMBLOCK(1,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        pmullw  mm3, MMWORD [MMBLOCK(3,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        movq    mm5, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        movq    mm1, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
        pmullw  mm5, MMWORD [MMBLOCK(5,0,edx,SIZEOF_IFAST_MULT_TYPE)]
        pmullw  mm1, MMWORD [MMBLOCK(7,0,edx,SIZEOF_IFAST_MULT_TYPE)]

        movq    mm4,mm2
        movq    mm0,mm5
        psubw   mm2,mm1                 ; mm2=z12
        psubw   mm5,mm3                 ; mm5=z10
        paddw   mm4,mm1                 ; mm4=z11
        paddw   mm0,mm3                 ; mm0=z13

        movq    mm1,mm5                 ; mm1=z10(unscaled)
        psllw   mm2,PRE_MULTIPLY_SCALE_BITS
        psllw   mm5,PRE_MULTIPLY_SCALE_BITS

        movq    mm3,mm4
        psubw   mm4,mm0
        paddw   mm3,mm0                 ; mm3=tmp7

        psllw   mm4,PRE_MULTIPLY_SCALE_BITS
        pmulhw  mm4,[GOTOFF(ebx,PW_F1414)]      ; mm4=tmp11

        ; To avoid overflow...
        ;
        ; (Original)
        ; tmp12 = -2.613125930 * z10 + z5;
        ;
        ; (This implementation)
        ; tmp12 = (-1.613125930 - 1) * z10 + z5;
        ;       = -1.613125930 * z10 - z10 + z5;

        movq    mm0,mm5
        paddw   mm5,mm2
        pmulhw  mm5,[GOTOFF(ebx,PW_F1847)]      ; mm5=z5
        pmulhw  mm0,[GOTOFF(ebx,PW_MF1613)]
        pmulhw  mm2,[GOTOFF(ebx,PW_F1082)]
        psubw   mm0,mm1
        psubw   mm2,mm5                 ; mm2=tmp10
        paddw   mm0,mm5                 ; mm0=tmp12

        ; -- Final output stage

        psubw   mm0,mm3                 ; mm0=tmp6
        movq    mm1,mm6
        movq    mm5,mm7
        paddw   mm6,mm3                 ; mm6=data0=(00 01 02 03)
        paddw   mm7,mm0                 ; mm7=data1=(10 11 12 13)
        psubw   mm1,mm3                 ; mm1=data7=(70 71 72 73)
        psubw   mm5,mm0                 ; mm5=data6=(60 61 62 63)
        psubw   mm4,mm0                 ; mm4=tmp5

        movq      mm3,mm6               ; transpose coefficients(phase 1)
        punpcklwd mm6,mm7               ; mm6=(00 10 01 11)
        punpckhwd mm3,mm7               ; mm3=(02 12 03 13)
        movq      mm0,mm5               ; transpose coefficients(phase 1)
        punpcklwd mm5,mm1               ; mm5=(60 70 61 71)
        punpckhwd mm0,mm1               ; mm0=(62 72 63 73)

        movq    mm7, MMWORD [wk(0)]     ; mm7=tmp2
        movq    mm1, MMWORD [wk(1)]     ; mm1=tmp3

        movq    MMWORD [wk(0)], mm5     ; wk(0)=(60 70 61 71)
        movq    MMWORD [wk(1)], mm0     ; wk(1)=(62 72 63 73)

        paddw   mm2,mm4                 ; mm2=tmp4
        movq    mm5,mm7
        movq    mm0,mm1
        paddw   mm7,mm4                 ; mm7=data2=(20 21 22 23)
        paddw   mm1,mm2                 ; mm1=data4=(40 41 42 43)
        psubw   mm5,mm4                 ; mm5=data5=(50 51 52 53)
        psubw   mm0,mm2                 ; mm0=data3=(30 31 32 33)

        movq      mm4,mm7               ; transpose coefficients(phase 1)
        punpcklwd mm7,mm0               ; mm7=(20 30 21 31)
        punpckhwd mm4,mm0               ; mm4=(22 32 23 33)
        movq      mm2,mm1               ; transpose coefficients(phase 1)
        punpcklwd mm1,mm5               ; mm1=(40 50 41 51)
        punpckhwd mm2,mm5               ; mm2=(42 52 43 53)

        movq      mm0,mm6               ; transpose coefficients(phase 2)
        punpckldq mm6,mm7               ; mm6=(00 10 20 30)
        punpckhdq mm0,mm7               ; mm0=(01 11 21 31)
        movq      mm5,mm3               ; transpose coefficients(phase 2)
        punpckldq mm3,mm4               ; mm3=(02 12 22 32)
        punpckhdq mm5,mm4               ; mm5=(03 13 23 33)

        movq    mm7, MMWORD [wk(0)]     ; mm7=(60 70 61 71)
        movq    mm4, MMWORD [wk(1)]     ; mm4=(62 72 63 73)

        movq    MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm6
        movq    MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm0
        movq    MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm3
        movq    MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm5

        movq      mm6,mm1               ; transpose coefficients(phase 2)
        punpckldq mm1,mm7               ; mm1=(40 50 60 70)
        punpckhdq mm6,mm7               ; mm6=(41 51 61 71)
        movq      mm0,mm2               ; transpose coefficients(phase 2)
        punpckldq mm2,mm4               ; mm2=(42 52 62 72)
        punpckhdq mm0,mm4               ; mm0=(43 53 63 73)

        movq    MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm1
        movq    MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm6
        movq    MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm2
        movq    MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm0

.nextcolumn:
        add     esi, byte 4*SIZEOF_JCOEF                ; coef_block
        add     edx, byte 4*SIZEOF_IFAST_MULT_TYPE      ; quantptr
        add     edi, byte 4*DCTSIZE*SIZEOF_JCOEF        ; wsptr
        dec     ecx                                     ; ctr
        jnz     near .columnloop

        ; ---- Pass 2: process rows from work array, store into output array.

        mov     eax, [original_ebp]
        lea     esi, [workspace]                        ; JCOEF *wsptr
        mov     edi, JSAMPARRAY [output_buf(eax)]       ; (JSAMPROW *)
        mov     eax, JDIMENSION [output_col(eax)]
        mov     ecx, DCTSIZE/4                          ; ctr
        alignx  16,7
.rowloop:

        ; -- Even part

        movq    mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        movq    mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
        movq    mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
        movq    mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]

        movq    mm4,mm0
        movq    mm5,mm1
        psubw   mm0,mm2                 ; mm0=tmp11
        psubw   mm1,mm3
        paddw   mm4,mm2                 ; mm4=tmp10
        paddw   mm5,mm3                 ; mm5=tmp13

        psllw   mm1,PRE_MULTIPLY_SCALE_BITS
        pmulhw  mm1,[GOTOFF(ebx,PW_F1414)]
        psubw   mm1,mm5                 ; mm1=tmp12

        movq    mm6,mm4
        movq    mm7,mm0
        psubw   mm4,mm5                 ; mm4=tmp3
        psubw   mm0,mm1                 ; mm0=tmp2
        paddw   mm6,mm5                 ; mm6=tmp0
        paddw   mm7,mm1                 ; mm7=tmp1

        movq    MMWORD [wk(1)], mm4     ; wk(1)=tmp3
        movq    MMWORD [wk(0)], mm0     ; wk(0)=tmp2

        ; -- Odd part

        movq    mm2, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movq    mm3, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        movq    mm5, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        movq    mm1, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]

        movq    mm4,mm2
        movq    mm0,mm5
        psubw   mm2,mm1                 ; mm2=z12
        psubw   mm5,mm3                 ; mm5=z10
        paddw   mm4,mm1                 ; mm4=z11
        paddw   mm0,mm3                 ; mm0=z13

        movq    mm1,mm5                 ; mm1=z10(unscaled)
        psllw   mm2,PRE_MULTIPLY_SCALE_BITS
        psllw   mm5,PRE_MULTIPLY_SCALE_BITS

        movq    mm3,mm4
        psubw   mm4,mm0
        paddw   mm3,mm0                 ; mm3=tmp7

        psllw   mm4,PRE_MULTIPLY_SCALE_BITS
        pmulhw  mm4,[GOTOFF(ebx,PW_F1414)]      ; mm4=tmp11

        ; To avoid overflow...
        ;
        ; (Original)
        ; tmp12 = -2.613125930 * z10 + z5;
        ;
        ; (This implementation)
        ; tmp12 = (-1.613125930 - 1) * z10 + z5;
        ;       = -1.613125930 * z10 - z10 + z5;

        movq    mm0,mm5
        paddw   mm5,mm2
        pmulhw  mm5,[GOTOFF(ebx,PW_F1847)]      ; mm5=z5
        pmulhw  mm0,[GOTOFF(ebx,PW_MF1613)]
        pmulhw  mm2,[GOTOFF(ebx,PW_F1082)]
        psubw   mm0,mm1
        psubw   mm2,mm5                 ; mm2=tmp10
        paddw   mm0,mm5                 ; mm0=tmp12

        ; -- Final output stage

        psubw   mm0,mm3                 ; mm0=tmp6
        movq    mm1,mm6
        movq    mm5,mm7
        paddw   mm6,mm3                 ; mm6=data0=(00 10 20 30)
        paddw   mm7,mm0                 ; mm7=data1=(01 11 21 31)
        psraw   mm6,(PASS1_BITS+3)      ; descale
        psraw   mm7,(PASS1_BITS+3)      ; descale
        psubw   mm1,mm3                 ; mm1=data7=(07 17 27 37)
        psubw   mm5,mm0                 ; mm5=data6=(06 16 26 36)
        psraw   mm1,(PASS1_BITS+3)      ; descale
        psraw   mm5,(PASS1_BITS+3)      ; descale
        psubw   mm4,mm0                 ; mm4=tmp5

        packsswb  mm6,mm5               ; mm6=(00 10 20 30 06 16 26 36)
        packsswb  mm7,mm1               ; mm7=(01 11 21 31 07 17 27 37)

        movq    mm3, MMWORD [wk(0)]     ; mm3=tmp2
        movq    mm0, MMWORD [wk(1)]     ; mm0=tmp3

        paddw   mm2,mm4                 ; mm2=tmp4
        movq    mm5,mm3
        movq    mm1,mm0
        paddw   mm3,mm4                 ; mm3=data2=(02 12 22 32)
        paddw   mm0,mm2                 ; mm0=data4=(04 14 24 34)
        psraw   mm3,(PASS1_BITS+3)      ; descale
        psraw   mm0,(PASS1_BITS+3)      ; descale
        psubw   mm5,mm4                 ; mm5=data5=(05 15 25 35)
        psubw   mm1,mm2                 ; mm1=data3=(03 13 23 33)
        psraw   mm5,(PASS1_BITS+3)      ; descale
        psraw   mm1,(PASS1_BITS+3)      ; descale

        movq      mm4,[GOTOFF(ebx,PB_CENTERJSAMP)]      ; mm4=[PB_CENTERJSAMP]

        packsswb  mm3,mm0               ; mm3=(02 12 22 32 04 14 24 34)
        packsswb  mm1,mm5               ; mm1=(03 13 23 33 05 15 25 35)

        paddb     mm6,mm4
        paddb     mm7,mm4
        paddb     mm3,mm4
        paddb     mm1,mm4

        movq      mm2,mm6               ; transpose coefficients(phase 1)
        punpcklbw mm6,mm7               ; mm6=(00 01 10 11 20 21 30 31)
        punpckhbw mm2,mm7               ; mm2=(06 07 16 17 26 27 36 37)
        movq      mm0,mm3               ; transpose coefficients(phase 1)
        punpcklbw mm3,mm1               ; mm3=(02 03 12 13 22 23 32 33)
        punpckhbw mm0,mm1               ; mm0=(04 05 14 15 24 25 34 35)

        movq      mm5,mm6               ; transpose coefficients(phase 2)
        punpcklwd mm6,mm3               ; mm6=(00 01 02 03 10 11 12 13)
        punpckhwd mm5,mm3               ; mm5=(20 21 22 23 30 31 32 33)
        movq      mm4,mm0               ; transpose coefficients(phase 2)
        punpcklwd mm0,mm2               ; mm0=(04 05 06 07 14 15 16 17)
        punpckhwd mm4,mm2               ; mm4=(24 25 26 27 34 35 36 37)

        movq      mm7,mm6               ; transpose coefficients(phase 3)
        punpckldq mm6,mm0               ; mm6=(00 01 02 03 04 05 06 07)
        punpckhdq mm7,mm0               ; mm7=(10 11 12 13 14 15 16 17)
        movq      mm1,mm5               ; transpose coefficients(phase 3)
        punpckldq mm5,mm4               ; mm5=(20 21 22 23 24 25 26 27)
        punpckhdq mm1,mm4               ; mm1=(30 31 32 33 34 35 36 37)

        pushpic ebx                     ; save GOT address

        mov     edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
        mov     ebx, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
        movq    MMWORD [edx+eax*SIZEOF_JSAMPLE], mm6
        movq    MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm7
        mov     edx, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
        mov     ebx, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
        movq    MMWORD [edx+eax*SIZEOF_JSAMPLE], mm5
        movq    MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm1

        poppic  ebx                     ; restore GOT address

        add     esi, byte 4*SIZEOF_JCOEF        ; wsptr
        add     edi, byte 4*SIZEOF_JSAMPROW
        dec     ecx                             ; ctr
        jnz     near .rowloop

        emms            ; empty MMX state

        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

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