variance_x86.h 10.6 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5 6
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
7
 *  in the file PATENTS.  All contributing project authors may
8
 *  be found in the AUTHORS file in the root of the source tree.
John Koleszar's avatar
John Koleszar committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
 */


#ifndef VARIANCE_X86_H
#define VARIANCE_X86_H


/* Note:
 *
 * This platform is commonly built for runtime CPU detection. If you modify
 * any of the function mappings present in this file, be sure to also update
 * them in the function pointer initialization code
 */
#if HAVE_MMX
extern prototype_sad(vp8_sad4x4_mmx);
extern prototype_sad(vp8_sad8x8_mmx);
extern prototype_sad(vp8_sad8x16_mmx);
extern prototype_sad(vp8_sad16x8_mmx);
extern prototype_sad(vp8_sad16x16_mmx);
extern prototype_variance(vp8_variance4x4_mmx);
extern prototype_variance(vp8_variance8x8_mmx);
extern prototype_variance(vp8_variance8x16_mmx);
extern prototype_variance(vp8_variance16x8_mmx);
extern prototype_variance(vp8_variance16x16_mmx);
extern prototype_subpixvariance(vp8_sub_pixel_variance4x4_mmx);
extern prototype_subpixvariance(vp8_sub_pixel_variance8x8_mmx);
extern prototype_subpixvariance(vp8_sub_pixel_variance8x16_mmx);
extern prototype_subpixvariance(vp8_sub_pixel_variance16x8_mmx);
extern prototype_subpixvariance(vp8_sub_pixel_variance16x16_mmx);
38 39 40
extern prototype_variance(vp8_variance_halfpixvar16x16_h_mmx);
extern prototype_variance(vp8_variance_halfpixvar16x16_v_mmx);
extern prototype_variance(vp8_variance_halfpixvar16x16_hv_mmx);
John Koleszar's avatar
John Koleszar committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
extern prototype_subpixvariance(vp8_sub_pixel_mse16x16_mmx);
extern prototype_getmbss(vp8_get_mb_ss_mmx);
extern prototype_variance(vp8_mse16x16_mmx);
extern prototype_sad(vp8_get16x16pred_error_mmx);
extern prototype_variance2(vp8_get8x8var_mmx);
extern prototype_variance2(vp8_get16x16var_mmx);
extern prototype_sad(vp8_get4x4sse_cs_mmx);

#if !CONFIG_RUNTIME_CPU_DETECT
#undef  vp8_variance_sad4x4
#define vp8_variance_sad4x4 vp8_sad4x4_mmx

#undef  vp8_variance_sad8x8
#define vp8_variance_sad8x8 vp8_sad8x8_mmx

#undef  vp8_variance_sad8x16
#define vp8_variance_sad8x16 vp8_sad8x16_mmx

#undef  vp8_variance_sad16x8
#define vp8_variance_sad16x8 vp8_sad16x8_mmx

#undef  vp8_variance_sad16x16
#define vp8_variance_sad16x16 vp8_sad16x16_mmx

#undef  vp8_variance_var4x4
#define vp8_variance_var4x4 vp8_variance4x4_mmx

#undef  vp8_variance_var8x8
#define vp8_variance_var8x8 vp8_variance8x8_mmx

#undef  vp8_variance_var8x16
#define vp8_variance_var8x16 vp8_variance8x16_mmx

#undef  vp8_variance_var16x8
#define vp8_variance_var16x8 vp8_variance16x8_mmx

#undef  vp8_variance_var16x16
#define vp8_variance_var16x16 vp8_variance16x16_mmx

#undef  vp8_variance_subpixvar4x4
#define vp8_variance_subpixvar4x4 vp8_sub_pixel_variance4x4_mmx

#undef  vp8_variance_subpixvar8x8
#define vp8_variance_subpixvar8x8 vp8_sub_pixel_variance8x8_mmx

#undef  vp8_variance_subpixvar8x16
#define vp8_variance_subpixvar8x16 vp8_sub_pixel_variance8x16_mmx

