;
; jimmxint.asm - accurate 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 slow-but-accurate integer implementation of the
; inverse DCT (Discrete Cosine Transform). The following code is based
; directly on the IJG's original jidctint.c; see the jidctint.c for
; more details.
;
; [TAB8]

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

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

%define CONST_BITS	13
%define PASS1_BITS	2

%define DESCALE_P1	(CONST_BITS-PASS1_BITS)
%define DESCALE_P2	(CONST_BITS+PASS1_BITS+3)

%if CONST_BITS == 13
F_0_298	equ	 2446		; FIX(0.298631336)
F_0_390	equ	 3196		; FIX(0.390180644)
F_0_541	equ	 4433		; FIX(0.541196100)
F_0_765	equ	 6270		; FIX(0.765366865)
F_0_899	equ	 7373		; FIX(0.899976223)
F_1_175	equ	 9633		; FIX(1.175875602)
F_1_501	equ	12299		; FIX(1.501321110)
F_1_847	equ	15137		; FIX(1.847759065)
F_1_961	equ	16069		; FIX(1.961570560)
F_2_053	equ	16819		; FIX(2.053119869)
F_2_562	equ	20995		; FIX(2.562915447)
F_3_072	equ	25172		; FIX(3.072711026)
%else
; NASM cannot do compile-time arithmetic on floating-point constants.
%define DESCALE(x,n)  (((x)+(1<<((n)-1)))>>(n))
F_0_298	equ	DESCALE( 320652955,30-CONST_BITS)	; FIX(0.298631336)
F_0_390	equ	DESCALE( 418953276,30-CONST_BITS)	; FIX(0.390180644)
F_0_541	equ	DESCALE( 581104887,30-CONST_BITS)	; FIX(0.541196100)
F_0_765	equ	DESCALE( 821806413,30-CONST_BITS)	; FIX(0.765366865)
F_0_899	equ	DESCALE( 966342111,30-CONST_BITS)	; FIX(0.899976223)
F_1_175	equ	DESCALE(1262586813,30-CONST_BITS)	; FIX(1.175875602)
F_1_501	equ	DESCALE(1612031267,30-CONST_BITS)	; FIX(1.501321110)
F_1_847	equ	DESCALE(1984016188,30-CONST_BITS)	; FIX(1.847759065)
F_1_961	equ	DESCALE(2106220350,30-CONST_BITS)	; FIX(1.961570560)
F_2_053	equ	DESCALE(2204520673,30-CONST_BITS)	; FIX(2.053119869)
F_2_562	equ	DESCALE(2751909506,30-CONST_BITS)	; FIX(2.562915447)
F_3_072	equ	DESCALE(3299298341,30-CONST_BITS)	; FIX(3.072711026)
%endif

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

	alignz	16
	global	EXTN(jconst_idct_islow_mmx) PRIVATE

EXTN(jconst_idct_islow_mmx):

PW_F130_F054	times 2 dw  (F_0_541+F_0_765), F_0_541
PW_F054_MF130	times 2 dw  F_0_541, (F_0_541-F_1_847)
PW_MF078_F117	times 2 dw  (F_1_175-F_1_961), F_1_175
PW_F117_F078	times 2 dw  F_1_175, (F_1_175-F_0_390)
PW_MF060_MF089	times 2 dw  (F_0_298-F_0_899),-F_0_899
PW_MF089_F060	times 2 dw -F_0_899, (F_1_501-F_0_899)
PW_MF050_MF256	times 2 dw  (F_2_053-F_2_562),-F_2_562
PW_MF256_F050	times 2 dw -F_2_562, (F_3_072-F_2_562)
PD_DESCALE_P1	times 2 dd  1 << (DESCALE_P1-1)
PD_DESCALE_P2	times 2 dd  1 << (DESCALE_P2-1)
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_islow_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		12
%define workspace	wk(0)-DCTSIZE2*SIZEOF_JCOEF
					; JCOEF workspace[DCTSIZE2]

	align	16
	global	EXTN(jsimd_idct_islow_mmx) PRIVATE

