Mercurial > libavcodec.hg
comparison i386/mathops.h @ 3733:d1b5acd0b680 libavcodec
New single instruction math operation header
author | lu_zero |
---|---|
date | Tue, 19 Sep 2006 22:22:29 +0000 |
parents | |
children | c8c591fe26f8 |
comparison
equal
deleted
inserted
replaced
3732:2c0b93338765 | 3733:d1b5acd0b680 |
---|---|
1 /* | |
2 * simple math operations | |
3 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al | |
4 * | |
5 * This library is free software; you can redistribute it and/or | |
6 * modify it under the terms of the GNU Lesser General Public | |
7 * License as published by the Free Software Foundation; either | |
8 * version 2 of the License, or (at your option) any later version. | |
9 * | |
10 * This library is distributed in the hope that it will be useful, | |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 * Lesser General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU Lesser General Public | |
16 * License along with this library; if not, write to the Free Software | |
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
18 */ | |
19 | |
20 #ifdef FRAC_BITS | |
21 # define MULL(ra, rb) \ | |
22 ({ int rt, dummy; asm (\ | |
23 "imull %3 \n\t"\ | |
24 "shrdl %4, %%edx, %%eax \n\t"\ | |
25 : "=a"(rt), "=d"(dummy)\ | |
26 : "a" (ra), "rm" (rb), "i"(FRAC_BITS));\ | |
27 rt; }) | |
28 #endif | |
29 | |
30 #define MULH(ra, rb) \ | |
31 ({ int rt, dummy;\ | |
32 asm ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" (ra), "rm" (rb));\ | |
33 rt; }) | |
34 | |
35 #define MUL64(ra, rb) \ | |
36 ({ int64_t rt;\ | |
37 asm ("imull %2\n\t" : "=A"(rt) : "a" (ra), "g" (rb));\ | |
38 rt; }) | |
39 |