;
; jdcolmmx.asm - colorspace conversion (MMX)
;
; 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
;
; Last Modified : February 4, 2006
;
; [TAB8]

%include "jsimdext.inc"
%include "jcolsamp.inc"

%if RGB_PIXELSIZE == 3 || RGB_PIXELSIZE == 4
%ifdef JDCOLOR_YCCRGB_MMX_SUPPORTED

; --------------------------------------------------------------------------

%define SCALEBITS	16

F_0_344	equ	 22554			; FIX(0.34414)
F_0_714	equ	 46802			; FIX(0.71414)
F_1_402	equ	 91881			; FIX(1.40200)
F_1_772	equ	116130			; FIX(1.77200)
F_0_402	equ	(F_1_402 - 65536)	; FIX(1.40200) - FIX(1)
F_0_285	equ	( 65536 - F_0_714)	; FIX(1) - FIX(0.71414)
F_0_228	equ	(131072 - F_1_772)	; FIX(2) - FIX(1.77200)

; --------------------------------------------------------------------------
	SECTION	SEG_CONST

	alignz	16
	global	EXTN(jconst_ycc_rgb_convert_mmx)

EXTN(jconst_ycc_rgb_convert_mmx):

PW_F0402	times 4 dw  F_0_402
PW_MF0228	times 4 dw -F_0_228
PW_MF0344_F0285	times 2 dw -F_0_344, F_0_285
PW_ONE		times 4 dw  1
PD_ONEHALF	times 2 dd  1 << (SCALEBITS-1)

	alignz	16

; --------------------------------------------------------------------------
	SECTION	SEG_TEXT
	BITS	32
;
; Convert some rows of samples to the output colorspace.
;
; GLOBAL(void)
; jpeg_ycc_rgb_convert_mmx (j_decompress_ptr cinfo,
;                           JSAMPIMAGE input_buf, JDIMENSION input_row,
;                           JSAMPARRAY output_buf, int num_rows)
;

%define cinfo(b)	(b)+8		; j_decompress_ptr cinfo
%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(jpeg_ycc_rgb_convert_mmx)

EXTN(jpeg_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, POINTER [cinfo(eax)]
	mov	ecx, JDIMENSION [jdstruct_output_width(ecx)]	; 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

%endif ; JDCOLOR_YCCRGB_MMX_SUPPORTED
%endif ; RGB_PIXELSIZE == 3 || RGB_PIXELSIZE == 4
