[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