;
; jidctred.asm - reduced-size IDCT (SSE2)
;
; 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
;
; 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
