ffmpeg / libavcodec / armv4l / mathops.h @ 699b3f99
History  View  Annotate  Download (1.82 KB)
1 
/*


2 
* simple math operations

3 
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al

4 
*

5 
* This file is part of FFmpeg.

6 
*

7 
* FFmpeg is free software; you can redistribute it and/or

8 
* modify it under the terms of the GNU Lesser General Public

9 
* License as published by the Free Software Foundation; either

10 
* version 2.1 of the License, or (at your option) any later version.

11 
*

12 
* FFmpeg is distributed in the hope that it will be useful,

13 
* but WITHOUT ANY WARRANTY; without even the implied warranty of

14 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

15 
* Lesser General Public License for more details.

16 
*

17 
* You should have received a copy of the GNU Lesser General Public

18 
* License along with FFmpeg; if not, write to the Free Software

19 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

20 
*/

21  
22 
#ifndef AVCODEC_ARM_MATHOPS_H

23 
#define AVCODEC_ARM_MATHOPS_H

24  
25 
#ifdef FRAC_BITS

26 
# define MULL(a, b) \

27 
({ int lo, hi;\

28 
asm("smull %0, %1, %2, %3 \n\t"\ 
29 
"mov %0, %0, lsr %4\n\t"\

30 
"add %1, %0, %1, lsl %5\n\t"\

31 
: "=&r"(lo), "=&r"(hi)\ 
32 
: "r"(b), "r"(a), "i"(FRAC_BITS), "i"(32FRAC_BITS));\ 
33 
hi; }) 
34 
#endif

35  
36 
#define MULH(a, b) \

37 
({ int lo, hi;\

38 
asm ("smull %0, %1, %2, %3" : "=&r"(lo), "=&r"(hi) : "r"(b), "r"(a));\ 
39 
hi; }) 
40  
41 
#if defined(HAVE_ARMV5TE)

42  
43 
/* signed 16x16 > 32 multiply add accumulate */

44 
# define MAC16(rt, ra, rb) \

45 
asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb)); 
46 
/* signed 16x16 > 32 multiply */

47 
# define MUL16(ra, rb) \

48 
({ int __rt; \

49 
asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); \ 
50 
__rt; }) 
51  
52 
#endif

53  
54 
#endif
