X86.h

00001 /*
00002     x86 specific optimized assembler dsp routines
00003     Copyright (C) 2001-2005 Jussi Laako
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU Lesser General Public License version 2.1,
00007     as published by the Free Software Foundation.
00008 
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU Lesser General Public License for more details.
00014 
00015     You should have received a copy of the GNU Lesser General Public
00016     License along with this program; if not, write to the Free Software
00017     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 */
00019 
00020 
00021 #if !defined(_SPANDSP__X86_H)  &&  (defined(__i386__)  ||  defined(__x86_64__))
00022 
00023 #define _SPANDSP__X86_H
00024 
00025 #pragma pack(1)
00026 
00027 typedef struct _stm64
00028 {
00029     float f[2];
00030 } stm64, *stpm64;
00031 
00032 typedef struct _stm128
00033 {
00034     union
00035     {
00036         float f[4];
00037         double d[2];
00038     };
00039 } stm128, *stpm128;
00040 
00041 #pragma pack()
00042 
00043 #if defined(__cplusplus)
00044 extern "C"
00045 {
00046 #endif
00047 
00048 #if !defined(_SPANDSP__x86_64__)
00049 const char *dsp_x86_cpuid(void);
00050 unsigned int dsp_x86_features(void);
00051 unsigned int dsp_x86_amd_features(void);
00052 #endif
00053 int dsp_x86_have_e3dnow(void);
00054 int dsp_x86_have_sse2(void);
00055 void dsp_x86_3dnow_copyf(float *, const float *, int);
00056 void dsp_x86_3dnow_copyd(double *, const double *, int);
00057 void dsp_x86_3dnow_addf(float *, float, int);
00058 void dsp_x86_sse_addf(float *, float, int);
00059 void dsp_x86_sse_add(double *, double, int);
00060 void dsp_x86_3dnow_mulf(float *, float, int);
00061 void dsp_x86_sse_mulf(float *, float, int);
00062 void dsp_x86_sse_mul(double *, double, int);
00063 void dsp_x86_3dnow_mulf_nip(float *, const float *, float, int);
00064 void dsp_x86_sse_mulf_nip(float *, const float *, float, int);
00065 void dsp_x86_sse_mul_nip(double *, const double *, double, int);
00066 void dsp_x86_3dnow_add2f(float *, const float *, int);
00067 void dsp_x86_sse_add2f(float *, const float *, int);
00068 void dsp_x86_sse_add2(double *, const double *, int);
00069 void dsp_x86_3dnow_mul2f(float *, const float *, int);
00070 void dsp_x86_sse_mul2f(float *, const float *, int);
00071 void dsp_x86_sse_mul2(double *, const double *, int);
00072 void dsp_x86_3dnow_add3f(float *, const float *, const float *, int);
00073 void dsp_x86_sse_add3f(float *, const float *, const float *, int);
00074 void dsp_x86_sse_add3(double *, const double *, const double *, int);
00075 void dsp_x86_3dnow_mul3f(float *, const float *, const float *, int);
00076 void dsp_x86_sse_mul3f(float *, const float *, const float *, int);
00077 void dsp_x86_sse_mul3(double *, const double *, const double *, int);
00078 void dsp_x86_3dnow_cmulf(float *, const float *, int);
00079 void dsp_x86_sse_cmulf(float *, const float *, int);
00080 void dsp_x86_sse_cmul(double *, const double *, int);
00081 void dsp_x86_3dnow_cmul2f(float *, const float *, int);
00082 void dsp_x86_sse_cmul2f(float *, const float *, int);
00083 void dsp_x86_sse_cmul2(double *, const double *, int);
00084 void dsp_x86_3dnow_cmul3f(float *, const float *, const float *, int);
00085 void dsp_x86_sse_cmul3f(float *, const float *, const float *, int);
00086 void dsp_x86_sse_cmul3(double *, const double *, const double *, int);
00087 void dsp_x86_3dnow_maf(float *, float, float, int);
00088 void dsp_x86_sse_maf(float *, float, float, int);
00089 void dsp_x86_sse_ma(double *, double, double, int);
00090 void dsp_x86_3dnow_ma2f(float *, const float *, float, float, int);
00091 void dsp_x86_sse_ma2f(float *, const float *, float, float, int);
00092 void dsp_x86_sse_ma2(double *, const double *, double, double, int);
00093 void dsp_x86_3dnow_cmaf(float *, const float *, const float *, int);
00094 void dsp_x86_sse_cmaf(float *, const float *, const float *, int);
00095 void dsp_x86_sse_cma(double *, const double *, const double *, int);
00096 void dsp_x86_3dnow_amf(float *, float, float, int);
00097 void dsp_x86_sse_amf(float *, float, float, int);
00098 void dsp_x86_sse_am(double *, double, double, int);
00099 float dsp_x86_3dnow_macf(const float *, const float *, int);
00100 float dsp_x86_sse_macf(const float *, const float *, int);
00101 double dsp_x86_sse_mac(const double *, const double *, int);
00102 void dsp_x86_3dnow_minmaxf(float *, float *, const float *, int);
00103 void dsp_x86_sse_minmaxf(float *, float *, const float *, int);
00104 void dsp_x86_sse_minmax(double *, double *, const double *, int);
00105 float dsp_x86_3dnow_crosscorrf(const float *, const float *, int);
00106 float dsp_x86_sse_crosscorrf(const float *, const float *, int);
00107 double dsp_x86_sse_crosscorr(const double *, const double *, int);
00108 void dsp_x86_3dnow_i16tof(float *, const short *, int, int);
00109 void dsp_x86_3dnow_i32tof(float *, const int *, int, int);
00110 void dsp_x86_3dnow_ftoi16(short *, const float *, int);
00111 /* not in-place capable */
00112 void dsp_x86_3dnow_firf(float *, const float *, int, const float *, int);
00113 void dsp_x86_sse_firf(float *, const float *, int, const float *, int);
00114 void dsp_x86_sse_fir(double *, const double *, int, const double *, int);
00115 void dsp_x86_3dnow_iirf(float *, int, const float *, float *, float *);
00116 void dsp_x86_sse_iirf(float *, int, const float *, float *, float *);
00117 void dsp_x86_sse_iir(double *, int, const double *, double *, double *);
00118 void dsp_x86_3dnow_iirf_nip(float *, const float *, int, const float *, float *, float *);
00119 void dsp_x86_sse_iirf_nip(float *, const float *, int, const float *, float *, float *);
00120 void dsp_x86_sse_iir_nip(double *, const double *, int, const double *, double *, double *);
00121 
00122 #if defined(__cplusplus)
00123 }
00124 #endif
00125 
00126 #endif

Generated on Tue Oct 7 20:25:50 2008 for spandsp by  doxygen 1.5.6