;
; jcgryext.asm - grayscale colorspace conversion (MMX)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
; Copyright 2011 D. R. Commander
;
; 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_rgb_gray_convert_mmx (JDIMENSION img_width,
;                             JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
;                             JDIMENSION output_row, int num_rows);
;

%define img_width(b)    (b)+8           ; JDIMENSION img_width
%define input_buf(b)    (b)+12          ; JSAMPARRAY input_buf
%define output_buf(b)   (b)+16          ; JSAMPIMAGE output_buf
%define output_row(b)   (b)+20          ; JDIMENSION output_row
%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_rgb_gray_convert_mmx)

EXTN(jsimd_rgb_gray_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 [img_width(eax)]        ; num_cols
        test    ecx,ecx
        jz      near .return

        push    ecx

        mov     esi, JSAMPIMAGE [output_buf(eax)]
        mov     ecx, JDIMENSION [output_row(eax)]
        mov     edi, JSAMPARRAY [esi+0*SIZEOF_JSAMPARRAY]
        lea     edi, [edi+ecx*SIZEOF_JSAMPROW]

        pop     ecx

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

        mov     esi, JSAMPROW [esi]     ; inptr
        mov     edi, JSAMPROW [edi]     ; outptr0
        movpic  eax, POINTER [gotptr]   ; load GOT address (eax)

        cmp     ecx, byte SIZEOF_MMWORD
        jae     short .columnloop
        alignx  16,7

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

.column_ld1:
        push    eax
        push    edx
        lea     ecx,[ecx+ecx*2]         ; imul ecx,RGB_PIXELSIZE
        test    cl, SIZEOF_BYTE
        jz      short .column_ld2
        sub     ecx, byte SIZEOF_BYTE
        xor     eax,eax
        mov     al, BYTE [esi+ecx]
.column_ld2:
        test    cl, SIZEOF_WORD
        jz      short .column_ld4
        sub     ecx, byte SIZEOF_WORD
        xor     edx,edx
        mov     dx, WORD [esi+ecx]
        shl     eax, WORD_BIT
        or      eax,edx
.column_ld4:
        movd    mmA,eax
        pop     edx
        pop     eax
        test    cl, SIZEOF_DWORD
        jz      short .column_ld8
        sub     ecx, byte SIZEOF_DWORD
        movd    mmG, DWORD [esi+ecx]
        psllq   mmA, DWORD_BIT
        por     mmA,mmG
.column_ld8:
        test    cl, SIZEOF_MMWORD
        jz      short .column_ld16
        movq    mmG,mmA
        movq    mmA, MMWORD [esi+0*SIZEOF_MMWORD]
        mov     ecx, SIZEOF_MMWORD
        jmp     short .rgb_gray_cnv
.column_ld16:
        test    cl, 2*SIZEOF_MMWORD
        mov     ecx, SIZEOF_MMWORD
        jz      short .rgb_gray_cnv
        movq    mmF,mmA
        movq    mmA, MMWORD [esi+0*SIZEOF_MMWORD]
        movq    mmG, MMWORD [esi+1*SIZEOF_MMWORD]
        jmp     short .rgb_gray_cnv
        alignx  16,7

.columnloop:
        movq    mmA, MMWORD [esi+0*SIZEOF_MMWORD]
        movq    mmG, MMWORD [esi+1*SIZEOF_MMWORD]
        movq    mmF, MMWORD [esi+2*SIZEOF_MMWORD]

.rgb_gray_cnv:
        ; mmA=(00 10 20 01 11 21 02 12)
        ; mmG=(22 03 13 23 04 14 24 05)
        ; mmF=(15 25 06 16 26 07 17 27)

        movq      mmD,mmA
        psllq     mmA,4*BYTE_BIT        ; mmA=(-- -- -- -- 00 10 20 01)
        psrlq     mmD,4*BYTE_BIT        ; mmD=(11 21 02 12 -- -- -- --)

        punpckhbw mmA,mmG               ; mmA=(00 04 10 14 20 24 01 05)
        psllq     mmG,4*BYTE_BIT        ; mmG=(-- -- -- -- 22 03 13 23)

        punpcklbw mmD,mmF               ; mmD=(11 15 21 25 02 06 12 16)
        punpckhbw mmG,mmF               ; mmG=(22 26 03 07 13 17 23 27)

        movq      mmE,mmA
        psllq     mmA,4*BYTE_BIT        ; mmA=(-- -- -- -- 00 04 10 14)
        psrlq     mmE,4*BYTE_BIT        ; mmE=(20 24 01 05 -- -- -- --)

        punpckhbw mmA,mmD               ; mmA=(00 02 04 06 10 12 14 16)
        psllq     mmD,4*BYTE_BIT        ; mmD=(-- -- -- -- 11 15 21 25)

        punpcklbw mmE,mmG               ; mmE=(20 22 24 26 01 03 05 07)
        punpckhbw mmD,mmG               ; mmD=(11 13 15 17 21 23 25 27)

        pxor      mmH,mmH

        movq      mmC,mmA
        punpcklbw mmA,mmH               ; mmA=(00 02 04 06)
        punpckhbw mmC,mmH               ; mmC=(10 12 14 16)

        movq      mmB,mmE
        punpcklbw mmE,mmH               ; mmE=(20 22 24 26)
        punpckhbw mmB,mmH               ; mmB=(01 03 05 07)

        movq      mmF,mmD
        punpcklbw mmD,mmH               ; mmD=(11 13 15 17)
        punpckhbw mmF,mmH               ; mmF=(21 23 25 27)

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

.column_ld1:
        test    cl, SIZEOF_MMWORD/8
        jz      short .column_ld2
        sub     ecx, byte SIZEOF_MMWORD/8
        movd    mmA, DWORD [esi+ecx*RGB_PIXELSIZE]
.column_ld2:
        test    cl, SIZEOF_MMWORD/4
        jz      short .column_ld4
        sub     ecx, byte SIZEOF_MMWORD/4
        movq    mmF,mmA
        movq    mmA, MMWORD [esi+ecx*RGB_PIXELSIZE]
.column_ld4:
        test    cl, SIZEOF_MMWORD/2
        mov     ecx, SIZEOF_MMWORD
        jz      short .rgb_gray_cnv
        movq    mmD,mmA
        movq    mmC,mmF
        movq    mmA, MMWORD [esi+0*SIZEOF_MMWORD]
        movq    mmF, MMWORD [esi+1*SIZEOF_MMWORD]
        jmp     short .rgb_gray_cnv
        alignx  16,7

.columnloop:
        movq    mmA, MMWORD [esi+0*SIZEOF_MMWORD]
        movq    mmF, MMWORD [esi+1*SIZEOF_MMWORD]
        movq    mmD, MMWORD [esi+2*SIZEOF_MMWORD]
        movq    mmC, MMWORD [esi+3*SIZEOF_MMWORD]

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

        movq      mmB,mmA
        punpcklbw mmA,mmF               ; mmA=(00 02 10 12 20 22 30 32)
        punpckhbw mmB,mmF               ; mmB=(01 03 11 13 21 23 31 33)

        movq      mmG,mmD
        punpcklbw mmD,mmC               ; mmD=(04 06 14 16 24 26 34 36)
        punpckhbw mmG,mmC               ; mmG=(05 07 15 17 25 27 35 37)

        movq      mmE,mmA
        punpcklwd mmA,mmD               ; mmA=(00 02 04 06 10 12 14 16)
        punpckhwd mmE,mmD               ; mmE=(20 22 24 26 30 32 34 36)

        movq      mmH,mmB
        punpcklwd mmB,mmG               ; mmB=(01 03 05 07 11 13 15 17)
        punpckhwd mmH,mmG               ; mmH=(21 23 25 27 31 33 35 37)

        pxor      mmF,mmF

        movq      mmC,mmA
        punpcklbw mmA,mmF               ; mmA=(00 02 04 06)
        punpckhbw mmC,mmF               ; mmC=(10 12 14 16)

        movq      mmD,mmB
        punpcklbw mmB,mmF               ; mmB=(01 03 05 07)
        punpckhbw mmD,mmF               ; mmD=(11 13 15 17)

        movq      mmG,mmE
        punpcklbw mmE,mmF               ; mmE=(20 22 24 26)
        punpckhbw mmG,mmF               ; mmG=(30 32 34 36)

        punpcklbw mmF,mmH
        punpckhbw mmH,mmH
        psrlw     mmF,BYTE_BIT          ; mmF=(21 23 25 27)
        psrlw     mmH,BYTE_BIT          ; mmH=(31 33 35 37)

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

        ; mm0=(R0 R2 R4 R6)=RE, mm2=(G0 G2 G4 G6)=GE, mm4=(B0 B2 B4 B6)=BE
        ; mm1=(R1 R3 R5 R7)=RO, mm3=(G1 G3 G5 G7)=GO, mm5=(B1 B3 B5 B7)=BO

        ; (Original)
        ; Y  =  0.29900 * R + 0.58700 * G + 0.11400 * B
        ;
        ; (This implementation)
        ; Y  =  0.29900 * R + 0.33700 * G + 0.11400 * B + 0.25000 * G

        movq      mm6,mm1
        punpcklwd mm1,mm3
        punpckhwd mm6,mm3
        pmaddwd   mm1,[GOTOFF(eax,PW_F0299_F0337)] ; mm1=ROL*FIX(0.299)+GOL*FIX(0.337)
        pmaddwd   mm6,[GOTOFF(eax,PW_F0299_F0337)] ; mm6=ROH*FIX(0.299)+GOH*FIX(0.337)

        movq      mm7, mm6      ; mm7=ROH*FIX(0.299)+GOH*FIX(0.337)

        movq      mm6,mm0
        punpcklwd mm0,mm2
        punpckhwd mm6,mm2
        pmaddwd   mm0,[GOTOFF(eax,PW_F0299_F0337)] ; mm0=REL*FIX(0.299)+GEL*FIX(0.337)
        pmaddwd   mm6,[GOTOFF(eax,PW_F0299_F0337)] ; mm6=REH*FIX(0.299)+GEH*FIX(0.337)

        movq      MMWORD [wk(0)], mm0   ; wk(0)=REL*FIX(0.299)+GEL*FIX(0.337)
        movq      MMWORD [wk(1)], mm6   ; wk(1)=REH*FIX(0.299)+GEH*FIX(0.337)

        movq      mm0, mm5      ; mm0=BO
        movq      mm6, mm4      ; mm6=BE

        movq      mm4,mm0
        punpcklwd mm0,mm3
        punpckhwd mm4,mm3
        pmaddwd   mm0,[GOTOFF(eax,PW_F0114_F0250)] ; mm0=BOL*FIX(0.114)+GOL*FIX(0.250)
        pmaddwd   mm4,[GOTOFF(eax,PW_F0114_F0250)] ; mm4=BOH*FIX(0.114)+GOH*FIX(0.250)

        movq      mm3,[GOTOFF(eax,PD_ONEHALF)]  ; mm3=[PD_ONEHALF]

        paddd     mm0, mm1
        paddd     mm4, mm7
        paddd     mm0,mm3
        paddd     mm4,mm3
        psrld     mm0,SCALEBITS         ; mm0=YOL
        psrld     mm4,SCALEBITS         ; mm4=YOH
        packssdw  mm0,mm4               ; mm0=YO

        movq      mm4,mm6
        punpcklwd mm6,mm2
        punpckhwd mm4,mm2
        pmaddwd   mm6,[GOTOFF(eax,PW_F0114_F0250)] ; mm6=BEL*FIX(0.114)+GEL*FIX(0.250)
        pmaddwd   mm4,[GOTOFF(eax,PW_F0114_F0250)] ; mm4=BEH*FIX(0.114)+GEH*FIX(0.250)

        movq      mm2,[GOTOFF(eax,PD_ONEHALF)]  ; mm2=[PD_ONEHALF]

        paddd     mm6, MMWORD [wk(0)]
        paddd     mm4, MMWORD [wk(1)]
        paddd     mm6,mm2
        paddd     mm4,mm2
        psrld     mm6,SCALEBITS         ; mm6=YEL
        psrld     mm4,SCALEBITS         ; mm4=YEH
        packssdw  mm6,mm4               ; mm6=YE

        psllw     mm0,BYTE_BIT
        por       mm6,mm0               ; mm6=Y
        movq      MMWORD [edi], mm6     ; Save Y

        sub     ecx, byte SIZEOF_MMWORD
        add     esi, byte RGB_PIXELSIZE*SIZEOF_MMWORD   ; inptr
        add     edi, byte SIZEOF_MMWORD                 ; outptr0
        cmp     ecx, byte SIZEOF_MMWORD
        jae     near .columnloop
        test    ecx,ecx
        jnz     near .column_ld1

        pop     ecx                     ; col
        pop     esi
        pop     edi
        poppic  eax

        add     esi, byte SIZEOF_JSAMPROW       ; input_buf
        add     edi, byte SIZEOF_JSAMPROW
        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
