annotate bfin/dsputil_bfin.c @ 3990:746a60ba3177 libavcodec

enable CMOV_IS_FAST as its faster or equal speed on every cpu (duron, athlon, PM, P3) from which ive seen benchmarks, it might be slower on P4 but noone has posted benchmarks ...
author michael
date Wed, 11 Oct 2006 12:23:40 +0000
parents c8c591fe26f8
children 85298e8c55c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3728
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
1 /*
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
2 * Copyright (c) 2006 Michael Benjamin
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
3 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
4 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
5 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
3728
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
3728
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
3728
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
14 * Lesser General Public License for more details.
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
15 *
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3728
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
3728
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
19 */
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
20
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
21 #include "../avcodec.h"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
22 #include "../dsputil.h"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
23
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
24 static int sad8x8_bfin( void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h )
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
25 {
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
26 int sum;
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
27 __asm__ __volatile__ (
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
28 "P0 = %1;" // blk1
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
29 "P1 = %2;" // blk2
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
30 "P2 = %3;\n" // h
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
31 "I0 = P0;"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
32 "I1 = P1;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
33 "A0 = 0;"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
34 "A1 = 0;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
35 "M0 = P2;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
36 "P3 = 32;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
37 "LSETUP (sad8x8LoopBegin, sad8x8LoopEnd) LC0=P3;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
38 "sad8x8LoopBegin:\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
39 " DISALGNEXCPT || R0 = [I0] || R2 = [I1];\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
40 " DISALGNEXCPT || R1 = [I0++] || R3 = [I1++];\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
41 "sad8x8LoopEnd:\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
42 " SAA ( R1:0 , R3:2 );\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
43 "R3 = A1.L + A1.H, R2 = A0.L + A0.H;\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
44 "%0 = R2 + R3 (S);\n"
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
45 : "=&d" (sum)
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
46 : "m"(blk1), "m"(blk2), "m"(h)
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
47 : "P0","P1","P2","I0","I1","A0","A1","R0","R1","R2","R3");
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
48 return sum;
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
49 }
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
50
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
51 void dsputil_init_bfin( DSPContext* c, AVCodecContext *avctx )
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
52 {
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
53 c->pix_abs[1][0] = sad8x8_bfin;
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
54 c->sad[1] = sad8x8_bfin;
4d346abd723c ADI Blackfin optimizations
diego
parents:
diff changeset
55 }