#undef  vp8_variance_subpixvar16x8
#define vp8_variance_subpixvar16x8 vp8_sub_pixel_variance16x8_mmx

#undef  vp8_variance_subpixvar16x16
#define vp8_variance_subpixvar16x16 vp8_sub_pixel_variance16x16_mmx

95 96 97 98 99 100 101 102 103
#undef  vp8_variance_halfpixvar16x16_h
#define vp8_variance_halfpixvar16x16_h vp8_variance_halfpixvar16x16_h_mmx

#undef  vp8_variance_halfpixvar16x16_v
#define vp8_variance_halfpixvar16x16_v vp8_variance_halfpixvar16x16_v_mmx

#undef  vp8_variance_halfpixvar16x16_hv
#define vp8_variance_halfpixvar16x16_hv vp8_variance_halfpixvar16x16_hv_mmx

John Koleszar's avatar
John Koleszar committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
#undef  vp8_variance_subpixmse16x16
#define vp8_variance_subpixmse16x16 vp8_sub_pixel_mse16x16_mmx

#undef  vp8_variance_getmbss
#define vp8_variance_getmbss vp8_get_mb_ss_mmx

#undef  vp8_variance_mse16x16
#define vp8_variance_mse16x16 vp8_mse16x16_mmx

#undef  vp8_variance_get16x16prederror
#define vp8_variance_get16x16prederror vp8_get16x16pred_error_mmx

#undef  vp8_variance_get8x8var
#define vp8_variance_get8x8var vp8_get8x8var_mmx

#undef  vp8_variance_get16x16var
#define vp8_variance_get16x16var vp8_get16x16var_mmx

#undef  vp8_variance_get4x4sse_cs
#define vp8_variance_get4x4sse_cs vp8_get4x4sse_cs_mmx

#endif
#endif


#if HAVE_SSE2
extern prototype_sad(vp8_sad4x4_wmt);
extern prototype_sad(vp8_sad8x8_wmt);
extern prototype_sad(vp8_sad8x16_wmt);
extern prototype_sad(vp8_sad16x8_wmt);
extern prototype_sad(vp8_sad16x16_wmt);
extern prototype_variance(vp8_variance4x4_wmt);
extern prototype_variance(vp8_variance8x8_wmt);
extern prototype_variance(vp8_variance8x16_wmt);
extern prototype_variance(vp8_variance16x8_wmt);
extern prototype_variance(vp8_variance16x16_wmt);
extern prototype_subpixvariance(vp8_sub_pixel_variance4x4_wmt);
extern prototype_subpixvariance(vp8_sub_pixel_variance8x8_wmt);
extern prototype_subpixvariance(vp8_sub_pixel_variance8x16_wmt);
extern prototype_subpixvariance(vp8_sub_pixel_variance16x8_wmt);
extern prototype_subpixvariance(vp8_sub_pixel_variance16x16_wmt);
145 146 147
extern prototype_variance(vp8_variance_halfpixvar16x16_h_wmt);
extern prototype_variance(vp8_variance_halfpixvar16x16_v_wmt);
extern prototype_variance(vp8_variance_halfpixvar16x16_hv_wmt);
John Koleszar's avatar
John Koleszar committed
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
extern prototype_subpixvariance(vp8_sub_pixel_mse16x16_wmt);
extern prototype_getmbss(vp8_get_mb_ss_sse2);
extern prototype_variance(vp8_mse16x16_wmt);
extern prototype_sad(vp8_get16x16pred_error_sse2);
extern prototype_variance2(vp8_get8x8var_sse2);
extern prototype_variance2(vp8_get16x16var_sse2);

#if !CONFIG_RUNTIME_CPU_DETECT
#undef  vp8_variance_sad4x4
#define vp8_variance_sad4x4 vp8_sad4x4_wmt

#undef  vp8_variance_sad8x8
#define vp8_variance_sad8x8 vp8_sad8x8_wmt

#undef  vp8_variance_sad8x16
#define vp8_variance_sad8x16 vp8_sad8x16_wmt

