;
; jdcolext.asm - colorspace conversion (MMX)
;
; 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
;
; [TAB8]

%include "jcolsamp.inc"

; --------------------------------------------------------------------------
;
; Convert some rows of samples to the output colorspace.
;
; GLOBAL(void)
; jsimd_ycc_rgb_convert_mmx (JDIMENSION out_width,
;                            JSAMPIMAGE input_buf, JDIMENSION input_row,
;                            JSAMPARRAY output_buf, int num_rows)
;

%define out_width(b)    (b)+8           ; JDIMENSION out_width
%define input_buf(b)    (b)+12          ; JSAMPIMAGE input_buf
%define input_row(b)    (b)+16          ; JDIMENSION input_row
%define output_buf(b)   (b)+20          ; JSAMPARRAY output_buf
%define num_rows(b)     (b)+24          ; int num_rows

%define original_ebp    ebp+0
%define wk(i)           ebp-(WK_NUM-(i))*SIZEOF_MMWORD  ; mmword wk[WK_NUM]
%define WK_NUM          2
%define gotptr          wk(0)-SIZEOF_POINTER    ; void * gotptr

        align   16
        global  EXTN(jsimd_ycc_rgb_convert_mmx)

EXTN(jsimd_ycc_rgb_convert_mmx):
        push    ebp
        mov     eax,esp                         ; eax = original ebp
        sub     esp, byte 4
        and     esp, byte (-SIZEOF_MMWORD)      ; align to 64 bits
        mov     [esp],eax
        mov     ebp,esp                         ; ebp = aligned ebp
        lea     esp, [wk(0)]
        pushpic eax             ; make a room for GOT address
        push    ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
        push    esi
        push    edi

        get_GOT ebx                     ; get GOT address
        movpic  POINTER [gotptr], ebx   ; save GOT address

        mov     ecx, JDIMENSION [out_width(eax)]        ; num_cols
        test    ecx,ecx
        jz      near .return

        push    ecx

        mov     edi, JSAMPIMAGE [input_buf(eax)]
        mov     ecx, JDIMENSION [input_row(eax)]
        mov     esi, JSAMPARRAY [edi+0*SIZEOF_JSAMPARRAY]
        mov     ebx, JSAMPARRAY [edi+1*SIZEOF_JSAMPARRAY]
        mov     edx, JSAMPARRAY [edi+2*SIZEOF_JSAMPARRAY]
        lea     esi, [esi+ecx*SIZEOF_JSAMPROW]
        lea     ebx, [ebx+ecx*SIZEOF_JSAMPROW]
        lea     edx, [edx+ecx*SIZEOF_JSAMPROW]

        pop     ecx

        mov     edi, JSAMPARRAY [output_buf(eax)]
        mov     eax, INT [num_rows(eax)]
        test    eax,eax
        jle     near .return
        alignx  16,7
.rowloop:
        push    eax
        push    edi
        push    edx
        push    ebx
        push    esi
        push    ecx                     ; col

        mov     esi, JSAMPROW [esi]     ; inptr0
        mov     ebx, JSAMPROW [ebx]     ; inptr1
        mov     edx, JSAMPROW [edx]     ; inptr2
        mov     edi, JSAMPROW [edi]     ; outptr
        movpic  eax, POINTER [gotptr]   ; load GOT address (eax)
        alignx  16,7
