00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef DSP_X86
00024
00025 #ifndef X86_H
00026 #define X86_H
00027
00028 #define X86_ASM asm volatile
00029
00030 #pragma pack(1)
00031
00032 typedef struct _stm64
00033 {
00034 float f[2];
00035 } stm64, *stpm64;
00036
00037 typedef struct _stm128
00038 {
00039 union
00040 {
00041 float f[4];
00042 double d[2];
00043 };
00044 } stm128, *stpm128;
00045
00046 #pragma pack()
00047
00048
00049 #ifdef __cplusplus
00050 extern "C"
00051 {
00052 #endif
00053
00054 #ifndef DSP_X86_64
00055 const char *dsp_x86_cpuid (void);
00056 unsigned int dsp_x86_features (void);
00057 unsigned int dsp_x86_amd_features (void);
00058 #endif
00059 int dsp_x86_have_e3dnow (void);
00060 int dsp_x86_have_sse2 (void);
00061 void dsp_x86_3dnow_copyf (float *, const float *, int);
00062 void dsp_x86_3dnow_copyd (double *, const double *, int);
00063 void dsp_x86_3dnow_addf (float *, float, int);
00064 void dsp_x86_sse_addf (float *, float, int);
00065 void dsp_x86_sse_add (double *, double, int);
00066 void dsp_x86_3dnow_mulf (float *, float, int);
00067 void dsp_x86_sse_mulf (float *, float, int);
00068 void dsp_x86_sse_mul (double *, double, int);
00069 void dsp_x86_3dnow_mulf_nip (float *, const float *, float, int);
00070 void dsp_x86_sse_mulf_nip (float *, const float *, float, int);
00071 void dsp_x86_sse_mul_nip (double *, const double *, double, int);
00072 void dsp_x86_3dnow_add2f (float *, const float *, int);
00073 void dsp_x86_sse_add2f (float *, const float *, int);
00074 void dsp_x86_sse_add2 (double *, const double *, int);
00075 void dsp_x86_3dnow_mul2f (float *, const float *, int);
00076 void dsp_x86_sse_mul2f (float *, const float *, int);
00077 void dsp_x86_sse_mul2 (double *, const double *, int);
00078 void dsp_x86_3dnow_add3f (float *, const float *, const float *, int);
00079 void dsp_x86_sse_add3f (float *, const float *, const float *, int);
00080 void dsp_x86_sse_add3 (double *, const double *, const double *, int);
00081 void dsp_x86_3dnow_mul3f (float *, const float *, const float *, int);
00082 void dsp_x86_sse_mul3f (float *, const float *, const float *, int);
00083 void dsp_x86_sse_mul3 (double *, const double *, const double *, int);
00084 void dsp_x86_3dnow_cmulf (float *, const float *, int);
00085 void dsp_x86_sse_cmulf (float *, const float *, int);
00086 void dsp_x86_sse_cmul (double *, const double *, int);
00087 void dsp_x86_3dnow_cmul2f (float *, const float *, int);
00088 void dsp_x86_sse_cmul2f (float *, const float *, int);
00089 void dsp_x86_sse_cmul2 (double *, const double *, int);
00090 void dsp_x86_3dnow_cmul3f (float *, const float *, const float *, int);
00091 void dsp_x86_sse_cmul3f (float *, const float *, const float *, int);
00092 void dsp_x86_sse_cmul3 (double *, const double *, const double *, int);
00093 void dsp_x86_3dnow_maf (float *, float, float, int);
00094 void dsp_x86_sse_maf (float *, float, float, int);
00095 void dsp_x86_sse_ma (double *, double, double, int);
00096 void dsp_x86_3dnow_ma2f (float *, const float *, float, float, int);
00097 void dsp_x86_sse_ma2f (float *, const float *, float, float, int);
00098 void dsp_x86_sse_ma2 (double *, const double *, double, double, int);
00099 void dsp_x86_3dnow_amf (float *, float, float, int);
00100 void dsp_x86_sse_amf (float *, float, float, int);
00101 void dsp_x86_sse_am (double *, double, double, int);
00102 float dsp_x86_3dnow_macf (const float *, const float *, int);
00103 float dsp_x86_sse_macf (const float *, const float *, int);
00104 double dsp_x86_sse_mac (const double *, const double *, int);
00105 void dsp_x86_3dnow_minmaxf (float *, float *, const float *, int);
00106 void dsp_x86_sse_minmaxf (float *, float *, const float *, int);
00107 void dsp_x86_sse_minmax (double *, double *, const double *, int);
00108 float dsp_x86_3dnow_crosscorrf (const float *, const float *, int);
00109 float dsp_x86_sse_crosscorrf (const float *, const float *, int);
00110 double dsp_x86_sse_crosscorr (const double *, const double *, int);
00111 void dsp_x86_3dnow_i16tof (float *, const short *, int, int);
00112 void dsp_x86_3dnow_i32tof (float *, const int *, int, int);
00113 void dsp_x86_3dnow_ftoi16 (short *, const float *, int);
00114
00115 void dsp_x86_3dnow_firf (float *, const float *, int, const float *, int);
00116 void dsp_x86_sse_firf (float *, const float *, int, const float *, int);
00117 void dsp_x86_sse_fir (double *, const double *, int, const double *, int);
00118 void dsp_x86_3dnow_iirf (float *, int, const float *, float *, float *);
00119 void dsp_x86_sse_iirf (float *, int, const float *, float *, float *);
00120 void dsp_x86_sse_iir (double *, int, const double *, double *, double *);
00121 void dsp_x86_3dnow_iirf_nip (float *, const float *, int, const float *,
00122 float *, float *);
00123 void dsp_x86_sse_iirf_nip (float *, const float *, int, const float *,
00124 float *, float *);
00125 void dsp_x86_sse_iir_nip (double *, const double *, int, const double *,
00126 double *, double *);
00127
00128 #ifdef __cplusplus
00129 }
00130 #endif
00131
00132 #endif
00133
00134 #endif