;
; jcclrmmx.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_rgb_ycc_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		8
%define gotptr		wk(0)-SIZEOF_POINTER	; void * gotptr

	align	16
	global	EXTN(jsimd_rgb_ycc_convert_mmx) PRIVATE

EXTN(jsimd_rgb_ycc_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]
	mov	ebx, JSAMPARRAY [esi+1*SIZEOF_JSAMPARRAY]
	mov	edx, JSAMPARRAY [esi+2*SIZEOF_JSAMPARRAY]
	lea	edi, [edi+ecx*SIZEOF_JSAMPROW]
	lea	ebx, [ebx+ecx*SIZEOF_JSAMPROW]
	lea	edx, [edx+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	edx
	push	ebx
	push	edi
	push	esi
	push	ecx			; col

	mov	esi, JSAMPROW [esi]	; inptr
	mov	edi, JSAMPROW [edi]	; outptr0
	mov	ebx, JSAMPROW [ebx]	; outptr1
	mov	edx, JSAMPROW [edx]	; outptr2
	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_ycc_cnv
.column_ld16:
	test	cl, 2*SIZEOF_MMWORD
	mov	ecx, SIZEOF_MMWORD
	jz	short .rgb_ycc_cnv
	movq	mmF,mmA
	movq	mmA, MMWORD [esi+0*SIZEOF_MMWORD]
	movq	mmG, MMWORD [esi+1*SIZEOF_MMWORD]
	jmp	short .rgb_ycc_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_ycc_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_ycc_cnv
	movq	mmD,mmA
	movq	mmC,mmF
	movq	mmA, MMWORD [esi+0*SIZEOF_MMWORD]
	movq	mmF, MMWORD [esi+1*SIZEOF_MMWORD]
	jmp	short .rgb_ycc_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_ycc_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
	; Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE
	; Cr =  0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE
	;
	; (This implementation)
	; Y  =  0.29900 * R + 0.33700 * G + 0.11400 * B + 0.25000 * G
	; Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE
	; Cr =  0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE

	movq      MMWORD [wk(0)], mm0	; wk(0)=RE
	movq      MMWORD [wk(1)], mm1	; wk(1)=RO
	movq      MMWORD [wk(2)], mm4	; wk(2)=BE
	movq      MMWORD [wk(3)], mm5	; wk(3)=BO

	movq      mm6,mm1
	punpcklwd mm1,mm3
	punpckhwd mm6,mm3
	movq      mm7,mm1
	movq      mm4,mm6
	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)
	pmaddwd   mm7,[GOTOFF(eax,PW_MF016_MF033)] ; mm7=ROL*-FIX(0.168)+GOL*-FIX(0.331)
	pmaddwd   mm4,[GOTOFF(eax,PW_MF016_MF033)] ; mm4=ROH*-FIX(0.168)+GOH*-FIX(0.331)

	movq      MMWORD [wk(4)], mm1	; wk(4)=ROL*FIX(0.299)+GOL*FIX(0.337)
	movq      MMWORD [wk(5)], mm6	; wk(5)=ROH*FIX(0.299)+GOH*FIX(0.337)

	pxor      mm1,mm1
	pxor      mm6,mm6
	punpcklwd mm1,mm5		; mm1=BOL
	punpckhwd mm6,mm5		; mm6=BOH
	psrld     mm1,1			; mm1=BOL*FIX(0.500)
	psrld     mm6,1			; mm6=BOH*FIX(0.500)

	movq      mm5,[GOTOFF(eax,PD_ONEHALFM1_CJ)] ; mm5=[PD_ONEHALFM1_CJ]

	paddd     mm7,mm1
	paddd     mm4,mm6
	paddd     mm7,mm5
	paddd     mm4,mm5
	psrld     mm7,SCALEBITS		; mm7=CbOL
	psrld     mm4,SCALEBITS		; mm4=CbOH
	packssdw  mm7,mm4		; mm7=CbO

	movq      mm1, MMWORD [wk(2)]	; mm1=BE

	movq      mm6,mm0
	punpcklwd mm0,mm2
	punpckhwd mm6,mm2
	movq      mm5,mm0
	movq      mm4,mm6
	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)
	pmaddwd   mm5,[GOTOFF(eax,PW_MF016_MF033)] ; mm5=REL*-FIX(0.168)+GEL*-FIX(0.331)
	pmaddwd   mm4,[GOTOFF(eax,PW_MF016_MF033)] ; mm4=REH*-FIX(0.168)+GEH*-FIX(0.331)

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

	pxor      mm0,mm0
	pxor      mm6,mm6
	punpcklwd mm0,mm1		; mm0=BEL
	punpckhwd mm6,mm1		; mm6=BEH
	psrld     mm0,1			; mm0=BEL*FIX(0.500)
	psrld     mm6,1			; mm6=BEH*FIX(0.500)

	movq      mm1,[GOTOFF(eax,PD_ONEHALFM1_CJ)] ; mm1=[PD_ONEHALFM1_CJ]

	paddd     mm5,mm0
	paddd     mm4,mm6
	paddd     mm5,mm1
	paddd     mm4,mm1
	psrld     mm5,SCALEBITS		; mm5=CbEL
	psrld     mm4,SCALEBITS		; mm4=CbEH
	packssdw  mm5,mm4		; mm5=CbE

	psllw     mm7,BYTE_BIT
	por       mm5,mm7		; mm5=Cb
	movq      MMWORD [ebx], mm5	; Save Cb

	movq      mm0, MMWORD [wk(3)]	; mm0=BO
	movq      mm6, MMWORD [wk(2)]	; mm6=BE
	movq      mm1, MMWORD [wk(1)]	; mm1=RO

	movq      mm4,mm0
	punpcklwd mm0,mm3
	punpckhwd mm4,mm3
	movq      mm7,mm0
	movq      mm5,mm4
	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)
	pmaddwd   mm7,[GOTOFF(eax,PW_MF008_MF041)] ; mm7=BOL*-FIX(0.081)+GOL*-FIX(0.418)
	pmaddwd   mm5,[GOTOFF(eax,PW_MF008_MF041)] ; mm5=BOH*-FIX(0.081)+GOH*-FIX(0.418)

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

	paddd     mm0, MMWORD [wk(4)]
	paddd     mm4, MMWORD [wk(5)]
	paddd     mm0,mm3
	paddd     mm4,mm3
	psrld     mm0,SCALEBITS		; mm0=YOL
	psrld     mm4,SCALEBITS		; mm4=YOH
	packssdw  mm0,mm4		; mm0=YO

	pxor      mm3,mm3
	pxor      mm4,mm4
	punpcklwd mm3,mm1		; mm3=ROL
	punpckhwd mm4,mm1		; mm4=ROH
	psrld     mm3,1			; mm3=ROL*FIX(0.500)
	psrld     mm4,1			; mm4=ROH*FIX(0.500)

	movq      mm1,[GOTOFF(eax,PD_ONEHALFM1_CJ)] ; mm1=[PD_ONEHALFM1_CJ]

	paddd     mm7,mm3
	paddd     mm5,mm4
	paddd     mm7,mm1
	paddd     mm5,mm1
	psrld     mm7,SCALEBITS		; mm7=CrOL
	psrld     mm5,SCALEBITS		; mm5=CrOH
	packssdw  mm7,mm5		; mm7=CrO

	movq      mm3, MMWORD [wk(0)]	; mm3=RE

	movq      mm4,mm6
	punpcklwd mm6,mm2
	punpckhwd mm4,mm2
	movq      mm1,mm6
	movq      mm5,mm4
	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)
	pmaddwd   mm1,[GOTOFF(eax,PW_MF008_MF041)] ; mm1=BEL*-FIX(0.081)+GEL*-FIX(0.418)
	pmaddwd   mm5,[GOTOFF(eax,PW_MF008_MF041)] ; mm5=BEH*-FIX(0.081)+GEH*-FIX(0.418)

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

	paddd     mm6, MMWORD [wk(6)]
	paddd     mm4, MMWORD [wk(7)]
	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

	pxor      mm2,mm2
	pxor      mm4,mm4
	punpcklwd mm2,mm3		; mm2=REL
	punpckhwd mm4,mm3		; mm4=REH
	psrld     mm2,1			; mm2=REL*FIX(0.500)
	psrld     mm4,1			; mm4=REH*FIX(0.500)

	movq      mm0,[GOTOFF(eax,PD_ONEHALFM1_CJ)] ; mm0=[PD_ONEHALFM1_CJ]

	paddd     mm1,mm2
	paddd     mm5,mm4
	paddd     mm1,mm0
	paddd     mm5,mm0
	psrld     mm1,SCALEBITS		; mm1=CrEL
	psrld     mm5,SCALEBITS		; mm5=CrEH
	packssdw  mm1,mm5		; mm1=CrE

	psllw     mm7,BYTE_BIT
	por       mm1,mm7		; mm1=Cr
	movq      MMWORD [edx], mm1	; Save Cr

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

	pop	ecx			; col
	pop	esi
	pop	edi
	pop	ebx
	pop	edx
	poppic	eax

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