#undef  vp8_variance_sad16x8
#define vp8_variance_sad16x8 vp8_sad16x8_wmt

#undef  vp8_variance_sad16x16
#define vp8_variance_sad16x16 vp8_sad16x16_wmt

#undef  vp8_variance_var4x4
#define vp8_variance_var4x4 vp8_variance4x4_wmt

#undef  vp8_variance_var8x8
#define vp8_variance_var8x8 vp8_variance8x8_wmt

#undef  vp8_variance_var8x16
#define vp8_variance_var8x16 vp8_variance8x16_wmt

#undef  vp8_variance_var16x8
#define vp8_variance_var16x8 vp8_variance16x8_wmt

#undef  vp8_variance_var16x16
#define vp8_variance_var16x16 vp8_variance16x16_wmt

#undef  vp8_variance_subpixvar4x4
#define vp8_variance_subpixvar4x4 vp8_sub_pixel_variance4x4_wmt

#undef  vp8_variance_subpixvar8x8
#define vp8_variance_subpixvar8x8 vp8_sub_pixel_variance8x8_wmt

#undef  vp8_variance_subpixvar8x16
#define vp8_variance_subpixvar8x16 vp8_sub_pixel_variance8x16_wmt

#undef  vp8_variance_subpixvar16x8
#define vp8_variance_subpixvar16x8 vp8_sub_pixel_variance16x8_wmt

#undef  vp8_variance_subpixvar16x16
#define vp8_variance_subpixvar16x16 vp8_sub_pixel_variance16x16_wmt

201 202 203 204 205 206 207 208 209
#undef  vp8_variance_halfpixvar16x16_h
#define vp8_variance_halfpixvar16x16_h vp8_variance_halfpixvar16x16_h_wmt

#undef  vp8_variance_halfpixvar16x16_v
#define vp8_variance_halfpixvar16x16_v vp8_variance_halfpixvar16x16_v_wmt

#undef  vp8_variance_halfpixvar16x16_hv
#define vp8_variance_halfpixvar16x16_hv vp8_variance_halfpixvar16x16_hv_wmt

John Koleszar's avatar
John Koleszar committed
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
#undef  vp8_variance_subpixmse16x16
#define vp8_variance_subpixmse16x16 vp8_sub_pixel_mse16x16_wmt

#undef  vp8_variance_getmbss
#define vp8_variance_getmbss vp8_get_mb_ss_sse2

#undef  vp8_variance_mse16x16
#define vp8_variance_mse16x16 vp8_mse16x16_wmt

#undef  vp8_variance_get16x16prederror
#define vp8_variance_get16x16prederror vp8_get16x16pred_error_sse2

#undef  vp8_variance_get8x8var
#define vp8_variance_get8x8var vp8_get8x8var_sse2

#undef  vp8_variance_get16x16var
#define vp8_variance_get16x16var vp8_get16x16var_sse2

#endif
#endif


#if HAVE_SSE3
extern prototype_sad(vp8_sad16x16_sse3);
extern prototype_sad(vp8_sad16x8_sse3);
extern prototype_sad_multi_same_address(vp8_sad16x16x3_sse3);
extern prototype_sad_multi_same_address(vp8_sad16x8x3_sse3);
extern prototype_sad_multi_same_address(vp8_sad8x16x3_sse3);
extern prototype_sad_multi_same_address(vp8_sad8x8x3_sse3);
extern prototype_sad_multi_same_address(vp8_sad4x4x3_sse3);

extern prototype_sad_multi_dif_address(vp8_sad16x16x4d_sse3);
extern prototype_sad_multi_dif_address(vp8_sad16x8x4d_sse3);
extern prototype_sad_multi_dif_address(vp8_sad8x16x4d_sse3);
extern prototype_sad_multi_dif_address(vp8_sad8x8x4d_sse3);
extern prototype_sad_multi_dif_address(vp8_sad4x4x4d_sse3);

#if !CONFIG_RUNTIME_CPU_DETECT