.columnloop:

        movq    mm5, MMWORD [ebx]       ; mm5=Cb(01234567)
        movq    mm1, MMWORD [edx]       ; mm1=Cr(01234567)

        pcmpeqw mm4,mm4
        pcmpeqw mm7,mm7
        psrlw   mm4,BYTE_BIT
        psllw   mm7,7                   ; mm7={0xFF80 0xFF80 0xFF80 0xFF80}
        movq    mm0,mm4                 ; mm0=mm4={0xFF 0x00 0xFF 0x00 ..}

        pand    mm4,mm5                 ; mm4=Cb(0246)=CbE
        psrlw   mm5,BYTE_BIT            ; mm5=Cb(1357)=CbO
        pand    mm0,mm1                 ; mm0=Cr(0246)=CrE
        psrlw   mm1,BYTE_BIT            ; mm1=Cr(1357)=CrO

        paddw   mm4,mm7
        paddw   mm5,mm7
        paddw   mm0,mm7
        paddw   mm1,mm7

        ; (Original)
        ; R = Y                + 1.40200 * Cr
        ; G = Y - 0.34414 * Cb - 0.71414 * Cr
        ; B = Y + 1.77200 * Cb
        ;
        ; (This implementation)
        ; R = Y                + 0.40200 * Cr + Cr
        ; G = Y - 0.34414 * Cb + 0.28586 * Cr - Cr
        ; B = Y - 0.22800 * Cb + Cb + Cb

        movq    mm2,mm4                 ; mm2=CbE
        movq    mm3,mm5                 ; mm3=CbO
        paddw   mm4,mm4                 ; mm4=2*CbE
        paddw   mm5,mm5                 ; mm5=2*CbO
        movq    mm6,mm0                 ; mm6=CrE
        movq    mm7,mm1                 ; mm7=CrO
        paddw   mm0,mm0                 ; mm0=2*CrE
        paddw   mm1,mm1                 ; mm1=2*CrO

        pmulhw  mm4,[GOTOFF(eax,PW_MF0228)]     ; mm4=(2*CbE * -FIX(0.22800))
        pmulhw  mm5,[GOTOFF(eax,PW_MF0228)]     ; mm5=(2*CbO * -FIX(0.22800))
        pmulhw  mm0,[GOTOFF(eax,PW_F0402)]      ; mm0=(2*CrE * FIX(0.40200))
        pmulhw  mm1,[GOTOFF(eax,PW_F0402)]      ; mm1=(2*CrO * FIX(0.40200))

        paddw   mm4,[GOTOFF(eax,PW_ONE)]
        paddw   mm5,[GOTOFF(eax,PW_ONE)]
        psraw   mm4,1                   ; mm4=(CbE * -FIX(0.22800))
        psraw   mm5,1                   ; mm5=(CbO * -FIX(0.22800))
        paddw   mm0,[GOTOFF(eax,PW_ONE)]
        paddw   mm1,[GOTOFF(eax,PW_ONE)]
        psraw   mm0,1                   ; mm0=(CrE * FIX(0.40200))
        psraw   mm1,1                   ; mm1=(CrO * FIX(0.40200))

        paddw   mm4,mm2
        paddw   mm5,mm3
        paddw   mm4,mm2                 ; mm4=(CbE * FIX(1.77200))=(B-Y)E
        paddw   mm5,mm3                 ; mm5=(CbO * FIX(1.77200))=(B-Y)O
        paddw   mm0,mm6                 ; mm0=(CrE * FIX(1.40200))=(R-Y)E
        paddw   mm1,mm7                 ; mm1=(CrO * FIX(1.40200))=(R-Y)O

        movq    MMWORD [wk(0)], mm4     ; wk(0)=(B-Y)E
        movq    MMWORD [wk(1)], mm5     ; wk(1)=(B-Y)O

        movq      mm4,mm2
        movq      mm5,mm3
        punpcklwd mm2,mm6
        punpckhwd mm4,mm6
        pmaddwd   mm2,[GOTOFF(eax,PW_MF0344_F0285)]
        pmaddwd   mm4,[GOTOFF(eax,PW_MF0344_F0285)]
        punpcklwd mm3,mm7
        punpckhwd mm5,mm7
        pmaddwd   mm3,[GOTOFF(eax,PW_MF0344_F0285)]
        pmaddwd   mm5,[GOTOFF(eax,PW_MF0344_F0285)]

        paddd     mm2,[GOTOFF(eax,PD_ONEHALF)]
        paddd     mm4,[GOTOFF(eax,PD_ONEHALF)]
        psrad     mm2,SCALEBITS
        psrad     mm4,SCALEBITS
        paddd     mm3,[GOTOFF(eax,PD_ONEHALF)]
        paddd     mm5,[GOTOFF(eax,PD_ONEHALF)]
        psrad     mm3,SCALEBITS
        psrad     mm5,SCALEBITS

        packssdw  mm2,mm4       ; mm2=CbE*-FIX(0.344)+CrE*FIX(0.285)
        packssdw  mm3,mm5       ; mm3=CbO*-FIX(0.344)+CrO*FIX(0.285)
        psubw     mm2,mm6       ; mm2=CbE*-FIX(0.344)+CrE*-FIX(0.714)=(G-Y)E
        psubw     mm3,mm7       ; mm3=CbO*-FIX(0.344)+CrO*-FIX(0.714)=(G-Y)O

        movq      mm5, MMWORD [esi]     ; mm5=Y(01234567)

        pcmpeqw   mm4,mm4
        psrlw     mm4,BYTE_BIT          ; mm4={0xFF 0x00 0xFF 0x00 ..}
        pand      mm4,mm5               ; mm4=Y(0246)=YE
        psrlw     mm5,BYTE_BIT          ; mm5=Y(1357)=YO

        paddw     mm0,mm4               ; mm0=((R-Y)E+YE)=RE=(R0 R2 R4 R6)
        paddw     mm1,mm5               ; mm1=((R-Y)O+YO)=RO=(R1 R3 R5 R7)
        packuswb  mm0,mm0               ; mm0=(R0 R2 R4 R6 ** ** ** **)
        packuswb  mm1,mm1               ; mm1=(R1 R3 R5 R7 ** ** ** **)

        paddw     mm2,mm4               ; mm2=((G-Y)E+YE)=GE=(G0 G2 G4 G6)
        paddw     mm3,mm5               ; mm3=((G-Y)O+YO)=GO=(G1 G3 G5 G7)
        packuswb  mm2,mm2               ; mm2=(G0 G2 G4 G6 ** ** ** **)
        packuswb  mm3,mm3               ; mm3=(G1 G3 G5 G7 ** ** ** **)

        paddw     mm4, MMWORD [wk(0)]   ; mm4=(YE+(B-Y)E)=BE=(B0 B2 B4 B6)
        paddw     mm5, MMWORD [wk(1)]   ; mm5=(YO+(B-Y)O)=BO=(B1 B3 B5 B7)
        packuswb  mm4,mm4               ; mm4=(B0 B2 B4 B6 ** ** ** **)
        packuswb  mm5,mm5               ; mm5=(B1 B3 B5 B7 ** ** ** **)

