;
; jidctred.asm - reduced-size IDCT (SSE2)
;
; 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 inverse-DCT routines that produce reduced-size
; output: either 4x4 or 2x2 pixels from an 8x8 DCT block.
; The following code is based directly on the IJG's original jidctred.c;
; see the jidctred.c for more details.
;
; [TAB8]

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

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

%define CONST_BITS      13
%define PASS1_BITS      2

%define DESCALE_P1_4    (CONST_BITS-PASS1_BITS+1)
%define DESCALE_P2_4    (CONST_BITS+PASS1_BITS+3+1)
%define DESCALE_P1_2    (CONST_BITS-PASS1_BITS+2)
%define DESCALE_P2_2    (CONST_BITS+PASS1_BITS+3+2)

%if CONST_BITS == 13
F_0_211 equ      1730           ; FIX(0.211164243)
F_0_509 equ      4176           ; FIX(0.509795579)
F_0_601 equ      4926           ; FIX(0.601344887)
F_0_720 equ      5906           ; FIX(0.720959822)
F_0_765 equ      6270           ; FIX(0.765366865)
F_0_850 equ      6967           ; FIX(0.850430095)
F_0_899 equ      7373           ; FIX(0.899976223)
F_1_061 equ      8697           ; FIX(1.061594337)
F_1_272 equ     10426           ; FIX(1.272758580)
F_1_451 equ     11893           ; FIX(1.451774981)
F_1_847 equ     15137           ; FIX(1.847759065)
F_2_172 equ     17799           ; FIX(2.172734803)
F_2_562 equ     20995           ; FIX(2.562915447)
F_3_624 equ     29692           ; FIX(3.624509785)
%else
; NASM cannot do compile-time arithmetic on floating-point constants.
%define DESCALE(x,n)  (((x)+(1<<((n)-1)))>>(n))
F_0_211 equ     DESCALE( 226735879,30-CONST_BITS)       ; FIX(0.211164243)
F_0_509 equ     DESCALE( 547388834,30-CONST_BITS)       ; FIX(0.509795579)
F_0_601 equ     DESCALE( 645689155,30-CONST_BITS)       ; FIX(0.601344887)
F_0_720 equ     DESCALE( 774124714,30-CONST_BITS)       ; FIX(0.720959822)
F_0_765 equ     DESCALE( 821806413,30-CONST_BITS)       ; FIX(0.765366865)
F_0_850 equ     DESCALE( 913142361,30-CONST_BITS)       ; FIX(0.850430095)
F_0_899 equ     DESCALE( 966342111,30-CONST_BITS)       ; FIX(0.899976223)
F_1_061 equ     DESCALE(1139878239,30-CONST_BITS)       ; FIX(1.061594337)
F_1_272 equ     DESCALE(1366614119,30-CONST_BITS)       ; FIX(1.272758580)
F_1_451 equ     DESCALE(1558831516,30-CONST_BITS)       ; FIX(1.451774981)
F_1_847 equ     DESCALE(1984016188,30-CONST_BITS)       ; FIX(1.847759065)
F_2_172 equ     DESCALE(2332956230,30-CONST_BITS)       ; FIX(2.172734803)
F_2_562 equ     DESCALE(2751909506,30-CONST_BITS)       ; FIX(2.562915447)
F_3_624 equ     DESCALE(3891787747,30-CONST_BITS)       ; FIX(3.624509785)
%endif

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

        alignz  16
        global  EXTN(jconst_idct_red_sse2) PRIVATE

EXTN(jconst_idct_red_sse2):

PW_F184_MF076   times 4 dw  F_1_847,-F_0_765
PW_F256_F089    times 4 dw  F_2_562, F_0_899
PW_F106_MF217   times 4 dw  F_1_061,-F_2_172
PW_MF060_MF050  times 4 dw -F_0_601,-F_0_509
PW_F145_MF021   times 4 dw  F_1_451,-F_0_211
PW_F362_MF127   times 4 dw  F_3_624,-F_1_272
PW_F085_MF072   times 4 dw  F_0_850,-F_0_720
PD_DESCALE_P1_4 times 4 dd  1 << (DESCALE_P1_4-1)
PD_DESCALE_P2_4 times 4 dd  1 << (DESCALE_P2_4-1)
PD_DESCALE_P1_2 times 4 dd  1 << (DESCALE_P1_2-1)
PD_DESCALE_P2_2 times 4 dd  1 << (DESCALE_P2_2-1)
PB_CENTERJSAMP  times 16 db CENTERJSAMPLE

        alignz  16