#undef  vp8_variance_sad16x16
#define vp8_variance_sad16x16 vp8_sad16x16_sse3

#undef  vp8_variance_sad16x16x3
#define vp8_variance_sad16x16x3 vp8_sad16x16x3_sse3

#undef  vp8_variance_sad16x8x3
#define vp8_variance_sad16x8x3 vp8_sad16x8x3_sse3

#undef  vp8_variance_sad8x16x3
#define vp8_variance_sad8x16x3 vp8_sad8x16x3_sse3

#undef  vp8_variance_sad8x8x3
#define vp8_variance_sad8x8x3 vp8_sad8x8x3_sse3

#undef  vp8_variance_sad4x4x3
#define vp8_variance_sad4x4x3 vp8_sad4x4x3_sse3

#undef  vp8_variance_sad16x16x4d
268
#define vp8_variance_sad16x16x4d vp8_sad16x16x4d_sse3
John Koleszar's avatar
John Koleszar committed
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288

#undef  vp8_variance_sad16x8x4d
#define vp8_variance_sad16x8x4d vp8_sad16x8x4d_sse3

#undef  vp8_variance_sad8x16x4d
#define vp8_variance_sad8x16x4d vp8_sad8x16x4d_sse3

#undef  vp8_variance_sad8x8x4d
#define vp8_variance_sad8x8x4d vp8_sad8x8x4d_sse3

#undef  vp8_variance_sad4x4x4d
#define vp8_variance_sad4x4x4d vp8_sad4x4x4d_sse3

#endif
#endif


#if HAVE_SSSE3
extern prototype_sad_multi_same_address(vp8_sad16x16x3_ssse3);
extern prototype_sad_multi_same_address(vp8_sad16x8x3_ssse3);
289
extern prototype_subpixvariance(vp8_sub_pixel_variance16x8_ssse3);
290
extern prototype_subpixvariance(vp8_sub_pixel_variance16x16_ssse3);
John Koleszar's avatar
John Koleszar committed
291 292 293 294 295 296 297 298

#if !CONFIG_RUNTIME_CPU_DETECT
#undef  vp8_variance_sad16x16x3
#define vp8_variance_sad16x16x3 vp8_sad16x16x3_ssse3

#undef  vp8_variance_sad16x8x3
#define vp8_variance_sad16x8x3 vp8_sad16x8x3_ssse3

299 300 301
#undef  vp8_variance_subpixvar16x8
#define vp8_variance_subpixvar16x8 vp8_sub_pixel_variance16x8_ssse3

302 303 304
#undef  vp8_variance_subpixvar16x16
#define vp8_variance_subpixvar16x16 vp8_sub_pixel_variance16x16_ssse3

John Koleszar's avatar
John Koleszar committed
305 306 307
#endif
#endif

308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334

#if HAVE_SSE4_1
extern prototype_sad_multi_same_address_1(vp8_sad16x16x8_sse4);
extern prototype_sad_multi_same_address_1(vp8_sad16x8x8_sse4);
extern prototype_sad_multi_same_address_1(vp8_sad8x16x8_sse4);
extern prototype_sad_multi_same_address_1(vp8_sad8x8x8_sse4);
extern prototype_sad_multi_same_address_1(vp8_sad4x4x8_sse4);

#if !CONFIG_RUNTIME_CPU_DETECT
#undef  vp8_variance_sad16x16x8
#define vp8_variance_sad16x16x8 vp8_sad16x16x8_sse4

#undef  vp8_variance_sad16x8x8
#define vp8_variance_sad16x8x8 vp8_sad16x8x8_sse4

#undef  vp8_variance_sad8x16x8
#define vp8_variance_sad8x16x8 vp8_sad8x16x8_sse4

#undef  vp8_variance_sad8x8x8
#define vp8_variance_sad8x8x8 vp8_sad8x8x8_sse4

#undef  vp8_variance_sad4x4x8
#define vp8_variance_sad4x4x8 vp8_sad4x4x8_sse4

#endif
#endif

John Koleszar's avatar
John Koleszar committed
335
#endif