;
; jdmrgmmx.asm - merged upsampling/color 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"

; --------------------------------------------------------------------------
;
; Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical.
;
; GLOBAL(void)
; jsimd_h2v1_merged_upsample_mmx (JDIMENSION output_width,
;                                 JSAMPIMAGE input_buf,
;                                 JDIMENSION in_row_group_ctr,
;                                 JSAMPARRAY output_buf);
;

%define output_width(b)	(b)+8			; JDIMENSION output_width
%define input_buf(b)		(b)+12		; JSAMPIMAGE input_buf
%define in_row_group_ctr(b)	(b)+16		; JDIMENSION in_row_group_ctr
%define output_buf(b)		(b)+20		; JSAMPARRAY output_buf

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

	align	16
	global	EXTN(jsimd_h2v1_merged_upsample_mmx)

EXTN(jsimd_h2v1_merged_upsample_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 [output_width(eax)]	; col
	test	ecx,ecx
	jz	near .return

	push	ecx

	mov	edi, JSAMPIMAGE [input_buf(eax)]
	mov	ecx, JDIMENSION [in_row_group_ctr(eax)]
	mov	esi, JSAMPARRAY [edi+0*SIZEOF_JSAMPARRAY]
	mov	ebx, JSAMPARRAY [edi+1*SIZEOF_JSAMPARRAY]
	mov	edx, JSAMPARRAY [edi+2*SIZEOF_JSAMPARRAY]
	mov	edi, JSAMPARRAY [output_buf(eax)]
	mov	esi, JSAMPROW [esi+ecx*SIZEOF_JSAMPROW]		; inptr0
	mov	ebx, JSAMPROW [ebx+ecx*SIZEOF_JSAMPROW]		; inptr1
	mov	edx, JSAMPROW [edx+ecx*SIZEOF_JSAMPROW]		; inptr2
	mov	edi, JSAMPROW [edi]				; outptr

	pop	ecx			; col

	alignx	16,7
.columnloop:
	movpic	eax, POINTER [gotptr]	; load GOT address (eax)

	movq      mm6, MMWORD [ebx]	; mm6=Cb(01234567)
	movq      mm7, MMWORD [edx]	; mm7=Cr(01234567)

	pxor      mm1,mm1		; mm1=(all 0's)
	pcmpeqw   mm3,mm3
	psllw     mm3,7			; mm3={0xFF80 0xFF80 0xFF80 0xFF80}

	movq      mm4,mm6
	punpckhbw mm6,mm1		; mm6=Cb(4567)=CbH
	punpcklbw mm4,mm1		; mm4=Cb(0123)=CbL
	movq      mm0,mm7
	punpckhbw mm7,mm1		; mm7=Cr(4567)=CrH
	punpcklbw mm0,mm1		; mm0=Cr(0123)=CrL

	paddw     mm6,mm3
	paddw     mm4,mm3
	paddw     mm7,mm3
	paddw     mm0,mm3

	; (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	mm5,mm6			; mm5=CbH
	movq	mm2,mm4			; mm2=CbL
	paddw	mm6,mm6			; mm6=2*CbH
	paddw	mm4,mm4			; mm4=2*CbL
	movq	mm1,mm7			; mm1=CrH
	movq	mm3,mm0			; mm3=CrL
	paddw	mm7,mm7			; mm7=2*CrH
	paddw	mm0,mm0			; mm0=2*CrL

	pmulhw	mm6,[GOTOFF(eax,PW_MF0228)]	; mm6=(2*CbH * -FIX(0.22800))
	pmulhw	mm4,[GOTOFF(eax,PW_MF0228)]	; mm4=(2*CbL * -FIX(0.22800))
	pmulhw	mm7,[GOTOFF(eax,PW_F0402)]	; mm7=(2*CrH * FIX(0.40200))
	pmulhw	mm0,[GOTOFF(eax,PW_F0402)]	; mm0=(2*CrL * FIX(0.40200))

	paddw	mm6,[GOTOFF(eax,PW_ONE)]
	paddw	mm4,[GOTOFF(eax,PW_ONE)]
	psraw	mm6,1			; mm6=(CbH * -FIX(0.22800))
	psraw	mm4,1			; mm4=(CbL * -FIX(0.22800))
	paddw	mm7,[GOTOFF(eax,PW_ONE)]
	paddw	mm0,[GOTOFF(eax,PW_ONE)]
	psraw	mm7,1			; mm7=(CrH * FIX(0.40200))
	psraw	mm0,1			; mm0=(CrL * FIX(0.40200))

	paddw	mm6,mm5
	paddw	mm4,mm2
	paddw	mm6,mm5			; mm6=(CbH * FIX(1.77200))=(B-Y)H
	paddw	mm4,mm2			; mm4=(CbL * FIX(1.77200))=(B-Y)L
	paddw	mm7,mm1			; mm7=(CrH * FIX(1.40200))=(R-Y)H
	paddw	mm0,mm3			; mm0=(CrL * FIX(1.40200))=(R-Y)L

	movq	MMWORD [wk(0)], mm6	; wk(0)=(B-Y)H
	movq	MMWORD [wk(1)], mm7	; wk(1)=(R-Y)H

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

	paddd     mm5,[GOTOFF(eax,PD_ONEHALF)]
	paddd     mm6,[GOTOFF(eax,PD_ONEHALF)]
	psrad     mm5,SCALEBITS
	psrad     mm6,SCALEBITS
	paddd     mm2,[GOTOFF(eax,PD_ONEHALF)]
	paddd     mm7,[GOTOFF(eax,PD_ONEHALF)]
	psrad     mm2,SCALEBITS
	psrad     mm7,SCALEBITS

	packssdw  mm5,mm6	; mm5=CbH*-FIX(0.344)+CrH*FIX(0.285)
	packssdw  mm2,mm7	; mm2=CbL*-FIX(0.344)+CrL*FIX(0.285)
	psubw     mm5,mm1	; mm5=CbH*-FIX(0.344)+CrH*-FIX(0.714)=(G-Y)H
	psubw     mm2,mm3	; mm2=CbL*-FIX(0.344)+CrL*-FIX(0.714)=(G-Y)L

	movq	MMWORD [wk(2)], mm5	; wk(2)=(G-Y)H

	mov	al,2			; Yctr
	jmp	short .Yloop_1st
	alignx	16,7

.Yloop_2nd:
	movq	mm0, MMWORD [wk(1)]	; mm0=(R-Y)H
	movq	mm2, MMWORD [wk(2)]	; mm2=(G-Y)H
	movq	mm4, MMWORD [wk(0)]	; mm4=(B-Y)H
	alignx	16,7

.Yloop_1st:
	movq	mm7, MMWORD [esi]	; mm7=Y(01234567)

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

	movq	mm1,mm0			; mm1=mm0=(R-Y)(L/H)
	movq	mm3,mm2			; mm3=mm2=(G-Y)(L/H)
	movq	mm5,mm4			; mm5=mm4=(B-Y)(L/H)

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

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

	paddw     mm4,mm6		; mm4=((B-Y)+YE)=BE=(B0 B2 B4 B6)
	paddw     mm5,mm7		; mm5=((B-Y)+YO)=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	near .endcolumn

	add	edi, byte RGB_PIXELSIZE*SIZEOF_MMWORD	; outptr
	add	esi, byte SIZEOF_MMWORD			; inptr0
	dec	al			; Yctr
	jnz	near .Yloop_2nd

	add	ebx, byte SIZEOF_MMWORD			; inptr1
	add	edx, byte SIZEOF_MMWORD			; inptr2
	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 .endcolumn
	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 .endcolumn

	add	edi, byte RGB_PIXELSIZE*SIZEOF_MMWORD	; outptr
	add	esi, byte SIZEOF_MMWORD			; inptr0
	dec	al			; Yctr
	jnz	near .Yloop_2nd

	add	ebx, byte SIZEOF_MMWORD			; inptr1
	add	edx, byte SIZEOF_MMWORD			; inptr2
	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 .endcolumn
	movd	DWORD [edi+0*SIZEOF_DWORD], mmA

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

.endcolumn:
	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

; --------------------------------------------------------------------------
;
; Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical.
;
; GLOBAL(void)
; jsimd_h2v2_merged_upsample_mmx (JDIMENSION output_width,
;                                 JSAMPIMAGE input_buf,
;                                 JDIMENSION in_row_group_ctr,
;                                 JSAMPARRAY output_buf);
;

%define output_width(b)	(b)+8			; JDIMENSION output_width
%define input_buf(b)		(b)+12		; JSAMPIMAGE input_buf
%define in_row_group_ctr(b)	(b)+16		; JDIMENSION in_row_group_ctr
%define output_buf(b)		(b)+20		; JSAMPARRAY output_buf

	align	16
	global	EXTN(jsimd_h2v2_merged_upsample_mmx)

EXTN(jsimd_h2v2_merged_upsample_mmx):
	push	ebp
	mov	ebp,esp
	push	ebx
;	push	ecx		; need not be preserved
;	push	edx		; need not be preserved
	push	esi
	push	edi

	mov	eax, JDIMENSION [output_width(ebp)]

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

	push	edx			; inptr2
	push	ebx			; inptr1
	push	esi			; inptr00
	mov	ebx,esp

	push	edi			; output_buf (outptr0)
	push	ecx			; in_row_group_ctr
	push	ebx			; input_buf
	push	eax			; output_width

	call	near EXTN(jsimd_h2v1_merged_upsample_mmx)

	add	esi, byte SIZEOF_JSAMPROW	; inptr01
	add	edi, byte SIZEOF_JSAMPROW	; outptr1
	mov	POINTER [ebx+0*SIZEOF_POINTER], esi
	mov	POINTER [ebx-1*SIZEOF_POINTER], edi

	call	near EXTN(jsimd_h2v1_merged_upsample_mmx)

	add	esp, byte 7*SIZEOF_DWORD

	pop	edi
	pop	esi
;	pop	edx		; need not be preserved
;	pop	ecx		; need not be preserved
	pop	ebx
	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
