;
; jidctred.asm - reduced-size IDCT (64-bit SSE2)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
; Copyright (C) 2009, D. R. Commander.
;
; 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    64
;
; 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)
;

; r10 = void *dct_table
; r11 = JCOEFPTR coef_block
; r12 = JSAMPARRAY output_buf
; r13 = JDIMENSION output_col

%define original_rbp    rbp+0
%define wk(i)           rbp-(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    rbp
        mov     rax,rsp                         ; rax = original rbp
        sub     rsp, byte 4
        and     rsp, byte (-SIZEOF_XMMWORD)     ; align to 128 bits
        mov     [rsp],rax
        mov     rbp,rsp                         ; rbp = aligned rbp
        lea     rsp, [wk(0)]
        collect_args

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

        mov     rdx, r10                ; quantptr
        mov     rsi, r11                ; inptr

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

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

        ; -- AC terms all zero

        movdqa  xmm0, XMMWORD [XMMBLOCK(0,0,rsi,SIZEOF_JCOEF)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(0,0,rdx,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
%endif
.columnDCT:

        ; -- Odd part

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

        movdqa    xmm4,xmm0
        movdqa    xmm5,xmm0
        punpcklwd xmm4,xmm1
        punpckhwd xmm5,xmm1
        movdqa    xmm0,xmm4
        movdqa    xmm1,xmm5
        pmaddwd   xmm4,[rel PW_F256_F089]       ; xmm4=(tmp2L)
        pmaddwd   xmm5,[rel PW_F256_F089]       ; xmm5=(tmp2H)
        pmaddwd   xmm0,[rel PW_F106_MF217]      ; xmm0=(tmp0L)
        pmaddwd   xmm1,[rel 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,[rel PW_MF060_MF050]     ; xmm6=(tmp2L)
        pmaddwd   xmm7,[rel PW_MF060_MF050]     ; xmm7=(tmp2H)
        pmaddwd   xmm2,[rel PW_F145_MF021]      ; xmm2=(tmp0L)
        pmaddwd   xmm3,[rel 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,rsi,SIZEOF_JCOEF)]
        movdqa  xmm5, XMMWORD [XMMBLOCK(2,0,rsi,SIZEOF_JCOEF)]
        movdqa  xmm0, XMMWORD [XMMBLOCK(6,0,rsi,SIZEOF_JCOEF)]
        pmullw  xmm4, XMMWORD [XMMBLOCK(0,0,rdx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm5, XMMWORD [XMMBLOCK(2,0,rdx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(6,0,rdx,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,[rel PW_F184_MF076]      ; xmm5=tmp2L
        pmaddwd   xmm3,[rel 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,[rel PD_DESCALE_P1_4]      ; xmm6=[rel 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,[rel PD_DESCALE_P1_4]      ; xmm7=[rel 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 [rsi + DCTSIZE2*SIZEOF_JCOEF + 0*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 1*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 2*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 3*32]

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

        mov     rax, [original_rbp]
        mov     rdi, r12        ; (JSAMPROW *)
        mov     eax, r13d

        ; -- 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,[rel PW_F256_F089]       ; xmm1=(tmp2)
        pmaddwd   xmm6,[rel PW_MF060_MF050]     ; xmm6=(tmp2)
        pmaddwd   xmm5,[rel PW_F106_MF217]      ; xmm5=(tmp0)
        pmaddwd   xmm2,[rel PW_F145_MF021]      ; xmm2=(tmp0)

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

        ; -- Even part

        punpcklwd xmm0,xmm3
        pmaddwd   xmm0,[rel PW_F184_MF076]      ; xmm0=tmp2

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

        ; -- Final output stage

        movdqa  xmm1,[rel PD_DESCALE_P2_4]      ; xmm1=[rel 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,[rel 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     rdx, JSAMPROW [rdi+0*SIZEOF_JSAMPROW]
        mov     rsi, JSAMPROW [rdi+1*SIZEOF_JSAMPROW]
        movd    XMM_DWORD [rdx+rax*SIZEOF_JSAMPLE], xmm4
        movd    XMM_DWORD [rsi+rax*SIZEOF_JSAMPLE], xmm2
        mov     rdx, JSAMPROW [rdi+2*SIZEOF_JSAMPROW]
        mov     rsi, JSAMPROW [rdi+3*SIZEOF_JSAMPROW]
        movd    XMM_DWORD [rdx+rax*SIZEOF_JSAMPLE], xmm1
        movd    XMM_DWORD [rsi+rax*SIZEOF_JSAMPLE], xmm3

        uncollect_args
        mov     rsp,rbp         ; rsp <- aligned rbp
        pop     rsp             ; rsp <- original rbp
        pop     rbp
        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)
;

; r10 = void *dct_table
; r11 = JCOEFPTR coef_block
; r12 = JSAMPARRAY output_buf
; r13 = JDIMENSION output_col

        align   16
        global  EXTN(jsimd_idct_2x2_sse2)

EXTN(jsimd_idct_2x2_sse2):
        push    rbp
        mov     rax,rsp
        mov     rbp,rsp
        collect_args
        push    rbx

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

        mov     rdx, r10                ; quantptr
        mov     rsi, r11                ; 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,rsi,SIZEOF_JCOEF)]
        movdqa  xmm1, XMMWORD [XMMBLOCK(3,0,rsi,SIZEOF_JCOEF)]
        pmullw  xmm0, XMMWORD [XMMBLOCK(1,0,rdx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm1, XMMWORD [XMMBLOCK(3,0,rdx,SIZEOF_ISLOW_MULT_TYPE)]
        movdqa  xmm2, XMMWORD [XMMBLOCK(5,0,rsi,SIZEOF_JCOEF)]
        movdqa  xmm3, XMMWORD [XMMBLOCK(7,0,rsi,SIZEOF_JCOEF)]
        pmullw  xmm2, XMMWORD [XMMBLOCK(5,0,rdx,SIZEOF_ISLOW_MULT_TYPE)]
        pmullw  xmm3, XMMWORD [XMMBLOCK(7,0,rdx,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,[rel PW_F362_MF127]
        pmaddwd   xmm5,[rel 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,[rel PW_F362_MF127]
        pmaddwd xmm2,[rel 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,rsi,SIZEOF_JCOEF)]
        pmullw  xmm6, XMMWORD [XMMBLOCK(0,0,rdx,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,[rel PD_DESCALE_P1_2]      ; xmm2=[rel 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 [rsi + DCTSIZE2*SIZEOF_JCOEF + 0*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 1*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 2*32]
        prefetchnta [rsi + DCTSIZE2*SIZEOF_JCOEF + 3*32]

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

        mov     rdi, r12        ; (JSAMPROW *)
        mov     eax, r13d

        ; | 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,[rel PW_F362_MF127]
        pmaddwd   xmm7,[rel 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,[rel 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,[rel PB_CENTERJSAMP]

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

        mov     rdx, JSAMPROW [rdi+0*SIZEOF_JSAMPROW]
        mov     rsi, JSAMPROW [rdi+1*SIZEOF_JSAMPROW]
        mov     WORD [rdx+rax*SIZEOF_JSAMPLE], bx
        mov     WORD [rsi+rax*SIZEOF_JSAMPLE], cx

        pop     rbx
        uncollect_args
        pop     rbp
        ret

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