;
; 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)

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)

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