%if RGB_PIXELSIZE == 3 ; ---------------

        ; mmA=(00 02 04 06 ** ** ** **), mmB=(01 03 05 07 ** ** ** **)
        ; mmC=(10 12 14 16 ** ** ** **), mmD=(11 13 15 17 ** ** ** **)
        ; mmE=(20 22 24 26 ** ** ** **), mmF=(21 23 25 27 ** ** ** **)
        ; mmG=(** ** ** ** ** ** ** **), mmH=(** ** ** ** ** ** ** **)

        punpcklbw mmA,mmC               ; mmA=(00 10 02 12 04 14 06 16)
        punpcklbw mmE,mmB               ; mmE=(20 01 22 03 24 05 26 07)
        punpcklbw mmD,mmF               ; mmD=(11 21 13 23 15 25 17 27)

        movq      mmG,mmA
        movq      mmH,mmA
        punpcklwd mmA,mmE               ; mmA=(00 10 20 01 02 12 22 03)
        punpckhwd mmG,mmE               ; mmG=(04 14 24 05 06 16 26 07)

        psrlq     mmH,2*BYTE_BIT        ; mmH=(02 12 04 14 06 16 -- --)
        psrlq     mmE,2*BYTE_BIT        ; mmE=(22 03 24 05 26 07 -- --)

        movq      mmC,mmD
        movq      mmB,mmD
        punpcklwd mmD,mmH               ; mmD=(11 21 02 12 13 23 04 14)
        punpckhwd mmC,mmH               ; mmC=(15 25 06 16 17 27 -- --)

        psrlq     mmB,2*BYTE_BIT        ; mmB=(13 23 15 25 17 27 -- --)

        movq      mmF,mmE
        punpcklwd mmE,mmB               ; mmE=(22 03 13 23 24 05 15 25)
        punpckhwd mmF,mmB               ; mmF=(26 07 17 27 -- -- -- --)

        punpckldq mmA,mmD               ; mmA=(00 10 20 01 11 21 02 12)
        punpckldq mmE,mmG               ; mmE=(22 03 13 23 04 14 24 05)
        punpckldq mmC,mmF               ; mmC=(15 25 06 16 26 07 17 27)

        cmp     ecx, byte SIZEOF_MMWORD
        jb      short .column_st16

        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mmE
        movq    MMWORD [edi+2*SIZEOF_MMWORD], mmC

        sub     ecx, byte SIZEOF_MMWORD
        jz      short .nextrow

        add     esi, byte SIZEOF_MMWORD                 ; inptr0
        add     ebx, byte SIZEOF_MMWORD                 ; inptr1
        add     edx, byte SIZEOF_MMWORD                 ; inptr2
        add     edi, byte RGB_PIXELSIZE*SIZEOF_MMWORD   ; outptr
        jmp     near .columnloop
        alignx  16,7

