;
; jcqnt3dn.asm - sample data conversion and quantization (3DNow! & 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 "jsimdext.inc"
%include "jdct.inc"

; --------------------------------------------------------------------------
	SECTION	SEG_TEXT
	BITS	32
;
; Load data into workspace, applying unsigned->signed conversion
;
; GLOBAL(void)
; jsimd_convsamp_float_3dnow (JSAMPARRAY sample_data, JDIMENSION start_col,
;                             FAST_FLOAT * workspace);
;

%define sample_data	ebp+8		; JSAMPARRAY sample_data
%define start_col	ebp+12		; JDIMENSION start_col
%define workspace	ebp+16		; FAST_FLOAT * workspace

	align	16
	global	EXTN(jsimd_convsamp_float_3dnow) PRIVATE

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

	pcmpeqw  mm7,mm7
	psllw    mm7,7
	packsswb mm7,mm7		; mm7 = PB_CENTERJSAMPLE (0x808080..)

	mov	esi, JSAMPARRAY [sample_data]	; (JSAMPROW *)
	mov	eax, JDIMENSION [start_col]
	mov	edi, POINTER [workspace]	; (DCTELEM *)
	mov	ecx, DCTSIZE/2
	alignx	16,7
.convloop:
	mov	ebx, JSAMPROW [esi+0*SIZEOF_JSAMPROW]	; (JSAMPLE *)
	mov	edx, JSAMPROW [esi+1*SIZEOF_JSAMPROW]	; (JSAMPLE *)

	movq	mm0, MMWORD [ebx+eax*SIZEOF_JSAMPLE]
	movq	mm1, MMWORD [edx+eax*SIZEOF_JSAMPLE]

	psubb	mm0,mm7				; mm0=(01234567)
	psubb	mm1,mm7				; mm1=(89ABCDEF)

	punpcklbw mm2,mm0			; mm2=(*0*1*2*3)
	punpckhbw mm0,mm0			; mm0=(*4*5*6*7)
	punpcklbw mm3,mm1			; mm3=(*8*9*A*B)
	punpckhbw mm1,mm1			; mm1=(*C*D*E*F)

	punpcklwd mm4,mm2			; mm4=(***0***1)
	punpckhwd mm2,mm2			; mm2=(***2***3)
	punpcklwd mm5,mm0			; mm5=(***4***5)
	punpckhwd mm0,mm0			; mm0=(***6***7)

	psrad	mm4,(DWORD_BIT-BYTE_BIT)	; mm4=(01)
	psrad	mm2,(DWORD_BIT-BYTE_BIT)	; mm2=(23)
	pi2fd	mm4,mm4
	pi2fd	mm2,mm2
	psrad	mm5,(DWORD_BIT-BYTE_BIT)	; mm5=(45)
	psrad	mm0,(DWORD_BIT-BYTE_BIT)	; mm0=(67)
	pi2fd	mm5,mm5
	pi2fd	mm0,mm0

	movq	MMWORD [MMBLOCK(0,0,edi,SIZEOF_FAST_FLOAT)], mm4
	movq	MMWORD [MMBLOCK(0,1,edi,SIZEOF_FAST_FLOAT)], mm2
	movq	MMWORD [MMBLOCK(0,2,edi,SIZEOF_FAST_FLOAT)], mm5
	movq	MMWORD [MMBLOCK(0,3,edi,SIZEOF_FAST_FLOAT)], mm0

	punpcklwd mm6,mm3			; mm6=(***8***9)
	punpckhwd mm3,mm3			; mm3=(***A***B)
	punpcklwd mm4,mm1			; mm4=(***C***D)
	punpckhwd mm1,mm1			; mm1=(***E***F)

	psrad	mm6,(DWORD_BIT-BYTE_BIT)	; mm6=(89)
	psrad	mm3,(DWORD_BIT-BYTE_BIT)	; mm3=(AB)
	pi2fd	mm6,mm6
	pi2fd	mm3,mm3
	psrad	mm4,(DWORD_BIT-BYTE_BIT)	; mm4=(CD)
	psrad	mm1,(DWORD_BIT-BYTE_BIT)	; mm1=(EF)
	pi2fd	mm4,mm4
	pi2fd	mm1,mm1

	movq	MMWORD [MMBLOCK(1,0,edi,SIZEOF_FAST_FLOAT)], mm6
	movq	MMWORD [MMBLOCK(1,1,edi,SIZEOF_FAST_FLOAT)], mm3
	movq	MMWORD [MMBLOCK(1,2,edi,SIZEOF_FAST_FLOAT)], mm4
	movq	MMWORD [MMBLOCK(1,3,edi,SIZEOF_FAST_FLOAT)], mm1

	add	esi, byte 2*SIZEOF_JSAMPROW
	add	edi, byte 2*DCTSIZE*SIZEOF_FAST_FLOAT
	dec	ecx
	jnz	near .convloop

	femms		; empty MMX/3DNow! state

	pop	edi
	pop	esi
;	pop	edx		; need not be preserved
;	pop	ecx		; need not be preserved
	pop	ebx
	pop	ebp
	ret


; --------------------------------------------------------------------------
;
; Quantize/descale the coefficients, and store into coef_block
;
; GLOBAL(void)
; jsimd_quantize_float_3dnow (JCOEFPTR coef_block, FAST_FLOAT * divisors,
;                             FAST_FLOAT * workspace);
;

%define coef_block	ebp+8		; JCOEFPTR coef_block
%define divisors	ebp+12		; FAST_FLOAT * divisors
%define workspace	ebp+16		; FAST_FLOAT * workspace

	align	16
	global	EXTN(jsimd_quantize_float_3dnow) PRIVATE

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

	mov       eax, 0x4B400000	; (float)0x00C00000 (rndint_magic)
	movd      mm7,eax
	punpckldq mm7,mm7		; mm7={12582912.0F 12582912.0F}

	mov	esi, POINTER [workspace]
	mov	edx, POINTER [divisors]
	mov	edi, JCOEFPTR [coef_block]
	mov	eax, DCTSIZE2/16
	alignx	16,7
.quantloop:
	movq	mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_FAST_FLOAT)]
	movq	mm1, MMWORD [MMBLOCK(0,1,esi,SIZEOF_FAST_FLOAT)]
	pfmul	mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_FAST_FLOAT)]
	pfmul	mm1, MMWORD [MMBLOCK(0,1,edx,SIZEOF_FAST_FLOAT)]
	movq	mm2, MMWORD [MMBLOCK(0,2,esi,SIZEOF_FAST_FLOAT)]
	movq	mm3, MMWORD [MMBLOCK(0,3,esi,SIZEOF_FAST_FLOAT)]
	pfmul	mm2, MMWORD [MMBLOCK(0,2,edx,SIZEOF_FAST_FLOAT)]
	pfmul	mm3, MMWORD [MMBLOCK(0,3,edx,SIZEOF_FAST_FLOAT)]

	pfadd	mm0,mm7			; mm0=(00 ** 01 **)
	pfadd	mm1,mm7			; mm1=(02 ** 03 **)
	pfadd	mm2,mm7			; mm0=(04 ** 05 **)
	pfadd	mm3,mm7			; mm1=(06 ** 07 **)

	movq      mm4,mm0
	punpcklwd mm0,mm1		; mm0=(00 02 ** **)
	punpckhwd mm4,mm1		; mm4=(01 03 ** **)
	movq      mm5,mm2
	punpcklwd mm2,mm3		; mm2=(04 06 ** **)
	punpckhwd mm5,mm3		; mm5=(05 07 ** **)

	punpcklwd mm0,mm4		; mm0=(00 01 02 03)
	punpcklwd mm2,mm5		; mm2=(04 05 06 07)

	movq	mm6, MMWORD [MMBLOCK(1,0,esi,SIZEOF_FAST_FLOAT)]
	movq	mm1, MMWORD [MMBLOCK(1,1,esi,SIZEOF_FAST_FLOAT)]
	pfmul	mm6, MMWORD [MMBLOCK(1,0,edx,SIZEOF_FAST_FLOAT)]
	pfmul	mm1, MMWORD [MMBLOCK(1,1,edx,SIZEOF_FAST_FLOAT)]
	movq	mm3, MMWORD [MMBLOCK(1,2,esi,SIZEOF_FAST_FLOAT)]
	movq	mm4, MMWORD [MMBLOCK(1,3,esi,SIZEOF_FAST_FLOAT)]
	pfmul	mm3, MMWORD [MMBLOCK(1,2,edx,SIZEOF_FAST_FLOAT)]
	pfmul	mm4, MMWORD [MMBLOCK(1,3,edx,SIZEOF_FAST_FLOAT)]

	pfadd	mm6,mm7			; mm0=(10 ** 11 **)
	pfadd	mm1,mm7			; mm4=(12 ** 13 **)
	pfadd	mm3,mm7			; mm0=(14 ** 15 **)
	pfadd	mm4,mm7			; mm4=(16 ** 17 **)

	movq      mm5,mm6
	punpcklwd mm6,mm1		; mm6=(10 12 ** **)
	punpckhwd mm5,mm1		; mm5=(11 13 ** **)
	movq      mm1,mm3
	punpcklwd mm3,mm4		; mm3=(14 16 ** **)
	punpckhwd mm1,mm4		; mm1=(15 17 ** **)

	punpcklwd mm6,mm5		; mm6=(10 11 12 13)
	punpcklwd mm3,mm1		; mm3=(14 15 16 17)

	movq	MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm0
	movq	MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm2
	movq	MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm6
	movq	MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm3

	add	esi, byte 16*SIZEOF_FAST_FLOAT
	add	edx, byte 16*SIZEOF_FAST_FLOAT
	add	edi, byte 16*SIZEOF_JCOEF
	dec	eax
	jnz	near .quantloop

	femms		; empty MMX/3DNow! state

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