;
; jcqnts2f-64.asm - sample data conversion and quantization (64-bit SSE & SSE2)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
; Copyright 2009 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 "jsimdext.inc"
%include "jdct.inc"

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

; r10 = JSAMPARRAY sample_data
; r11 = JDIMENSION start_col
; r12 = FAST_FLOAT * workspace

	align	16
	global	EXTN(jsimd_convsamp_float_sse2) PRIVATE

EXTN(jsimd_convsamp_float_sse2):
	push	rbp
	mov	rax,rsp
	mov	rbp,rsp
	collect_args
	push	rbx

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

	mov rsi, r10
	mov	rax, r11
	mov rdi, r12
	mov	rcx, DCTSIZE/2
.convloop:
	mov	rbx, JSAMPROW [rsi+0*SIZEOF_JSAMPROW]	; (JSAMPLE *)
	mov rdx, JSAMPROW [rsi+1*SIZEOF_JSAMPROW]	; (JSAMPLE *)

	movq	xmm0, XMM_MMWORD [rbx+rax*SIZEOF_JSAMPLE]
	movq	xmm1, XMM_MMWORD [rdx+rax*SIZEOF_JSAMPLE]

	psubb	xmm0,xmm7			; xmm0=(01234567)
	psubb	xmm1,xmm7			; xmm1=(89ABCDEF)

	punpcklbw xmm0,xmm0			; xmm0=(*0*1*2*3*4*5*6*7)
	punpcklbw xmm1,xmm1			; xmm1=(*8*9*A*B*C*D*E*F)

	punpcklwd xmm2,xmm0			; xmm2=(***0***1***2***3)
	punpckhwd xmm0,xmm0			; xmm0=(***4***5***6***7)
	punpcklwd xmm3,xmm1			; xmm3=(***8***9***A***B)
	punpckhwd xmm1,xmm1			; xmm1=(***C***D***E***F)

	psrad     xmm2,(DWORD_BIT-BYTE_BIT)	; xmm2=(0123)
	psrad     xmm0,(DWORD_BIT-BYTE_BIT)	; xmm0=(4567)
	cvtdq2ps  xmm2,xmm2			; xmm2=(0123)
	cvtdq2ps  xmm0,xmm0			; xmm0=(4567)
	psrad     xmm3,(DWORD_BIT-BYTE_BIT)	; xmm3=(89AB)
	psrad     xmm1,(DWORD_BIT-BYTE_BIT)	; xmm1=(CDEF)
	cvtdq2ps  xmm3,xmm3			; xmm3=(89AB)
	cvtdq2ps  xmm1,xmm1			; xmm1=(CDEF)

	movaps	XMMWORD [XMMBLOCK(0,0,rdi,SIZEOF_FAST_FLOAT)], xmm2
	movaps	XMMWORD [XMMBLOCK(0,1,rdi,SIZEOF_FAST_FLOAT)], xmm0
	movaps	XMMWORD [XMMBLOCK(1,0,rdi,SIZEOF_FAST_FLOAT)], xmm3
	movaps	XMMWORD [XMMBLOCK(1,1,rdi,SIZEOF_FAST_FLOAT)], xmm1

	add	rsi, byte 2*SIZEOF_JSAMPROW
	add	rdi, byte 2*DCTSIZE*SIZEOF_FAST_FLOAT
	dec	rcx
	jnz	short .convloop

	pop	rbx
	uncollect_args
	pop	rbp
	ret


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

; r10 = JCOEFPTR coef_block
; r11 = FAST_FLOAT * divisors
; r12 = FAST_FLOAT * workspace

	align	16
	global	EXTN(jsimd_quantize_float_sse2) PRIVATE

EXTN(jsimd_quantize_float_sse2):
	push	rbp
	mov	rax,rsp
	mov	rbp,rsp
	collect_args

	mov rsi, r12
	mov rdx, r11
	mov rdi, r10
	mov	rax, DCTSIZE2/16
.quantloop:
	movaps	xmm0, XMMWORD [XMMBLOCK(0,0,rsi,SIZEOF_FAST_FLOAT)]
	movaps	xmm1, XMMWORD [XMMBLOCK(0,1,rsi,SIZEOF_FAST_FLOAT)]
	mulps	xmm0, XMMWORD [XMMBLOCK(0,0,rdx,SIZEOF_FAST_FLOAT)]
	mulps	xmm1, XMMWORD [XMMBLOCK(0,1,rdx,SIZEOF_FAST_FLOAT)]
	movaps	xmm2, XMMWORD [XMMBLOCK(1,0,rsi,SIZEOF_FAST_FLOAT)]
	movaps	xmm3, XMMWORD [XMMBLOCK(1,1,rsi,SIZEOF_FAST_FLOAT)]
	mulps	xmm2, XMMWORD [XMMBLOCK(1,0,rdx,SIZEOF_FAST_FLOAT)]
	mulps	xmm3, XMMWORD [XMMBLOCK(1,1,rdx,SIZEOF_FAST_FLOAT)]

	cvtps2dq xmm0,xmm0
	cvtps2dq xmm1,xmm1
	cvtps2dq xmm2,xmm2
	cvtps2dq xmm3,xmm3

	packssdw xmm0,xmm1
	packssdw xmm2,xmm3

	movdqa	XMMWORD [XMMBLOCK(0,0,rdi,SIZEOF_JCOEF)], xmm0
	movdqa	XMMWORD [XMMBLOCK(1,0,rdi,SIZEOF_JCOEF)], xmm2

	add	rsi, byte 16*SIZEOF_FAST_FLOAT
	add	rdx, byte 16*SIZEOF_FAST_FLOAT
	add	rdi, byte 16*SIZEOF_JCOEF
	dec	rax
	jnz	short .quantloop

	uncollect_args
	pop	rbp
	ret

; For some reason, the OS X linker does not honor the request to align the
; segment unless we do this.
	align	16