.column_st16:
        lea     ecx, [ecx+ecx*2]        ; imul ecx, RGB_PIXELSIZE
        cmp     ecx, byte 2*SIZEOF_MMWORD
        jb      short .column_st8
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mmE
        movq    mmA,mmC
        sub     ecx, byte 2*SIZEOF_MMWORD
        add     edi, byte 2*SIZEOF_MMWORD
        jmp     short .column_st4
.column_st8:
        cmp     ecx, byte SIZEOF_MMWORD
        jb      short .column_st4
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    mmA,mmE
        sub     ecx, byte SIZEOF_MMWORD
        add     edi, byte SIZEOF_MMWORD
.column_st4:
        movd    eax,mmA
        cmp     ecx, byte SIZEOF_DWORD
        jb      short .column_st2
        mov     DWORD [edi+0*SIZEOF_DWORD], eax
        psrlq   mmA,DWORD_BIT
        movd    eax,mmA
        sub     ecx, byte SIZEOF_DWORD
        add     edi, byte SIZEOF_DWORD
.column_st2:
        cmp     ecx, byte SIZEOF_WORD
        jb      short .column_st1
        mov     WORD [edi+0*SIZEOF_WORD], ax
        shr     eax,WORD_BIT
        sub     ecx, byte SIZEOF_WORD
        add     edi, byte SIZEOF_WORD
.column_st1:
        cmp     ecx, byte SIZEOF_BYTE
        jb      short .nextrow
        mov     BYTE [edi+0*SIZEOF_BYTE], al

%else ; RGB_PIXELSIZE == 4 ; -----------

%ifdef RGBX_FILLER_0XFF
        pcmpeqb   mm6,mm6               ; mm6=(X0 X2 X4 X6 ** ** ** **)
        pcmpeqb   mm7,mm7               ; mm7=(X1 X3 X5 X7 ** ** ** **)
%else
        pxor      mm6,mm6               ; mm6=(X0 X2 X4 X6 ** ** ** **)
        pxor      mm7,mm7               ; mm7=(X1 X3 X5 X7 ** ** ** **)
