;
; jimmxfst.asm - fast integer IDCT (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
;
; This file contains a fast, not so accurate integer implementation of
; the inverse DCT (Discrete Cosine Transform). The following code is
; based directly on the IJG's original jidctfst.c; see the jidctfst.c
; for more details.
;
; [TAB8]

%include "jsimdext.inc"
%include "jdct.inc"

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

%define CONST_BITS	8	; 14 is also OK.
%define PASS1_BITS	2

%if IFAST_SCALE_BITS != PASS1_BITS
%error "'IFAST_SCALE_BITS' must be equal to 'PASS1_BITS'."
%endif

%if CONST_BITS == 8
F_1_082	equ	277		; FIX(1.082392200)
F_1_414	equ	362		; FIX(1.414213562)
F_1_847	equ	473		; FIX(1.847759065)
F_2_613	equ	669		; FIX(2.613125930)
F_1_613	equ	(F_2_613 - 256)	; FIX(2.613125930) - FIX(1)
%else
; NASM cannot do compile-time arithmetic on floating-point constants.
%define	DESCALE(x,n)  (((x)+(1<<((n)-1)))>>(n))
F_1_082	equ	DESCALE(1162209775,30-CONST_BITS)	; FIX(1.082392200)
F_1_414	equ	DESCALE(1518500249,30-CONST_BITS)	; FIX(1.414213562)
F_1_847	equ	DESCALE(1984016188,30-CONST_BITS)	; FIX(1.847759065)
F_2_613	equ	DESCALE(2805822602,30-CONST_BITS)	; FIX(2.613125930)
F_1_613	equ	(F_2_613 - (1 << CONST_BITS))	; FIX(2.613125930) - FIX(1)
%endif

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

; PRE_MULTIPLY_SCALE_BITS <= 2 (to avoid overflow)
; CONST_BITS + CONST_SHIFT + PRE_MULTIPLY_SCALE_BITS == 16 (for pmulhw)

%define PRE_MULTIPLY_SCALE_BITS   2
%define CONST_SHIFT     (16 - PRE_MULTIPLY_SCALE_BITS - CONST_BITS)

	alignz	16
	global	EXTN(jconst_idct_ifast_mmx) PRIVATE

EXTN(jconst_idct_ifast_mmx):

PW_F1414	times 4 dw  F_1_414 << CONST_SHIFT
PW_F1847	times 4 dw  F_1_847 << CONST_SHIFT
PW_MF1613	times 4 dw -F_1_613 << CONST_SHIFT
PW_F1082	times 4 dw  F_1_082 << CONST_SHIFT
PB_CENTERJSAMP	times 8 db  CENTERJSAMPLE

	alignz	16

; --------------------------------------------------------------------------
	SECTION	SEG_TEXT
	BITS	32
;
; Perform dequantization and inverse DCT on one block of coefficients.
;
; GLOBAL(void)
; jsimd_idct_ifast_mmx (void * dct_table, JCOEFPTR coef_block,
;                       JSAMPARRAY output_buf, JDIMENSION output_col)
;

%define dct_table(b)	(b)+8			; jpeg_component_info * compptr
%define coef_block(b)	(b)+12		; JCOEFPTR coef_block
%define output_buf(b)	(b)+16		; JSAMPARRAY output_buf
%define output_col(b)	(b)+20		; JDIMENSION output_col

%define original_ebp	ebp+0
%define wk(i)		ebp-(WK_NUM-(i))*SIZEOF_MMWORD	; mmword wk[WK_NUM]
%define WK_NUM		2
%define workspace	wk(0)-DCTSIZE2*SIZEOF_JCOEF
					; JCOEF workspace[DCTSIZE2]

	align	16
	global	EXTN(jsimd_idct_ifast_mmx) PRIVATE

EXTN(jsimd_idct_ifast_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, [workspace]
	push	ebx
;	push	ecx		; need not be preserved
;	push	edx		; need not be preserved
	push	esi
	push	edi

	get_GOT	ebx		; get GOT address

	; ---- Pass 1: process columns from input, store into work array.

;	mov	eax, [original_ebp]
	mov	edx, POINTER [dct_table(eax)]	; quantptr
	mov	esi, JCOEFPTR [coef_block(eax)]		; inptr
	lea	edi, [workspace]			; JCOEF * wsptr
	mov	ecx, DCTSIZE/4				; ctr
	alignx	16,7
.columnloop:
%ifndef NO_ZERO_COLUMN_TEST_IFAST_MMX
	mov	eax, DWORD [DWBLOCK(1,0,esi,SIZEOF_JCOEF)]
	or	eax, DWORD [DWBLOCK(2,0,esi,SIZEOF_JCOEF)]
	jnz	short .columnDCT

	movq	mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
	movq	mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
	por	mm0, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
	por	mm1, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
	por	mm0, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
	por	mm1, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
	por	mm0, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
	por	mm1,mm0
	packsswb mm1,mm1
	movd	eax,mm1
	test	eax,eax
	jnz	short .columnDCT

	; -- AC terms all zero

	movq	mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
	pmullw	mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_IFAST_MULT_TYPE)]

	movq      mm2,mm0		; mm0=in0=(00 01 02 03)
	punpcklwd mm0,mm0		; mm0=(00 00 01 01)
	punpckhwd mm2,mm2		; mm2=(02 02 03 03)

	movq      mm1,mm0
	punpckldq mm0,mm0		; mm0=(00 00 00 00)
	punpckhdq mm1,mm1		; mm1=(01 01 01 01)
	movq      mm3,mm2
	punpckldq mm2,mm2		; mm2=(02 02 02 02)
	punpckhdq mm3,mm3		; mm3=(03 03 03 03)

	movq	MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm0
	movq	MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm0
	movq	MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm1
	movq	MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm1
	movq	MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm2
	movq	MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm2
	movq	MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm3
	movq	MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm3
	jmp	near .nextcolumn
	alignx	16,7