EXTN(jsimd_idct_islow_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_ISLOW_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_ISLOW_MULT_TYPE)]

	psllw	mm0,PASS1_BITS

	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_ISLOW_MULT_TYPE)]
	pmullw	mm1, MMWORD [MMBLOCK(2,0,edx,SIZEOF_ISLOW_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_ISLOW_MULT_TYPE)]
	pmullw	mm3, MMWORD [MMBLOCK(6,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

	; (Original)
	; z1 = (z2 + z3) * 0.541196100;
	; tmp2 = z1 + z3 * -1.847759065;
	; tmp3 = z1 + z2 * 0.765366865;
	;
	; (This implementation)
	; tmp2 = z2 * 0.541196100 + z3 * (0.541196100 - 1.847759065);
	; tmp3 = z2 * (0.541196100 + 0.765366865) + z3 * 0.541196100;

	movq      mm4,mm1		; mm1=in2=z2
	movq      mm5,mm1
	punpcklwd mm4,mm3		; mm3=in6=z3
	punpckhwd mm5,mm3
	movq      mm1,mm4
	movq      mm3,mm5
	pmaddwd   mm4,[GOTOFF(ebx,PW_F130_F054)]	; mm4=tmp3L
	pmaddwd   mm5,[GOTOFF(ebx,PW_F130_F054)]	; mm5=tmp3H
	pmaddwd   mm1,[GOTOFF(ebx,PW_F054_MF130)]	; mm1=tmp2L
	pmaddwd   mm3,[GOTOFF(ebx,PW_F054_MF130)]	; mm3=tmp2H

	movq      mm6,mm0
	paddw     mm0,mm2		; mm0=in0+in4
	psubw     mm6,mm2		; mm6=in0-in4

	pxor      mm7,mm7
	pxor      mm2,mm2
	punpcklwd mm7,mm0		; mm7=tmp0L
	punpckhwd mm2,mm0		; mm2=tmp0H
	psrad     mm7,(16-CONST_BITS)	; psrad mm7,16 & pslld mm7,CONST_BITS
	psrad     mm2,(16-CONST_BITS)	; psrad mm2,16 & pslld mm2,CONST_BITS

	movq	mm0,mm7
	paddd	mm7,mm4			; mm7=tmp10L
	psubd	mm0,mm4			; mm0=tmp13L
	movq	mm4,mm2
	paddd	mm2,mm5			; mm2=tmp10H
	psubd	mm4,mm5			; mm4=tmp13H

	movq	MMWORD [wk(0)], mm7	; wk(0)=tmp10L
	movq	MMWORD [wk(1)], mm2	; wk(1)=tmp10H
	movq	MMWORD [wk(2)], mm0	; wk(2)=tmp13L
	movq	MMWORD [wk(3)], mm4	; wk(3)=tmp13H

	pxor      mm5,mm5
	pxor      mm7,mm7
	punpcklwd mm5,mm6		; mm5=tmp1L
	punpckhwd mm7,mm6		; mm7=tmp1H
	psrad     mm5,(16-CONST_BITS)	; psrad mm5,16 & pslld mm5,CONST_BITS
	psrad     mm7,(16-CONST_BITS)	; psrad mm7,16 & pslld mm7,CONST_BITS

	movq	mm2,mm5
	paddd	mm5,mm1			; mm5=tmp11L
	psubd	mm2,mm1			; mm2=tmp12L
	movq	mm0,mm7
	paddd	mm7,mm3			; mm7=tmp11H
	psubd	mm0,mm3			; mm0=tmp12H

	movq	MMWORD [wk(4)], mm5	; wk(4)=tmp11L
	movq	MMWORD [wk(5)], mm7	; wk(5)=tmp11H
	movq	MMWORD [wk(6)], mm2	; wk(6)=tmp12L
	movq	MMWORD [wk(7)], mm0	; wk(7)=tmp12H

	; -- Odd part

	movq	mm4, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
	movq	mm6, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
	pmullw	mm4, MMWORD [MMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
	pmullw	mm6, MMWORD [MMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
	movq	mm1, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
	movq	mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
	pmullw	mm1, MMWORD [MMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
	pmullw	mm3, MMWORD [MMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]

	movq	mm5,mm6
	movq	mm7,mm4
	paddw	mm5,mm3			; mm5=z3
	paddw	mm7,mm1			; mm7=z4

	; (Original)
	; z5 = (z3 + z4) * 1.175875602;
	; z3 = z3 * -1.961570560;  z4 = z4 * -0.390180644;
	; z3 += z5;  z4 += z5;
	;
	; (This implementation)
	; z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602;
	; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);

	movq      mm2,mm5
	movq      mm0,mm5
	punpcklwd mm2,mm7
	punpckhwd mm0,mm7
	movq      mm5,mm2
	movq      mm7,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF078_F117)]	; mm2=z3L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF078_F117)]	; mm0=z3H
	pmaddwd   mm5,[GOTOFF(ebx,PW_F117_F078)]	; mm5=z4L
	pmaddwd   mm7,[GOTOFF(ebx,PW_F117_F078)]	; mm7=z4H

	movq	MMWORD [wk(10)], mm2	; wk(10)=z3L
	movq	MMWORD [wk(11)], mm0	; wk(11)=z3H

	; (Original)
	; z1 = tmp0 + tmp3;  z2 = tmp1 + tmp2;
	; tmp0 = tmp0 * 0.298631336;  tmp1 = tmp1 * 2.053119869;
	; tmp2 = tmp2 * 3.072711026;  tmp3 = tmp3 * 1.501321110;
	; z1 = z1 * -0.899976223;  z2 = z2 * -2.562915447;
	; tmp0 += z1 + z3;  tmp1 += z2 + z4;
	; tmp2 += z2 + z3;  tmp3 += z1 + z4;
	;
	; (This implementation)
	; tmp0 = tmp0 * (0.298631336 - 0.899976223) + tmp3 * -0.899976223;
	; tmp1 = tmp1 * (2.053119869 - 2.562915447) + tmp2 * -2.562915447;
	; tmp2 = tmp1 * -2.562915447 + tmp2 * (3.072711026 - 2.562915447);
	; tmp3 = tmp0 * -0.899976223 + tmp3 * (1.501321110 - 0.899976223);
	; tmp0 += z3;  tmp1 += z4;
	; tmp2 += z3;  tmp3 += z4;

	movq      mm2,mm3
	movq      mm0,mm3
	punpcklwd mm2,mm4
	punpckhwd mm0,mm4
	movq      mm3,mm2
	movq      mm4,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF060_MF089)]	; mm2=tmp0L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF060_MF089)]	; mm0=tmp0H
	pmaddwd   mm3,[GOTOFF(ebx,PW_MF089_F060)]	; mm3=tmp3L
	pmaddwd   mm4,[GOTOFF(ebx,PW_MF089_F060)]	; mm4=tmp3H

	paddd	mm2, MMWORD [wk(10)]	; mm2=tmp0L
	paddd	mm0, MMWORD [wk(11)]	; mm0=tmp0H
	paddd	mm3,mm5			; mm3=tmp3L
	paddd	mm4,mm7			; mm4=tmp3H

	movq	MMWORD [wk(8)], mm2	; wk(8)=tmp0L
	movq	MMWORD [wk(9)], mm0	; wk(9)=tmp0H

	movq      mm2,mm1
	movq      mm0,mm1
	punpcklwd mm2,mm6
	punpckhwd mm0,mm6
	movq      mm1,mm2
	movq      mm6,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF050_MF256)]	; mm2=tmp1L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF050_MF256)]	; mm0=tmp1H
	pmaddwd   mm1,[GOTOFF(ebx,PW_MF256_F050)]	; mm1=tmp2L
	pmaddwd   mm6,[GOTOFF(ebx,PW_MF256_F050)]	; mm6=tmp2H

	paddd	mm2,mm5			; mm2=tmp1L
	paddd	mm0,mm7			; mm0=tmp1H
	paddd	mm1, MMWORD [wk(10)]	; mm1=tmp2L
	paddd	mm6, MMWORD [wk(11)]	; mm6=tmp2H

	movq	MMWORD [wk(10)], mm2	; wk(10)=tmp1L
	movq	MMWORD [wk(11)], mm0	; wk(11)=tmp1H

	; -- Final output stage

	movq	mm5, MMWORD [wk(0)]	; mm5=tmp10L
	movq	mm7, MMWORD [wk(1)]	; mm7=tmp10H

	movq	mm2,mm5
	movq	mm0,mm7
	paddd	mm5,mm3			; mm5=data0L
	paddd	mm7,mm4			; mm7=data0H
	psubd	mm2,mm3			; mm2=data7L
	psubd	mm0,mm4			; mm0=data7H

	movq	mm3,[GOTOFF(ebx,PD_DESCALE_P1)]	; mm3=[PD_DESCALE_P1]

	paddd	mm5,mm3
	paddd	mm7,mm3
	psrad	mm5,DESCALE_P1
	psrad	mm7,DESCALE_P1
	paddd	mm2,mm3
	paddd	mm0,mm3
	psrad	mm2,DESCALE_P1
	psrad	mm0,DESCALE_P1

	packssdw  mm5,mm7		; mm5=data0=(00 01 02 03)
	packssdw  mm2,mm0		; mm2=data7=(70 71 72 73)

	movq	mm4, MMWORD [wk(4)]	; mm4=tmp11L
	movq	mm3, MMWORD [wk(5)]	; mm3=tmp11H

	movq	mm7,mm4
	movq	mm0,mm3
	paddd	mm4,mm1			; mm4=data1L
	paddd	mm3,mm6			; mm3=data1H
	psubd	mm7,mm1			; mm7=data6L
	psubd	mm0,mm6			; mm0=data6H

	movq	mm1,[GOTOFF(ebx,PD_DESCALE_P1)]	; mm1=[PD_DESCALE_P1]

	paddd	mm4,mm1
	paddd	mm3,mm1
	psrad	mm4,DESCALE_P1
	psrad	mm3,DESCALE_P1
	paddd	mm7,mm1
	paddd	mm0,mm1
	psrad	mm7,DESCALE_P1
	psrad	mm0,DESCALE_P1

	packssdw  mm4,mm3		; mm4=data1=(10 11 12 13)
	packssdw  mm7,mm0		; mm7=data6=(60 61 62 63)

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

	movq	mm3, MMWORD [wk(6)]	; mm3=tmp12L
	movq	mm0, MMWORD [wk(7)]	; mm0=tmp12H
	movq	mm4, MMWORD [wk(10)]	; mm4=tmp1L
	movq	mm2, MMWORD [wk(11)]	; mm2=tmp1H

	movq	MMWORD [wk(0)], mm5	; wk(0)=(00 10 01 11)
	movq	MMWORD [wk(1)], mm6	; wk(1)=(02 12 03 13)
	movq	MMWORD [wk(4)], mm7	; wk(4)=(60 70 61 71)
	movq	MMWORD [wk(5)], mm1	; wk(5)=(62 72 63 73)

	movq	mm5,mm3
	movq	mm6,mm0
	paddd	mm3,mm4			; mm3=data2L
	paddd	mm0,mm2			; mm0=data2H
	psubd	mm5,mm4			; mm5=data5L
	psubd	mm6,mm2			; mm6=data5H

	movq	mm7,[GOTOFF(ebx,PD_DESCALE_P1)]	; mm7=[PD_DESCALE_P1]

	paddd	mm3,mm7
	paddd	mm0,mm7
	psrad	mm3,DESCALE_P1
	psrad	mm0,DESCALE_P1
	paddd	mm5,mm7
	paddd	mm6,mm7
	psrad	mm5,DESCALE_P1
	psrad	mm6,DESCALE_P1

	packssdw  mm3,mm0		; mm3=data2=(20 21 22 23)
	packssdw  mm5,mm6		; mm5=data5=(50 51 52 53)

	movq	mm1, MMWORD [wk(2)]	; mm1=tmp13L
	movq	mm4, MMWORD [wk(3)]	; mm4=tmp13H
	movq	mm2, MMWORD [wk(8)]	; mm2=tmp0L
	movq	mm7, MMWORD [wk(9)]	; mm7=tmp0H

	movq	mm0,mm1
	movq	mm6,mm4
	paddd	mm1,mm2			; mm1=data3L
	paddd	mm4,mm7			; mm4=data3H
	psubd	mm0,mm2			; mm0=data4L
	psubd	mm6,mm7			; mm6=data4H

	movq	mm2,[GOTOFF(ebx,PD_DESCALE_P1)]	; mm2=[PD_DESCALE_P1]

	paddd	mm1,mm2
	paddd	mm4,mm2
	psrad	mm1,DESCALE_P1
	psrad	mm4,DESCALE_P1
	paddd	mm0,mm2
	paddd	mm6,mm2
	psrad	mm0,DESCALE_P1
	psrad	mm6,DESCALE_P1

	packssdw  mm1,mm4		; mm1=data3=(30 31 32 33)
	packssdw  mm0,mm6		; mm0=data4=(40 41 42 43)

	movq	mm7, MMWORD [wk(0)]	; mm7=(00 10 01 11)
	movq	mm2, MMWORD [wk(1)]	; mm2=(02 12 03 13)

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

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

	movq	mm3, MMWORD [wk(4)]	; mm3=(60 70 61 71)
	movq	mm4, MMWORD [wk(5)]	; mm4=(62 72 63 73)

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

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

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

