;
; 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)

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)

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)

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
