annotate bfin/mathops.h @ 8790:1045a26cb90d libavcodec

Fix crash when encoding using libschroedinger. Currently only pixel and half-pixel motion vector precisions are supported in libschroedinger. Setting the mv_precision field to 2 (i.e. quarter pixel) causes a crash in the libschroedinger encoder calls. By not setting this parameter, we fall back to the default value used in libschroedinger. patch by Anuradha Suraparaju, anuradha rd.bbc.co uk
author diego
date Tue, 10 Feb 2009 14:27:16 +0000
parents f9c847fb4839
children 25136467a218
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
1 /*
8776
f9c847fb4839 Remove file name from file headers.
diego
parents: 8590
diff changeset
2 * simple math operations
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
3 *
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
4 * Copyright (C) 2007 Marc Hoffman <mmhoffm@gmail.com>
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
5 *
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
6 * This file is part of FFmpeg.
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
7 *
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
12 *
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
16 * Lesser General Public License for more details.
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
17 *
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
21 */
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
22 #ifndef AVCODEC_BFIN_MATHOPS_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
23 #define AVCODEC_BFIN_MATHOPS_H
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
24
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8031
diff changeset
25 #if CONFIG_MPEGAUDIO_HP
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
26 #define MULH(X,Y) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
27 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
28 "a1 = %2.L * %1.L (FU);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
29 "a1 = a1 >> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
30 "a1 += %2.H * %1.L (IS,M);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
31 "a0 = %1.H * %2.H, a1+= %1.H * %2.L (IS,M);\n\t"\
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
32 "a1 = a1 >>> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
33 "%0 = (a0 += a1);\n\t" \
5689
84bc9138be8f properly tell the compiler that A0 and A1 are clobbered
mhoffman
parents: 5619
diff changeset
34 : "=d" (xxo) : "d" (X), "d" (Y) : "A0","A1"); xxo; })
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
35 #else
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
36 #define MULH(X,Y) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
37 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
38 "a1 = %2.H * %1.L (IS,M);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
39 "a0 = %1.H * %2.H, a1+= %1.H * %2.L (IS,M);\n\t"\
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
40 "a1 = a1 >>> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
41 "%0 = (a0 += a1);\n\t" \
5689
84bc9138be8f properly tell the compiler that A0 and A1 are clobbered
mhoffman
parents: 5619
diff changeset
42 : "=d" (xxo) : "d" (X), "d" (Y) : "A0","A1"); xxo; })
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
43 #endif
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
44
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
45 /* signed 16x16 -> 32 multiply */
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
46 #define MUL16(a, b) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
47 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
48 "%0 = %1.l*%2.l (is);\n\t" \
5689
84bc9138be8f properly tell the compiler that A0 and A1 are clobbered
mhoffman
parents: 5619
diff changeset
49 : "=W" (xxo) : "d" (a), "d" (b) : "A1"); \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
50 xxo; })
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
51
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
52 #endif /* AVCODEC_BFIN_MATHOPS_H */