.nextcolumn:
	add	esi, byte 4*SIZEOF_JCOEF		; coef_block
	add	edx, byte 4*SIZEOF_ISLOW_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)]

	; (Original)
	; z1 = (z2 + z3) * 0.541196100;
	; tmp2 = z1 + z3 * -1.847759065;
	; tmp3 = z1 + z2 * 0.765366865;
	;
	; (This implementation)
	; tmp2 = z2 * 0.541196100 + z3 * (0.541196100 - 1.847759065);
	; tmp3 = z2 * (0.541196100 + 0.765366865) + z3 * 0.541196100;

	movq      mm4,mm1		; mm1=in2=z2
	movq      mm5,mm1
	punpcklwd mm4,mm3		; mm3=in6=z3
	punpckhwd mm5,mm3
	movq      mm1,mm4
	movq      mm3,mm5
	pmaddwd   mm4,[GOTOFF(ebx,PW_F130_F054)]	; mm4=tmp3L
	pmaddwd   mm5,[GOTOFF(ebx,PW_F130_F054)]	; mm5=tmp3H
	pmaddwd   mm1,[GOTOFF(ebx,PW_F054_MF130)]	; mm1=tmp2L
	pmaddwd   mm3,[GOTOFF(ebx,PW_F054_MF130)]	; mm3=tmp2H

	movq      mm6,mm0
	paddw     mm0,mm2		; mm0=in0+in4
	psubw     mm6,mm2		; mm6=in0-in4

	pxor      mm7,mm7
	pxor      mm2,mm2
	punpcklwd mm7,mm0		; mm7=tmp0L
	punpckhwd mm2,mm0		; mm2=tmp0H
	psrad     mm7,(16-CONST_BITS)	; psrad mm7,16 & pslld mm7,CONST_BITS
	psrad     mm2,(16-CONST_BITS)	; psrad mm2,16 & pslld mm2,CONST_BITS

	movq	mm0,mm7
	paddd	mm7,mm4			; mm7=tmp10L
	psubd	mm0,mm4			; mm0=tmp13L
	movq	mm4,mm2
	paddd	mm2,mm5			; mm2=tmp10H
	psubd	mm4,mm5			; mm4=tmp13H

	movq	MMWORD [wk(0)], mm7	; wk(0)=tmp10L
	movq	MMWORD [wk(1)], mm2	; wk(1)=tmp10H
	movq	MMWORD [wk(2)], mm0	; wk(2)=tmp13L
	movq	MMWORD [wk(3)], mm4	; wk(3)=tmp13H

	pxor      mm5,mm5
	pxor      mm7,mm7
	punpcklwd mm5,mm6		; mm5=tmp1L
	punpckhwd mm7,mm6		; mm7=tmp1H
	psrad     mm5,(16-CONST_BITS)	; psrad mm5,16 & pslld mm5,CONST_BITS
	psrad     mm7,(16-CONST_BITS)	; psrad mm7,16 & pslld mm7,CONST_BITS

	movq	mm2,mm5
	paddd	mm5,mm1			; mm5=tmp11L
	psubd	mm2,mm1			; mm2=tmp12L
	movq	mm0,mm7
	paddd	mm7,mm3			; mm7=tmp11H
	psubd	mm0,mm3			; mm0=tmp12H

	movq	MMWORD [wk(4)], mm5	; wk(4)=tmp11L
	movq	MMWORD [wk(5)], mm7	; wk(5)=tmp11H
	movq	MMWORD [wk(6)], mm2	; wk(6)=tmp12L
	movq	MMWORD [wk(7)], mm0	; wk(7)=tmp12H

	; -- Odd part

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

	movq	mm5,mm6
	movq	mm7,mm4
	paddw	mm5,mm3			; mm5=z3
	paddw	mm7,mm1			; mm7=z4

	; (Original)
	; z5 = (z3 + z4) * 1.175875602;
	; z3 = z3 * -1.961570560;  z4 = z4 * -0.390180644;
	; z3 += z5;  z4 += z5;
	;
	; (This implementation)
	; z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602;
	; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);

	movq      mm2,mm5
	movq      mm0,mm5
	punpcklwd mm2,mm7
	punpckhwd mm0,mm7
	movq      mm5,mm2
	movq      mm7,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF078_F117)]	; mm2=z3L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF078_F117)]	; mm0=z3H
	pmaddwd   mm5,[GOTOFF(ebx,PW_F117_F078)]	; mm5=z4L
	pmaddwd   mm7,[GOTOFF(ebx,PW_F117_F078)]	; mm7=z4H

	movq	MMWORD [wk(10)], mm2	; wk(10)=z3L
	movq	MMWORD [wk(11)], mm0	; wk(11)=z3H

	; (Original)
	; z1 = tmp0 + tmp3;  z2 = tmp1 + tmp2;
	; tmp0 = tmp0 * 0.298631336;  tmp1 = tmp1 * 2.053119869;
	; tmp2 = tmp2 * 3.072711026;  tmp3 = tmp3 * 1.501321110;
	; z1 = z1 * -0.899976223;  z2 = z2 * -2.562915447;
	; tmp0 += z1 + z3;  tmp1 += z2 + z4;
	; tmp2 += z2 + z3;  tmp3 += z1 + z4;
	;
	; (This implementation)
	; tmp0 = tmp0 * (0.298631336 - 0.899976223) + tmp3 * -0.899976223;
	; tmp1 = tmp1 * (2.053119869 - 2.562915447) + tmp2 * -2.562915447;
	; tmp2 = tmp1 * -2.562915447 + tmp2 * (3.072711026 - 2.562915447);
	; tmp3 = tmp0 * -0.899976223 + tmp3 * (1.501321110 - 0.899976223);
	; tmp0 += z3;  tmp1 += z4;
	; tmp2 += z3;  tmp3 += z4;

	movq      mm2,mm3
	movq      mm0,mm3
	punpcklwd mm2,mm4
	punpckhwd mm0,mm4
	movq      mm3,mm2
	movq      mm4,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF060_MF089)]	; mm2=tmp0L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF060_MF089)]	; mm0=tmp0H
	pmaddwd   mm3,[GOTOFF(ebx,PW_MF089_F060)]	; mm3=tmp3L
	pmaddwd   mm4,[GOTOFF(ebx,PW_MF089_F060)]	; mm4=tmp3H

	paddd	mm2, MMWORD [wk(10)]	; mm2=tmp0L
	paddd	mm0, MMWORD [wk(11)]	; mm0=tmp0H
	paddd	mm3,mm5			; mm3=tmp3L
	paddd	mm4,mm7			; mm4=tmp3H

	movq	MMWORD [wk(8)], mm2	; wk(8)=tmp0L
	movq	MMWORD [wk(9)], mm0	; wk(9)=tmp0H

	movq      mm2,mm1
	movq      mm0,mm1
	punpcklwd mm2,mm6
	punpckhwd mm0,mm6
	movq      mm1,mm2
	movq      mm6,mm0
	pmaddwd   mm2,[GOTOFF(ebx,PW_MF050_MF256)]	; mm2=tmp1L
	pmaddwd   mm0,[GOTOFF(ebx,PW_MF050_MF256)]	; mm0=tmp1H
	pmaddwd   mm1,[GOTOFF(ebx,PW_MF256_F050)]	; mm1=tmp2L
	pmaddwd   mm6,[GOTOFF(ebx,PW_MF256_F050)]	; mm6=tmp2H

	paddd	mm2,mm5			; mm2=tmp1L
	paddd	mm0,mm7			; mm0=tmp1H
	paddd	mm1, MMWORD [wk(10)]	; mm1=tmp2L
	paddd	mm6, MMWORD [wk(11)]	; mm6=tmp2H

	movq	MMWORD [wk(10)], mm2	; wk(10)=tmp1L
	movq	MMWORD [wk(11)], mm0	; wk(11)=tmp1H

	; -- Final output stage

	movq	mm5, MMWORD [wk(0)]	; mm5=tmp10L
	movq	mm7, MMWORD [wk(1)]	; mm7=tmp10H

	movq	mm2,mm5
	movq	mm0,mm7
	paddd	mm5,mm3			; mm5=data0L
	paddd	mm7,mm4			; mm7=data0H
	psubd	mm2,mm3			; mm2=data7L
	psubd	mm0,mm4			; mm0=data7H

	movq	mm3,[GOTOFF(ebx,PD_DESCALE_P2)]	; mm3=[PD_DESCALE_P2]

	paddd	mm5,mm3
	paddd	mm7,mm3
	psrad	mm5,DESCALE_P2
	psrad	mm7,DESCALE_P2
	paddd	mm2,mm3
	paddd	mm0,mm3
	psrad	mm2,DESCALE_P2
	psrad	mm0,DESCALE_P2

	packssdw  mm5,mm7		; mm5=data0=(00 10 20 30)
	packssdw  mm2,mm0		; mm2=data7=(07 17 27 37)

	movq	mm4, MMWORD [wk(4)]	; mm4=tmp11L
	movq	mm3, MMWORD [wk(5)]	; mm3=tmp11H

	movq	mm7,mm4
	movq	mm0,mm3
	paddd	mm4,mm1			; mm4=data1L
	paddd	mm3,mm6			; mm3=data1H
	psubd	mm7,mm1			; mm7=data6L
	psubd	mm0,mm6			; mm0=data6H

	movq	mm1,[GOTOFF(ebx,PD_DESCALE_P2)]	; mm1=[PD_DESCALE_P2]

	paddd	mm4,mm1
	paddd	mm3,mm1
	psrad	mm4,DESCALE_P2
	psrad	mm3,DESCALE_P2
	paddd	mm7,mm1
	paddd	mm0,mm1
	psrad	mm7,DESCALE_P2
	psrad	mm0,DESCALE_P2

	packssdw  mm4,mm3		; mm4=data1=(01 11 21 31)
	packssdw  mm7,mm0		; mm7=data6=(06 16 26 36)

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

	movq	mm6, MMWORD [wk(6)]	; mm6=tmp12L
	movq	mm1, MMWORD [wk(7)]	; mm1=tmp12H
	movq	mm3, MMWORD [wk(10)]	; mm3=tmp1L
	movq	mm0, MMWORD [wk(11)]	; mm0=tmp1H

	movq	MMWORD [wk(0)], mm5	; wk(0)=(00 10 20 30 06 16 26 36)
	movq	MMWORD [wk(1)], mm4	; wk(1)=(01 11 21 31 07 17 27 37)

	movq	mm7,mm6
	movq	mm2,mm1
	paddd	mm6,mm3			; mm6=data2L
	paddd	mm1,mm0			; mm1=data2H
	psubd	mm7,mm3			; mm7=data5L
	psubd	mm2,mm0			; mm2=data5H

	movq	mm5,[GOTOFF(ebx,PD_DESCALE_P2)]	; mm5=[PD_DESCALE_P2]

	paddd	mm6,mm5
	paddd	mm1,mm5
	psrad	mm6,DESCALE_P2
	psrad	mm1,DESCALE_P2
	paddd	mm7,mm5
	paddd	mm2,mm5
	psrad	mm7,DESCALE_P2
	psrad	mm2,DESCALE_P2

	packssdw  mm6,mm1		; mm6=data2=(02 12 22 32)
	packssdw  mm7,mm2		; mm7=data5=(05 15 25 35)

	movq	mm4, MMWORD [wk(2)]	; mm4=tmp13L
	movq	mm3, MMWORD [wk(3)]	; mm3=tmp13H
	movq	mm0, MMWORD [wk(8)]	; mm0=tmp0L
	movq	mm5, MMWORD [wk(9)]	; mm5=tmp0H

	movq	mm1,mm4
	movq	mm2,mm3
	paddd	mm4,mm0			; mm4=data3L
	paddd	mm3,mm5			; mm3=data3H
	psubd	mm1,mm0			; mm1=data4L
	psubd	mm2,mm5			; mm2=data4H

	movq	mm0,[GOTOFF(ebx,PD_DESCALE_P2)]	; mm0=[PD_DESCALE_P2]

	paddd	mm4,mm0
	paddd	mm3,mm0
	psrad	mm4,DESCALE_P2
	psrad	mm3,DESCALE_P2
	paddd	mm1,mm0
	paddd	mm2,mm0
	psrad	mm1,DESCALE_P2
	psrad	mm2,DESCALE_P2

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

	packssdw  mm4,mm3		; mm4=data3=(03 13 23 33)
	packssdw  mm1,mm2		; mm1=data4=(04 14 24 34)

	movq      mm0, MMWORD [wk(0)]	; mm0=(00 10 20 30 06 16 26 36)
	movq      mm3, MMWORD [wk(1)]	; mm3=(01 11 21 31 07 17 27 37)

	packsswb  mm6,mm1		; mm6=(02 12 22 32 04 14 24 34)
	packsswb  mm4,mm7		; mm4=(03 13 23 33 05 15 25 35)

	paddb     mm0,mm5
	paddb     mm3,mm5
	paddb     mm6,mm5
	paddb     mm4,mm5

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

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

	movq      mm3,mm0		; transpose coefficients(phase 3)
	punpckldq mm0,mm1		; mm0=(00 01 02 03 04 05 06 07)
	punpckhdq mm3,mm1		; mm3=(10 11 12 13 14 15 16 17)
	movq      mm4,mm7		; transpose coefficients(phase 3)
	punpckldq mm7,mm5		; mm7=(20 21 22 23 24 25 26 27)
	punpckhdq mm4,mm5		; mm4=(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], mm0
	movq	MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm3
	mov	edx, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
	mov	ebx, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
	movq	MMWORD [edx+eax*SIZEOF_JSAMPLE], mm7
	movq	MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm4

	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