%endif
.columnDCT:

	; -- Even part

	movq	mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
	movq	mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
	pmullw	mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	pmullw	mm1, MMWORD [MMBLOCK(2,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	movq	mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
	movq	mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
	pmullw	mm2, MMWORD [MMBLOCK(4,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	pmullw	mm3, MMWORD [MMBLOCK(6,0,edx,SIZEOF_IFAST_MULT_TYPE)]

	movq	mm4,mm0
	movq	mm5,mm1
	psubw	mm0,mm2			; mm0=tmp11
	psubw	mm1,mm3
	paddw	mm4,mm2			; mm4=tmp10
	paddw	mm5,mm3			; mm5=tmp13

	psllw	mm1,PRE_MULTIPLY_SCALE_BITS
	pmulhw	mm1,[GOTOFF(ebx,PW_F1414)]
	psubw	mm1,mm5			; mm1=tmp12

	movq	mm6,mm4
	movq	mm7,mm0
	psubw	mm4,mm5			; mm4=tmp3
	psubw	mm0,mm1			; mm0=tmp2
	paddw	mm6,mm5			; mm6=tmp0
	paddw	mm7,mm1			; mm7=tmp1

	movq	MMWORD [wk(1)], mm4	; wk(1)=tmp3
	movq	MMWORD [wk(0)], mm0	; wk(0)=tmp2

	; -- Odd part

	movq	mm2, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
	movq	mm3, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
	pmullw	mm2, MMWORD [MMBLOCK(1,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	pmullw	mm3, MMWORD [MMBLOCK(3,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	movq	mm5, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
	movq	mm1, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
	pmullw	mm5, MMWORD [MMBLOCK(5,0,edx,SIZEOF_IFAST_MULT_TYPE)]
	pmullw	mm1, MMWORD [MMBLOCK(7,0,edx,SIZEOF_IFAST_MULT_TYPE)]

	movq	mm4,mm2
	movq	mm0,mm5
	psubw	mm2,mm1			; mm2=z12
	psubw	mm5,mm3			; mm5=z10
	paddw	mm4,mm1			; mm4=z11
	paddw	mm0,mm3			; mm0=z13

	movq	mm1,mm5			; mm1=z10(unscaled)
	psllw	mm2,PRE_MULTIPLY_SCALE_BITS
	psllw	mm5,PRE_MULTIPLY_SCALE_BITS

	movq	mm3,mm4
	psubw	mm4,mm0
	paddw	mm3,mm0			; mm3=tmp7

	psllw	mm4,PRE_MULTIPLY_SCALE_BITS
	pmulhw	mm4,[GOTOFF(ebx,PW_F1414)]	; mm4=tmp11

	; To avoid overflow...
	;
	; (Original)
	; tmp12 = -2.613125930 * z10 + z5;
	;
	; (This implementation)
	; tmp12 = (-1.613125930 - 1) * z10 + z5;
	;       = -1.613125930 * z10 - z10 + z5;

	movq	mm0,mm5
	paddw	mm5,mm2
	pmulhw	mm5,[GOTOFF(ebx,PW_F1847)]	; mm5=z5
	pmulhw	mm0,[GOTOFF(ebx,PW_MF1613)]
	pmulhw	mm2,[GOTOFF(ebx,PW_F1082)]
	psubw	mm0,mm1
	psubw	mm2,mm5			; mm2=tmp10
	paddw	mm0,mm5			; mm0=tmp12

	; -- Final output stage

	psubw	mm0,mm3			; mm0=tmp6
	movq	mm1,mm6
	movq	mm5,mm7
	paddw	mm6,mm3			; mm6=data0=(00 01 02 03)
	paddw	mm7,mm0			; mm7=data1=(10 11 12 13)
	psubw	mm1,mm3			; mm1=data7=(70 71 72 73)
	psubw	mm5,mm0			; mm5=data6=(60 61 62 63)
	psubw	mm4,mm0			; mm4=tmp5

	movq      mm3,mm6		; transpose coefficients(phase 1)
	punpcklwd mm6,mm7		; mm6=(00 10 01 11)
	punpckhwd mm3,mm7		; mm3=(02 12 03 13)
	movq      mm0,mm5		; transpose coefficients(phase 1)
	punpcklwd mm5,mm1		; mm5=(60 70 61 71)
	punpckhwd mm0,mm1		; mm0=(62 72 63 73)

	movq	mm7, MMWORD [wk(0)]	; mm7=tmp2
	movq	mm1, MMWORD [wk(1)]	; mm1=tmp3

	movq	MMWORD [wk(0)], mm5	; wk(0)=(60 70 61 71)
	movq	MMWORD [wk(1)], mm0	; wk(1)=(62 72 63 73)

	paddw	mm2,mm4			; mm2=tmp4
	movq	mm5,mm7
	movq	mm0,mm1
	paddw	mm7,mm4			; mm7=data2=(20 21 22 23)
	paddw	mm1,mm2			; mm1=data4=(40 41 42 43)
	psubw	mm5,mm4			; mm5=data5=(50 51 52 53)
	psubw	mm0,mm2			; mm0=data3=(30 31 32 33)

	movq      mm4,mm7		; transpose coefficients(phase 1)
	punpcklwd mm7,mm0		; mm7=(20 30 21 31)
	punpckhwd mm4,mm0		; mm4=(22 32 23 33)
	movq      mm2,mm1		; transpose coefficients(phase 1)
	punpcklwd mm1,mm5		; mm1=(40 50 41 51)
	punpckhwd mm2,mm5		; mm2=(42 52 43 53)

	movq      mm0,mm6		; transpose coefficients(phase 2)
	punpckldq mm6,mm7		; mm6=(00 10 20 30)
	punpckhdq mm0,mm7		; mm0=(01 11 21 31)
	movq      mm5,mm3		; transpose coefficients(phase 2)
	punpckldq mm3,mm4		; mm3=(02 12 22 32)
	punpckhdq mm5,mm4		; mm5=(03 13 23 33)

	movq	mm7, MMWORD [wk(0)]	; mm7=(60 70 61 71)
	movq	mm4, MMWORD [wk(1)]	; mm4=(62 72 63 73)

	movq	MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm6
	movq	MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm0
	movq	MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm3
	movq	MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm5

	movq      mm6,mm1		; transpose coefficients(phase 2)
	punpckldq mm1,mm7		; mm1=(40 50 60 70)
	punpckhdq mm6,mm7		; mm6=(41 51 61 71)
	movq      mm0,mm2		; transpose coefficients(phase 2)
	punpckldq mm2,mm4		; mm2=(42 52 62 72)
	punpckhdq mm0,mm4		; mm0=(43 53 63 73)

	movq	MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm1
	movq	MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm6
	movq	MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm2
	movq	MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm0

.nextcolumn:
	add	esi, byte 4*SIZEOF_JCOEF		; coef_block
	add	edx, byte 4*SIZEOF_IFAST_MULT_TYPE	; quantptr
	add	edi, byte 4*DCTSIZE*SIZEOF_JCOEF	; wsptr
	dec	ecx					; ctr
	jnz	near .columnloop

	; ---- Pass 2: process rows from work array, store into output array.

	mov	eax, [original_ebp]
	lea	esi, [workspace]			; JCOEF * wsptr
	mov	edi, JSAMPARRAY [output_buf(eax)]	; (JSAMPROW *)
	mov	eax, JDIMENSION [output_col(eax)]
	mov	ecx, DCTSIZE/4				; ctr
	alignx	16,7
.rowloop:

	; -- Even part

	movq	mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
	movq	mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
	movq	mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
	movq	mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]

	movq	mm4,mm0
	movq	mm5,mm1
	psubw	mm0,mm2			; mm0=tmp11
	psubw	mm1,mm3
	paddw	mm4,mm2			; mm4=tmp10
	paddw	mm5,mm3			; mm5=tmp13

	psllw	mm1,PRE_MULTIPLY_SCALE_BITS
	pmulhw	mm1,[GOTOFF(ebx,PW_F1414)]
	psubw	mm1,mm5			; mm1=tmp12

	movq	mm6,mm4
	movq	mm7,mm0
	psubw	mm4,mm5			; mm4=tmp3
	psubw	mm0,mm1			; mm0=tmp2
	paddw	mm6,mm5			; mm6=tmp0
	paddw	mm7,mm1			; mm7=tmp1

	movq	MMWORD [wk(1)], mm4	; wk(1)=tmp3
	movq	MMWORD [wk(0)], mm0	; wk(0)=tmp2

	; -- Odd part

	movq	mm2, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
	movq	mm3, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
	movq	mm5, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
	movq	mm1, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]

	movq	mm4,mm2
	movq	mm0,mm5
	psubw	mm2,mm1			; mm2=z12
	psubw	mm5,mm3			; mm5=z10
	paddw	mm4,mm1			; mm4=z11
	paddw	mm0,mm3			; mm0=z13

	movq	mm1,mm5			; mm1=z10(unscaled)
	psllw	mm2,PRE_MULTIPLY_SCALE_BITS
	psllw	mm5,PRE_MULTIPLY_SCALE_BITS

	movq	mm3,mm4
	psubw	mm4,mm0
	paddw	mm3,mm0			; mm3=tmp7

	psllw	mm4,PRE_MULTIPLY_SCALE_BITS
	pmulhw	mm4,[GOTOFF(ebx,PW_F1414)]	; mm4=tmp11

	; To avoid overflow...
	;
	; (Original)
	; tmp12 = -2.613125930 * z10 + z5;
	;
	; (This implementation)
	; tmp12 = (-1.613125930 - 1) * z10 + z5;
	;       = -1.613125930 * z10 - z10 + z5;

	movq	mm0,mm5
	paddw	mm5,mm2
	pmulhw	mm5,[GOTOFF(ebx,PW_F1847)]	; mm5=z5
	pmulhw	mm0,[GOTOFF(ebx,PW_MF1613)]
	pmulhw	mm2,[GOTOFF(ebx,PW_F1082)]
	psubw	mm0,mm1
	psubw	mm2,mm5			; mm2=tmp10
	paddw	mm0,mm5			; mm0=tmp12

	; -- Final output stage

	psubw	mm0,mm3			; mm0=tmp6
	movq	mm1,mm6
	movq	mm5,mm7
	paddw	mm6,mm3			; mm6=data0=(00 10 20 30)
	paddw	mm7,mm0			; mm7=data1=(01 11 21 31)
	psraw	mm6,(PASS1_BITS+3)	; descale
	psraw	mm7,(PASS1_BITS+3)	; descale
	psubw	mm1,mm3			; mm1=data7=(07 17 27 37)
	psubw	mm5,mm0			; mm5=data6=(06 16 26 36)
	psraw	mm1,(PASS1_BITS+3)	; descale
	psraw	mm5,(PASS1_BITS+3)	; descale
	psubw	mm4,mm0			; mm4=tmp5

	packsswb  mm6,mm5		; mm6=(00 10 20 30 06 16 26 36)
	packsswb  mm7,mm1		; mm7=(01 11 21 31 07 17 27 37)

	movq	mm3, MMWORD [wk(0)]	; mm3=tmp2
	movq	mm0, MMWORD [wk(1)]	; mm0=tmp3

	paddw	mm2,mm4			; mm2=tmp4
	movq	mm5,mm3
	movq	mm1,mm0
	paddw	mm3,mm4			; mm3=data2=(02 12 22 32)
	paddw	mm0,mm2			; mm0=data4=(04 14 24 34)
	psraw	mm3,(PASS1_BITS+3)	; descale
	psraw	mm0,(PASS1_BITS+3)	; descale
	psubw	mm5,mm4			; mm5=data5=(05 15 25 35)
	psubw	mm1,mm2			; mm1=data3=(03 13 23 33)
	psraw	mm5,(PASS1_BITS+3)	; descale
	psraw	mm1,(PASS1_BITS+3)	; descale

	movq      mm4,[GOTOFF(ebx,PB_CENTERJSAMP)]	; mm4=[PB_CENTERJSAMP]

	packsswb  mm3,mm0		; mm3=(02 12 22 32 04 14 24 34)
	packsswb  mm1,mm5		; mm1=(03 13 23 33 05 15 25 35)

	paddb     mm6,mm4
	paddb     mm7,mm4
	paddb     mm3,mm4
	paddb     mm1,mm4

	movq      mm2,mm6		; transpose coefficients(phase 1)
	punpcklbw mm6,mm7		; mm6=(00 01 10 11 20 21 30 31)
	punpckhbw mm2,mm7		; mm2=(06 07 16 17 26 27 36 37)
	movq      mm0,mm3		; transpose coefficients(phase 1)
	punpcklbw mm3,mm1		; mm3=(02 03 12 13 22 23 32 33)
	punpckhbw mm0,mm1		; mm0=(04 05 14 15 24 25 34 35)

	movq      mm5,mm6		; transpose coefficients(phase 2)
	punpcklwd mm6,mm3		; mm6=(00 01 02 03 10 11 12 13)
	punpckhwd mm5,mm3		; mm5=(20 21 22 23 30 31 32 33)
	movq      mm4,mm0		; transpose coefficients(phase 2)
	punpcklwd mm0,mm2		; mm0=(04 05 06 07 14 15 16 17)
	punpckhwd mm4,mm2		; mm4=(24 25 26 27 34 35 36 37)

	movq      mm7,mm6		; transpose coefficients(phase 3)
	punpckldq mm6,mm0		; mm6=(00 01 02 03 04 05 06 07)
	punpckhdq mm7,mm0		; mm7=(10 11 12 13 14 15 16 17)
	movq      mm1,mm5		; transpose coefficients(phase 3)
	punpckldq mm5,mm4		; mm5=(20 21 22 23 24 25 26 27)
	punpckhdq mm1,mm4		; mm1=(30 31 32 33 34 35 36 37)

	pushpic	ebx			; save GOT address

	mov	edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
	mov	ebx, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
	movq	MMWORD [edx+eax*SIZEOF_JSAMPLE], mm6
	movq	MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm7
	mov	edx, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
	mov	ebx, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
	movq	MMWORD [edx+eax*SIZEOF_JSAMPLE], mm5
	movq	MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm1

	poppic	ebx			; restore GOT address

	add	esi, byte 4*SIZEOF_JCOEF	; wsptr
	add	edi, byte 4*SIZEOF_JSAMPROW
	dec	ecx				; ctr
	jnz	near .rowloop

	emms		; empty MMX state

	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
