[FFmpeg-devel] [PATCH] M68K: Optimized MUL64/MULH/MULLfunctionsfor 68060

ami_stuff ami_stuff
Sun Aug 2 03:36:53 CEST 2009


> That's because you're looking at this function in isolation.

Here is asm output with "d"(a) & "d"(b). For this function code looks the same
like "0"(a) & "1"(b) version, only registers changes.

_ff_mpa_synth_filter:
	lea (-300,sp),sp
	movem.l #16190,-(sp)
	move.l 356(sp),a2
	move.l 364(sp),a6
	move.l 352(sp),a0
	move.l (a0),328(sp)
	move.l 328(sp),d0
	lsl.l #2,d0
	add.l 348(sp),d0
	move.l d0,320(sp)
	move.l 372(sp),-(sp)
	move.l d0,-(sp)
	jsr _dct32
	pea 128.w
	move.l 332(sp),-(sp)
	move.l 336(sp),a0
	pea 2048(a0)
	jsr _memcpy
	moveq #62,d0
	muls.l 388(sp),d0
	add.l a6,d0
	move.l d0,184(sp)
	lea (124,a2),a3
	move.l 380(sp),a0
	move.l (a0),324(sp)
	smi d0
	extb.l d0
	move.l d0,320(sp)
	move.w #64,a0
	add.l 340(sp),a0
	move.l (a2),d1
	move.l (a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,72(sp)
	move.l d6,76(sp)
	move.l 256(a2),d1
	move.l 256(a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,80(sp)
	move.l d6,84(sp)
	move.l 512(a2),d1
	move.l 512(a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,88(sp)
	move.l d6,92(sp)
	move.l 768(a2),d1
	move.l 768(a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,96(sp)
	move.l d6,100(sp)
	move.l 1024(a2),d1
	move.l 1024(a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,104(sp)
	move.l d6,108(sp)
	move.l 1280(a2),d1
	move.l 1280(a0),d0
#APP
;# 76 "libavcodec/m68k/mathops.h" 1
	| MUL64



Asm output from decode_init() and "d"(a) & "d"(b) looks worse compared to "0"(a) & "1"(b) version
(additional move.ls - L221/L222/...):


_decode_init:
	lea (-1552,sp),sp
	fmovem #4,-(sp)
	movem.l #16190,-(sp)
	move.l 1612(sp),a2
	move.l 136(a2),a3
	move.l a2,23184(a3)
	moveq #1,d0
	move.l d0,72(a2)
	move.l 252(a2),23180(a3)
	moveq #3,d1
	cmp.l 600(a2),d1
	jeq L218
	move.l #_compute_antialias_integer,23168(a3)
	jra L219
L218:
	move.l #_compute_antialias_float,23168(a3)
L219:
	tst.l _init.5731
	jne L220
	tst.l 272(a2)
	jne L220
	lea _scale_factor_modshift,a0
	clr.l d0
L221:
	move.l d0,d2
	moveq #3,d3
	divsl.l d3,d1:d2
	lsl.l #2,d2
	or.w d1,d2
	move.w d2,(a0)+
	addq.l #1,d0
	moveq #64,d4
	cmp.l d0,d4
	jne L221
	lea _scale_factor_mult,a4
	moveq #2,d5
	move.l d5,60(sp)
L222:
	move.l 60(sp),-(sp)
	move.l #8388608,-(sp)
	clr.l -(sp)
	jsr ___ashldi3
	lea (12,sp),sp
	moveq #1,d2
	move.l 60(sp),d6
	lsl.l d6,d2
	move.l #-1,d3
	add.l d2,d3
	smi d2
	extb.l d2
	move.l d3,-(sp)
	move.l d2,-(sp)
	move.l d1,-(sp)
	move.l d0,-(sp)
	jsr ___divdi3
	lea (16,sp),sp
	move.l d1,56(sp)
	move.l #16777216,d6
#APP
;# 120 "libavcodec/m68k/mathops.h" 1
	| MULL
	move.l d7, d5
	move.l d7, d4
	bge.b  0f
	neg.l  d7
	neg.l  d4
	0:
	eor.l  d0, d5
	move.l d0, d3
	bge.b  1f
	neg.l  d0
	neg.l  d3
	1:
	move.w #16, d5
	move.l d7, d2
	mulu.w d0, d7
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d0
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d0, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d0
	add.l  d4, d7
	addx.l d3, d0
	tst.l  d5
	bpl.b  2f
	neg.l  d7
	negx.l d0
	2:

#NO_APP
	move.l d7,a1
	move.l d0,d2
	moveq #9,d7
	lsl.l d7,d2
	move.l a1,d0
	moveq #23,d1
	lsr.l d1,d0
	or.l d0,d2
	move.l d2,(a4)
	move.l #13316085,d7
	move.l 56(sp),d1
#APP
;# 120 "libavcodec/m68k/mathops.h" 1
	| MULL
	move.l d0, d5
	move.l d0, d4
	bge.b  0f
	neg.l  d0
	neg.l  d4
	0:
	eor.l  d6, d5
	move.l d6, d3
	bge.b  1f
	neg.l  d6
	neg.l  d3
	1:
	move.w #16, d5
	move.l d0, d2
	mulu.w d6, d0
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d6
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d6, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d6
	add.l  d4, d0
	addx.l d3, d6
	tst.l  d5
	bpl.b  2f
	neg.l  d0
	negx.l d6
	2:

#NO_APP
	move.l d6,d2
	moveq #9,d3
	lsl.l d3,d2
	moveq #23,d4
	lsr.l d4,d0
	or.l d0,d2
	move.l d2,4(a4)
	move.l #10568984,d0
#APP
;# 120 "libavcodec/m68k/mathops.h" 1
	| MULL
	move.l d6, d5
	move.l d6, d4
	bge.b  0f
	neg.l  d6
	neg.l  d4
	0:
	eor.l  d7, d5
	move.l d7, d3
	bge.b  1f
	neg.l  d7
	neg.l  d3
	1:
	move.w #16, d5
	move.l d6, d2
	mulu.w d7, d6
	lsr.l  d5, d3
	lsr.l  d5, d4
	mulu.w d3, d2
	mulu.w d4, d7
	mulu.w d4, d3
	move.l d2, d4
	lsr.l  d5, d2
	add.w  d7, d4
	addx.l d2, d3
	lsl.l  d5, d4
	lsr.l  d5, d7
	add.l  d4, d6
	addx.l d3, d7
	tst.l  d5
	bpl.b  2f
	neg.l  d6
	negx.l d7
	2:

#NO_APP
	move.l d7,d1
	moveq #9,d2
	lsl.l d2,d1
	move.l d6,d0
	moveq #23,d3
	lsr.l d3,d0
	or.l d0,d1
	move.l d1,8(a4)
	addq.l #1,60(sp)
	lea (12,a4),a4
	moveq #17,d4
	cmp.l 60(sp),d4
	jne L222
	pea _window
	jsr _ff_mpa_synth_init
	lea _mpa_huff_tables,a4
	move.l #_huff_vlc_tables_sizes+4,72(sp)
	clr.b d2
	clr.b d3
	addq.l #4,sp
	move.l sp,d7
	add.l #1096,d7
	move.l #_memset,d6




More information about the ffmpeg-devel mailing list