annotate bfin/mathops.h @ 10343:b1218e0b0f2b libavcodec

Use MANGLE in cavsdsp, the current version using "m" constraints will not compile on e.g. OpenBSD due to running out of registers.
author reimar
date Thu, 01 Oct 2009 15:30:27 +0000
parents 25136467a218
children
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
10080
25136467a218 Add necessary #include for config.h.
diego
parents: 8776
diff changeset
25 #include "config.h"
25136467a218 Add necessary #include for config.h.
diego
parents: 8776
diff changeset
26
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 8031
diff changeset
27 #if CONFIG_MPEGAUDIO_HP
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
28 #define MULH(X,Y) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
29 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
30 "a1 = %2.L * %1.L (FU);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
31 "a1 = a1 >> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
32 "a1 += %2.H * %1.L (IS,M);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
33 "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
34 "a1 = a1 >>> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
35 "%0 = (a0 += a1);\n\t" \
5689
84bc9138be8f properly tell the compiler that A0 and A1 are clobbered
mhoffman
parents: 5619
diff changeset
36 : "=d" (xxo) : "d" (X), "d" (Y) : "A0","A1"); xxo; })
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
37 #else
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
38 #define MULH(X,Y) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
39 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
40 "a1 = %2.H * %1.L (IS,M);\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
41 "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
42 "a1 = a1 >>> 16;\n\t" \
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
43 "%0 = (a0 += a1);\n\t" \
5689
84bc9138be8f properly tell the compiler that A0 and A1 are clobbered
mhoffman
parents: 5619
diff changeset
44 : "=d" (xxo) : "d" (X), "d" (Y) : "A0","A1"); xxo; })
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
45 #endif
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
46
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
47 /* signed 16x16 -> 32 multiply */
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
48 #define MUL16(a, b) ({ int xxo; \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7760
diff changeset
49 __asm__ ( \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
50 "%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
51 : "=W" (xxo) : "d" (a), "d" (b) : "A1"); \
5614
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
52 xxo; })
bff0c6dc3584 Blackfin 32bit multiplication primitives MULH MUL16
mhoffman
parents:
diff changeset
53
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
54 #endif /* AVCODEC_BFIN_MATHOPS_H */