%endif
        ; mmA=(00 02 04 06 ** ** ** **), mmB=(01 03 05 07 ** ** ** **)
        ; mmC=(10 12 14 16 ** ** ** **), mmD=(11 13 15 17 ** ** ** **)
        ; mmE=(20 22 24 26 ** ** ** **), mmF=(21 23 25 27 ** ** ** **)
        ; mmG=(30 32 34 36 ** ** ** **), mmH=(31 33 35 37 ** ** ** **)

        punpcklbw mmA,mmC               ; mmA=(00 10 02 12 04 14 06 16)
        punpcklbw mmE,mmG               ; mmE=(20 30 22 32 24 34 26 36)
        punpcklbw mmB,mmD               ; mmB=(01 11 03 13 05 15 07 17)
        punpcklbw mmF,mmH               ; mmF=(21 31 23 33 25 35 27 37)

        movq      mmC,mmA
        punpcklwd mmA,mmE               ; mmA=(00 10 20 30 02 12 22 32)
        punpckhwd mmC,mmE               ; mmC=(04 14 24 34 06 16 26 36)
        movq      mmG,mmB
        punpcklwd mmB,mmF               ; mmB=(01 11 21 31 03 13 23 33)
        punpckhwd mmG,mmF               ; mmG=(05 15 25 35 07 17 27 37)

        movq      mmD,mmA
        punpckldq mmA,mmB               ; mmA=(00 10 20 30 01 11 21 31)
        punpckhdq mmD,mmB               ; mmD=(02 12 22 32 03 13 23 33)
        movq      mmH,mmC
        punpckldq mmC,mmG               ; mmC=(04 14 24 34 05 15 25 35)
        punpckhdq mmH,mmG               ; mmH=(06 16 26 36 07 17 27 37)

        cmp     ecx, byte SIZEOF_MMWORD
        jb      short .column_st16

        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mmD
        movq    MMWORD [edi+2*SIZEOF_MMWORD], mmC
        movq    MMWORD [edi+3*SIZEOF_MMWORD], mmH

        sub     ecx, byte SIZEOF_MMWORD
        jz      short .nextrow

        add     esi, byte SIZEOF_MMWORD                 ; inptr0
        add     ebx, byte SIZEOF_MMWORD                 ; inptr1
        add     edx, byte SIZEOF_MMWORD                 ; inptr2
        add     edi, byte RGB_PIXELSIZE*SIZEOF_MMWORD   ; outptr
        jmp     near .columnloop
        alignx  16,7

.column_st16:
        cmp     ecx, byte SIZEOF_MMWORD/2
        jb      short .column_st8
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    MMWORD [edi+1*SIZEOF_MMWORD], mmD
        movq    mmA,mmC
        movq    mmD,mmH
        sub     ecx, byte SIZEOF_MMWORD/2
        add     edi, byte 2*SIZEOF_MMWORD
.column_st8:
        cmp     ecx, byte SIZEOF_MMWORD/4
        jb      short .column_st4
        movq    MMWORD [edi+0*SIZEOF_MMWORD], mmA
        movq    mmA,mmD
        sub     ecx, byte SIZEOF_MMWORD/4
        add     edi, byte 1*SIZEOF_MMWORD
.column_st4:
        cmp     ecx, byte SIZEOF_MMWORD/8
        jb      short .nextrow
        movd    DWORD [edi+0*SIZEOF_DWORD], mmA

%endif ; RGB_PIXELSIZE ; ---------------

        alignx  16,7

.nextrow:
        pop     ecx
        pop     esi
        pop     ebx
        pop     edx
        pop     edi
        pop     eax

        add     esi, byte SIZEOF_JSAMPROW
        add     ebx, byte SIZEOF_JSAMPROW
        add     edx, byte SIZEOF_JSAMPROW
        add     edi, byte SIZEOF_JSAMPROW       ; output_buf
        dec     eax                             ; num_rows
        jg      near .rowloop

        emms            ; empty MMX state

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

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