; --------------------------------------------------------------------------
        SECTION SEG_TEXT
        BITS    32
;
; Perform dequantization and inverse DCT on one block of coefficients,
; producing a reduced-size 4x4 output block.
;
; GLOBAL(void)
; jsimd_idct_4x4_sse2 (void *dct_table, JCOEFPTR coef_block,
;                      JSAMPARRAY output_buf, JDIMENSION output_col)
;

%define dct_table(b)    (b)+8           ; void *dct_table
%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_XMMWORD ; xmmword wk[WK_NUM]
%define WK_NUM          2

        align   16
        global  EXTN(jsimd_idct_4x4_sse2) PRIVATE

EXTN(jsimd_idct_4x4_sse2):
        push    ebp
        mov     eax,esp                         ; eax = original ebp
        sub     esp, byte 4
        and     esp, byte (-SIZEOF_XMMWORD)     ; align to 128 bits
        mov     [esp],eax
        mov     ebp,esp                         ; ebp = aligned ebp
        lea     esp, [wk(0)]
        pushpic ebx
;       push    ecx             ; unused
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        get_GOT ebx             ; get GOT address

        ; ---- Pass 1: process columns from input.

;       mov     eax, [original_ebp]
        mov     edx, POINTER [dct_table(eax)]           ; quantptr
        mov     esi, JCOEFPTR [coef_block(eax)]         ; inptr

