00001 /* 00002 * simple math operations 00003 * Copyright (c) 2001, 2002 Fabrice Bellard. 00004 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al 00005 * 00006 * This file is part of FFmpeg. 00007 * 00008 * FFmpeg is free software; you can redistribute it and/or 00009 * modify it under the terms of the GNU Lesser General Public 00010 * License as published by the Free Software Foundation; either 00011 * version 2.1 of the License, or (at your option) any later version. 00012 * 00013 * FFmpeg is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 * Lesser General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public 00019 * License along with FFmpeg; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 */ 00022 #ifndef FFMPEG_MATHOPS_H 00023 #define FFMPEG_MATHOPS_H 00024 00025 #include "common.h" 00026 00027 #ifdef ARCH_X86_32 00028 00029 #include "i386/mathops.h" 00030 00031 #elif defined(ARCH_ARMV4L) 00032 00033 #include "armv4l/mathops.h" 00034 00035 #elif defined(ARCH_PPC) 00036 00037 #include "ppc/mathops.h" 00038 00039 #elif defined(ARCH_BFIN) 00040 00041 #include "bfin/mathops.h" 00042 00043 #endif 00044 00045 /* generic implementation */ 00046 00047 #ifndef MULL 00048 # define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS) 00049 #endif 00050 00051 #ifndef MULH 00052 //gcc 3.4 creates an incredibly bloated mess out of this 00053 //# define MULH(a,b) (((int64_t)(a) * (int64_t)(b))>>32) 00054 00055 static av_always_inline int MULH(int a, int b){ 00056 return ((int64_t)(a) * (int64_t)(b))>>32; 00057 } 00058 #endif 00059 00060 #ifndef MUL64 00061 # define MUL64(a,b) ((int64_t)(a) * (int64_t)(b)) 00062 #endif 00063 00064 /* signed 16x16 -> 32 multiply add accumulate */ 00065 #ifndef MAC16 00066 # define MAC16(rt, ra, rb) rt += (ra) * (rb) 00067 #endif 00068 00069 /* signed 16x16 -> 32 multiply */ 00070 #ifndef MUL16 00071 # define MUL16(ra, rb) ((ra) * (rb)) 00072 #endif 00073 00074 #endif /* FFMPEG_MATHOPS_H */ 00075