%ifndef NO_ZERO_COLUMN_TEST_4X4_SSE2
        mov     eax, DWORD [DWBLOCK(1,0,esi,SIZEOF_JCOEF)]
        or      eax, DWORD [DWBLOCK(2,0,esi,SIZEOF_JCOEF)]
        jnz     short .columnDCT

        movdqa  xmm0, XMMWORD [XMMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm1, XMMWORD [XMMBLOCK(2,0,esi,SIZEOF_JCOEF)]
        por     xmm0, XMMWORD [XMMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        por     xmm1, XMMWORD [XMMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        por     xmm0, XMMWORD [XMMBLOCK(6,0,esi,SIZEOF_JCOEF)]
        por     xmm1, XMMWORD [XMMBLOCK(7,0,esi,SIZEOF_JCOEF)]
        por     xmm0,xmm1
        packsswb xmm0,xmm0
        packsswb xmm0,xmm0
        movd    eax,xmm0
        test    eax,eax
        jnz     short .columnDCT

        ; -- AC terms all zero

        movdqa  xmm0, XMMWORD [XMMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

        psllw   xmm0,PASS1_BITS

        movdqa    xmm3,xmm0     ; xmm0=in0=(00 01 02 03 04 05 06 07)
        punpcklwd xmm0,xmm0     ; xmm0=(00 00 01 01 02 02 03 03)
        punpckhwd xmm3,xmm3     ; xmm3=(04 04 05 05 06 06 07 07)

        pshufd  xmm1,xmm0,0x50  ; xmm1=[col0 col1]=(00 00 00 00 01 01 01 01)
        pshufd  xmm0,xmm0,0xFA  ; xmm0=[col2 col3]=(02 02 02 02 03 03 03 03)
        pshufd  xmm6,xmm3,0x50  ; xmm6=[col4 col5]=(04 04 04 04 05 05 05 05)
        pshufd  xmm3,xmm3,0xFA  ; xmm3=[col6 col7]=(06 06 06 06 07 07 07 07)

        jmp     near .column_end
        alignx  16,7
%endif
.columnDCT:

        ; -- Odd part

        movdqa  xmm0, XMMWORD [XMMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm1, XMMWORD [XMMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm1, XMMWORD [XMMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        movdqa  xmm2, XMMWORD [XMMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm3, XMMWORD [XMMBLOCK(7,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm2, XMMWORD [XMMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm3, XMMWORD [XMMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

        movdqa    xmm4,xmm0
        movdqa    xmm5,xmm0
        punpcklwd xmm4,xmm1
        punpckhwd xmm5,xmm1
        movdqa    xmm0,xmm4
        movdqa    xmm1,xmm5
        pmaddwd   xmm4,[GOTOFF(ebx,PW_F256_F089)]       ; xmm4=(tmp2L)
        pmaddwd   xmm5,[GOTOFF(ebx,PW_F256_F089)]       ; xmm5=(tmp2H)
        pmaddwd   xmm0,[GOTOFF(ebx,PW_F106_MF217)]      ; xmm0=(tmp0L)
        pmaddwd   xmm1,[GOTOFF(ebx,PW_F106_MF217)]      ; xmm1=(tmp0H)

        movdqa    xmm6,xmm2
        movdqa    xmm7,xmm2
        punpcklwd xmm6,xmm3
        punpckhwd xmm7,xmm3
        movdqa    xmm2,xmm6
        movdqa    xmm3,xmm7
        pmaddwd   xmm6,[GOTOFF(ebx,PW_MF060_MF050)]     ; xmm6=(tmp2L)
        pmaddwd   xmm7,[GOTOFF(ebx,PW_MF060_MF050)]     ; xmm7=(tmp2H)
        pmaddwd   xmm2,[GOTOFF(ebx,PW_F145_MF021)]      ; xmm2=(tmp0L)
        pmaddwd   xmm3,[GOTOFF(ebx,PW_F145_MF021)]      ; xmm3=(tmp0H)

        paddd   xmm6,xmm4               ; xmm6=tmp2L
        paddd   xmm7,xmm5               ; xmm7=tmp2H
        paddd   xmm2,xmm0               ; xmm2=tmp0L
        paddd   xmm3,xmm1               ; xmm3=tmp0H

        movdqa  XMMWORD [wk(0)], xmm2   ; wk(0)=tmp0L
        movdqa  XMMWORD [wk(1)], xmm3   ; wk(1)=tmp0H

        ; -- Even part

        movdqa  xmm4, XMMWORD [XMMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm5, XMMWORD [XMMBLOCK(2,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm0, XMMWORD [XMMBLOCK(6,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm4, XMMWORD [XMMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm5, XMMWORD [XMMBLOCK(2,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(6,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

        pxor      xmm1,xmm1
        pxor      xmm2,xmm2
        punpcklwd xmm1,xmm4             ; xmm1=tmp0L
        punpckhwd xmm2,xmm4             ; xmm2=tmp0H
        psrad     xmm1,(16-CONST_BITS-1) ; psrad xmm1,16 & pslld xmm1,CONST_BITS+1
        psrad     xmm2,(16-CONST_BITS-1) ; psrad xmm2,16 & pslld xmm2,CONST_BITS+1

        movdqa    xmm3,xmm5             ; xmm5=in2=z2
        punpcklwd xmm5,xmm0             ; xmm0=in6=z3
        punpckhwd xmm3,xmm0
        pmaddwd   xmm5,[GOTOFF(ebx,PW_F184_MF076)]      ; xmm5=tmp2L
        pmaddwd   xmm3,[GOTOFF(ebx,PW_F184_MF076)]      ; xmm3=tmp2H

        movdqa  xmm4,xmm1
        movdqa  xmm0,xmm2
        paddd   xmm1,xmm5               ; xmm1=tmp10L
        paddd   xmm2,xmm3               ; xmm2=tmp10H
        psubd   xmm4,xmm5               ; xmm4=tmp12L
        psubd   xmm0,xmm3               ; xmm0=tmp12H

        ; -- Final output stage

        movdqa  xmm5,xmm1
        movdqa  xmm3,xmm2
        paddd   xmm1,xmm6               ; xmm1=data0L
        paddd   xmm2,xmm7               ; xmm2=data0H
        psubd   xmm5,xmm6               ; xmm5=data3L
        psubd   xmm3,xmm7               ; xmm3=data3H

        movdqa  xmm6,[GOTOFF(ebx,PD_DESCALE_P1_4)]      ; xmm6=[PD_DESCALE_P1_4]

        paddd   xmm1,xmm6
        paddd   xmm2,xmm6
        psrad   xmm1,DESCALE_P1_4
        psrad   xmm2,DESCALE_P1_4
        paddd   xmm5,xmm6
        paddd   xmm3,xmm6
        psrad   xmm5,DESCALE_P1_4
        psrad   xmm3,DESCALE_P1_4

        packssdw  xmm1,xmm2             ; xmm1=data0=(00 01 02 03 04 05 06 07)
        packssdw  xmm5,xmm3             ; xmm5=data3=(30 31 32 33 34 35 36 37)

        movdqa  xmm7, XMMWORD [wk(0)]   ; xmm7=tmp0L
        movdqa  xmm6, XMMWORD [wk(1)]   ; xmm6=tmp0H

        movdqa  xmm2,xmm4
        movdqa  xmm3,xmm0
        paddd   xmm4,xmm7               ; xmm4=data1L
        paddd   xmm0,xmm6               ; xmm0=data1H
        psubd   xmm2,xmm7               ; xmm2=data2L
        psubd   xmm3,xmm6               ; xmm3=data2H

        movdqa  xmm7,[GOTOFF(ebx,PD_DESCALE_P1_4)]      ; xmm7=[PD_DESCALE_P1_4]

        paddd   xmm4,xmm7
        paddd   xmm0,xmm7
        psrad   xmm4,DESCALE_P1_4
        psrad   xmm0,DESCALE_P1_4
        paddd   xmm2,xmm7
        paddd   xmm3,xmm7
        psrad   xmm2,DESCALE_P1_4
        psrad   xmm3,DESCALE_P1_4

        packssdw  xmm4,xmm0             ; xmm4=data1=(10 11 12 13 14 15 16 17)
        packssdw  xmm2,xmm3             ; xmm2=data2=(20 21 22 23 24 25 26 27)

        movdqa    xmm6,xmm1     ; transpose coefficients(phase 1)
        punpcklwd xmm1,xmm4     ; xmm1=(00 10 01 11 02 12 03 13)
        punpckhwd xmm6,xmm4     ; xmm6=(04 14 05 15 06 16 07 17)
        movdqa    xmm7,xmm2     ; transpose coefficients(phase 1)
        punpcklwd xmm2,xmm5     ; xmm2=(20 30 21 31 22 32 23 33)
        punpckhwd xmm7,xmm5     ; xmm7=(24 34 25 35 26 36 27 37)

        movdqa    xmm0,xmm1     ; transpose coefficients(phase 2)
        punpckldq xmm1,xmm2     ; xmm1=[col0 col1]=(00 10 20 30 01 11 21 31)
        punpckhdq xmm0,xmm2     ; xmm0=[col2 col3]=(02 12 22 32 03 13 23 33)
        movdqa    xmm3,xmm6     ; transpose coefficients(phase 2)
        punpckldq xmm6,xmm7     ; xmm6=[col4 col5]=(04 14 24 34 05 15 25 35)
        punpckhdq xmm3,xmm7     ; xmm3=[col6 col7]=(06 16 26 36 07 17 27 37)
.column_end:

        ; -- Prefetch the next coefficient block

        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 0*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 1*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 2*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 3*32]

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

        mov     eax, [original_ebp]
        mov     edi, JSAMPARRAY [output_buf(eax)]       ; (JSAMPROW *)
        mov     eax, JDIMENSION [output_col(eax)]

        ; -- Even part

        pxor      xmm4,xmm4
        punpcklwd xmm4,xmm1             ; xmm4=tmp0
        psrad     xmm4,(16-CONST_BITS-1) ; psrad xmm4,16 & pslld xmm4,CONST_BITS+1

        ; -- Odd part

        punpckhwd xmm1,xmm0
        punpckhwd xmm6,xmm3
        movdqa    xmm5,xmm1
        movdqa    xmm2,xmm6
        pmaddwd   xmm1,[GOTOFF(ebx,PW_F256_F089)]       ; xmm1=(tmp2)
        pmaddwd   xmm6,[GOTOFF(ebx,PW_MF060_MF050)]     ; xmm6=(tmp2)
        pmaddwd   xmm5,[GOTOFF(ebx,PW_F106_MF217)]      ; xmm5=(tmp0)
        pmaddwd   xmm2,[GOTOFF(ebx,PW_F145_MF021)]      ; xmm2=(tmp0)

        paddd     xmm6,xmm1             ; xmm6=tmp2
        paddd     xmm2,xmm5             ; xmm2=tmp0

        ; -- Even part

        punpcklwd xmm0,xmm3
        pmaddwd   xmm0,[GOTOFF(ebx,PW_F184_MF076)]      ; xmm0=tmp2

        movdqa    xmm7,xmm4
        paddd     xmm4,xmm0             ; xmm4=tmp10
        psubd     xmm7,xmm0             ; xmm7=tmp12

        ; -- Final output stage

        movdqa  xmm1,[GOTOFF(ebx,PD_DESCALE_P2_4)]      ; xmm1=[PD_DESCALE_P2_4]

        movdqa  xmm5,xmm4
        movdqa  xmm3,xmm7
        paddd   xmm4,xmm6               ; xmm4=data0=(00 10 20 30)
        paddd   xmm7,xmm2               ; xmm7=data1=(01 11 21 31)
        psubd   xmm5,xmm6               ; xmm5=data3=(03 13 23 33)
        psubd   xmm3,xmm2               ; xmm3=data2=(02 12 22 32)

        paddd   xmm4,xmm1
        paddd   xmm7,xmm1
        psrad   xmm4,DESCALE_P2_4
        psrad   xmm7,DESCALE_P2_4
        paddd   xmm5,xmm1
        paddd   xmm3,xmm1
        psrad   xmm5,DESCALE_P2_4
        psrad   xmm3,DESCALE_P2_4

        packssdw  xmm4,xmm3             ; xmm4=(00 10 20 30 02 12 22 32)
        packssdw  xmm7,xmm5             ; xmm7=(01 11 21 31 03 13 23 33)

        movdqa    xmm0,xmm4             ; transpose coefficients(phase 1)
        punpcklwd xmm4,xmm7             ; xmm4=(00 01 10 11 20 21 30 31)
        punpckhwd xmm0,xmm7             ; xmm0=(02 03 12 13 22 23 32 33)

        movdqa    xmm6,xmm4             ; transpose coefficients(phase 2)
        punpckldq xmm4,xmm0             ; xmm4=(00 01 02 03 10 11 12 13)
        punpckhdq xmm6,xmm0             ; xmm6=(20 21 22 23 30 31 32 33)

        packsswb  xmm4,xmm6             ; xmm4=(00 01 02 03 10 11 12 13 20 ..)
        paddb     xmm4,[GOTOFF(ebx,PB_CENTERJSAMP)]

        pshufd    xmm2,xmm4,0x39        ; xmm2=(10 11 12 13 20 21 22 23 30 ..)
        pshufd    xmm1,xmm4,0x4E        ; xmm1=(20 21 22 23 30 31 32 33 00 ..)
        pshufd    xmm3,xmm4,0x93        ; xmm3=(30 31 32 33 00 01 02 03 10 ..)

        mov     edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
        mov     esi, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
        movd    XMM_DWORD [edx+eax*SIZEOF_JSAMPLE], xmm4
        movd    XMM_DWORD [esi+eax*SIZEOF_JSAMPLE], xmm2
        mov     edx, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
        mov     esi, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
        movd    XMM_DWORD [edx+eax*SIZEOF_JSAMPLE], xmm1
        movd    XMM_DWORD [esi+eax*SIZEOF_JSAMPLE], xmm3

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


; --------------------------------------------------------------------------
;
; Perform dequantization and inverse DCT on one block of coefficients,
; producing a reduced-size 2x2 output block.
;
; GLOBAL(void)
; jsimd_idct_2x2_sse2 (void *dct_table, JCOEFPTR coef_block,
;                      JSAMPARRAY output_buf, JDIMENSION output_col)
;

%define dct_table(b)    (b)+8           ; void *dct_table
%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

        align   16
        global  EXTN(jsimd_idct_2x2_sse2) PRIVATE

EXTN(jsimd_idct_2x2_sse2):
        push    ebp
        mov     ebp,esp
        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.

        mov     edx, POINTER [dct_table(ebp)]           ; quantptr
        mov     esi, JCOEFPTR [coef_block(ebp)]         ; inptr

        ; | input:                  | result:        |
        ; | 00 01 ** 03 ** 05 ** 07 |                |
        ; | 10 11 ** 13 ** 15 ** 17 |                |
        ; | ** ** ** ** ** ** ** ** |                |
        ; | 30 31 ** 33 ** 35 ** 37 | A0 A1 A3 A5 A7 |
        ; | ** ** ** ** ** ** ** ** | B0 B1 B3 B5 B7 |
        ; | 50 51 ** 53 ** 55 ** 57 |                |
        ; | ** ** ** ** ** ** ** ** |                |
        ; | 70 71 ** 73 ** 75 ** 77 |                |

        ; -- Odd part

        movdqa  xmm0, XMMWORD [XMMBLOCK(1,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm1, XMMWORD [XMMBLOCK(3,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm1, XMMWORD [XMMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        movdqa  xmm2, XMMWORD [XMMBLOCK(5,0,esi,SIZEOF_JCOEF)]
        movdqa  xmm3, XMMWORD [XMMBLOCK(7,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm2, XMMWORD [XMMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm3, XMMWORD [XMMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

        ; xmm0=(10 11 ** 13 ** 15 ** 17), xmm1=(30 31 ** 33 ** 35 ** 37)
        ; xmm2=(50 51 ** 53 ** 55 ** 57), xmm3=(70 71 ** 73 ** 75 ** 77)

        pcmpeqd   xmm7,xmm7
        pslld     xmm7,WORD_BIT         ; xmm7={0x0000 0xFFFF 0x0000 0xFFFF ..}

        movdqa    xmm4,xmm0             ; xmm4=(10 11 ** 13 ** 15 ** 17)
        movdqa    xmm5,xmm2             ; xmm5=(50 51 ** 53 ** 55 ** 57)
        punpcklwd xmm4,xmm1             ; xmm4=(10 30 11 31 ** ** 13 33)
        punpcklwd xmm5,xmm3             ; xmm5=(50 70 51 71 ** ** 53 73)
        pmaddwd   xmm4,[GOTOFF(ebx,PW_F362_MF127)]
        pmaddwd   xmm5,[GOTOFF(ebx,PW_F085_MF072)]

        psrld   xmm0,WORD_BIT           ; xmm0=(11 -- 13 -- 15 -- 17 --)
        pand    xmm1,xmm7               ; xmm1=(-- 31 -- 33 -- 35 -- 37)
        psrld   xmm2,WORD_BIT           ; xmm2=(51 -- 53 -- 55 -- 57 --)
        pand    xmm3,xmm7               ; xmm3=(-- 71 -- 73 -- 75 -- 77)
        por     xmm0,xmm1               ; xmm0=(11 31 13 33 15 35 17 37)
        por     xmm2,xmm3               ; xmm2=(51 71 53 73 55 75 57 77)
        pmaddwd xmm0,[GOTOFF(ebx,PW_F362_MF127)]
        pmaddwd xmm2,[GOTOFF(ebx,PW_F085_MF072)]

        paddd   xmm4,xmm5               ; xmm4=tmp0[col0 col1 **** col3]
        paddd   xmm0,xmm2               ; xmm0=tmp0[col1 col3 col5 col7]

        ; -- Even part

        movdqa  xmm6, XMMWORD [XMMBLOCK(0,0,esi,SIZEOF_JCOEF)]
        pmullw  xmm6, XMMWORD [XMMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

        ; xmm6=(00 01 ** 03 ** 05 ** 07)

        movdqa  xmm1,xmm6               ; xmm1=(00 01 ** 03 ** 05 ** 07)
        pslld   xmm6,WORD_BIT           ; xmm6=(-- 00 -- ** -- ** -- **)
        pand    xmm1,xmm7               ; xmm1=(-- 01 -- 03 -- 05 -- 07)
        psrad   xmm6,(WORD_BIT-CONST_BITS-2) ; xmm6=tmp10[col0 **** **** ****]
        psrad   xmm1,(WORD_BIT-CONST_BITS-2) ; xmm1=tmp10[col1 col3 col5 col7]

        ; -- Final output stage

        movdqa  xmm3,xmm6
        movdqa  xmm5,xmm1
        paddd   xmm6,xmm4       ; xmm6=data0[col0 **** **** ****]=(A0 ** ** **)
        paddd   xmm1,xmm0       ; xmm1=data0[col1 col3 col5 col7]=(A1 A3 A5 A7)
        psubd   xmm3,xmm4       ; xmm3=data1[col0 **** **** ****]=(B0 ** ** **)
        psubd   xmm5,xmm0       ; xmm5=data1[col1 col3 col5 col7]=(B1 B3 B5 B7)

        movdqa  xmm2,[GOTOFF(ebx,PD_DESCALE_P1_2)]      ; xmm2=[PD_DESCALE_P1_2]

        punpckldq  xmm6,xmm3            ; xmm6=(A0 B0 ** **)

        movdqa     xmm7,xmm1
        punpcklqdq xmm1,xmm5            ; xmm1=(A1 A3 B1 B3)
        punpckhqdq xmm7,xmm5            ; xmm7=(A5 A7 B5 B7)

        paddd   xmm6,xmm2
        psrad   xmm6,DESCALE_P1_2

        paddd   xmm1,xmm2
        paddd   xmm7,xmm2
        psrad   xmm1,DESCALE_P1_2
        psrad   xmm7,DESCALE_P1_2

        ; -- Prefetch the next coefficient block

        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 0*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 1*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 2*32]
        prefetchnta [esi + DCTSIZE2*SIZEOF_JCOEF + 3*32]

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

        mov     edi, JSAMPARRAY [output_buf(ebp)]       ; (JSAMPROW *)
        mov     eax, JDIMENSION [output_col(ebp)]

        ; | input:| result:|
        ; | A0 B0 |        |
        ; | A1 B1 | C0 C1  |
        ; | A3 B3 | D0 D1  |
        ; | A5 B5 |        |
        ; | A7 B7 |        |

        ; -- Odd part

        packssdw  xmm1,xmm1             ; xmm1=(A1 A3 B1 B3 A1 A3 B1 B3)
        packssdw  xmm7,xmm7             ; xmm7=(A5 A7 B5 B7 A5 A7 B5 B7)
        pmaddwd   xmm1,[GOTOFF(ebx,PW_F362_MF127)]
        pmaddwd   xmm7,[GOTOFF(ebx,PW_F085_MF072)]

        paddd     xmm1,xmm7             ; xmm1=tmp0[row0 row1 row0 row1]

        ; -- Even part

        pslld     xmm6,(CONST_BITS+2)   ; xmm6=tmp10[row0 row1 **** ****]

        ; -- Final output stage

        movdqa    xmm4,xmm6
        paddd     xmm6,xmm1     ; xmm6=data0[row0 row1 **** ****]=(C0 C1 ** **)
        psubd     xmm4,xmm1     ; xmm4=data1[row0 row1 **** ****]=(D0 D1 ** **)

        punpckldq xmm6,xmm4     ; xmm6=(C0 D0 C1 D1)

        paddd     xmm6,[GOTOFF(ebx,PD_DESCALE_P2_2)]
        psrad     xmm6,DESCALE_P2_2

        packssdw  xmm6,xmm6             ; xmm6=(C0 D0 C1 D1 C0 D0 C1 D1)
        packsswb  xmm6,xmm6             ; xmm6=(C0 D0 C1 D1 C0 D0 C1 D1 ..)
        paddb     xmm6,[GOTOFF(ebx,PB_CENTERJSAMP)]

        pextrw  ebx,xmm6,0x00           ; ebx=(C0 D0 -- --)
        pextrw  ecx,xmm6,0x01           ; ecx=(C1 D1 -- --)

        mov     edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
        mov     esi, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
        mov     WORD [edx+eax*SIZEOF_JSAMPLE], bx
        mov     WORD [esi+eax*SIZEOF_JSAMPLE], cx

        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
