1/* 2 * Copyright (c) 2010 Fiona Glaser <fiona@x264.com> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#include "libavutil/attributes.h" 22#include "libavutil/cpu.h" 23#include "libavutil/x86/cpu.h" 24#include "libavcodec/avcodec.h" 25#include "libavcodec/h264pred.h" 26 27#define PRED4x4(TYPE, DEPTH, OPT) \ 28void ff_pred4x4_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ 29 const uint8_t *topright, \ 30 ptrdiff_t stride); 31 32PRED4x4(dc, 10, mmxext) 33PRED4x4(down_left, 10, sse2) 34PRED4x4(down_left, 10, avx) 35PRED4x4(down_right, 10, sse2) 36PRED4x4(down_right, 10, ssse3) 37PRED4x4(down_right, 10, avx) 38PRED4x4(vertical_left, 10, sse2) 39PRED4x4(vertical_left, 10, avx) 40PRED4x4(vertical_right, 10, sse2) 41PRED4x4(vertical_right, 10, ssse3) 42PRED4x4(vertical_right, 10, avx) 43PRED4x4(horizontal_up, 10, mmxext) 44PRED4x4(horizontal_down, 10, sse2) 45PRED4x4(horizontal_down, 10, ssse3) 46PRED4x4(horizontal_down, 10, avx) 47 48#define PRED8x8(TYPE, DEPTH, OPT) \ 49void ff_pred8x8_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ 50 ptrdiff_t stride); 51 52PRED8x8(dc, 10, mmxext) 53PRED8x8(dc, 10, sse2) 54PRED8x8(top_dc, 10, sse2) 55PRED8x8(plane, 10, sse2) 56PRED8x8(vertical, 10, sse2) 57PRED8x8(horizontal, 10, sse2) 58 59#define PRED8x8L(TYPE, DEPTH, OPT)\ 60void ff_pred8x8l_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ 61 int has_topleft, \ 62 int has_topright, \ 63 ptrdiff_t stride); 64 65PRED8x8L(dc, 10, sse2) 66PRED8x8L(dc, 10, avx) 67PRED8x8L(128_dc, 10, mmxext) 68PRED8x8L(128_dc, 10, sse2) 69PRED8x8L(top_dc, 10, sse2) 70PRED8x8L(top_dc, 10, avx) 71PRED8x8L(vertical, 10, sse2) 72PRED8x8L(vertical, 10, avx) 73PRED8x8L(horizontal, 10, sse2) 74PRED8x8L(horizontal, 10, ssse3) 75PRED8x8L(horizontal, 10, avx) 76PRED8x8L(down_left, 10, sse2) 77PRED8x8L(down_left, 10, ssse3) 78PRED8x8L(down_left, 10, avx) 79PRED8x8L(down_right, 10, sse2) 80PRED8x8L(down_right, 10, ssse3) 81PRED8x8L(down_right, 10, avx) 82PRED8x8L(vertical_right, 10, sse2) 83PRED8x8L(vertical_right, 10, ssse3) 84PRED8x8L(vertical_right, 10, avx) 85PRED8x8L(horizontal_up, 10, sse2) 86PRED8x8L(horizontal_up, 10, ssse3) 87PRED8x8L(horizontal_up, 10, avx) 88 89#define PRED16x16(TYPE, DEPTH, OPT)\ 90void ff_pred16x16_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ 91 ptrdiff_t stride); 92 93PRED16x16(dc, 10, mmxext) 94PRED16x16(dc, 10, sse2) 95PRED16x16(top_dc, 10, mmxext) 96PRED16x16(top_dc, 10, sse2) 97PRED16x16(128_dc, 10, mmxext) 98PRED16x16(128_dc, 10, sse2) 99PRED16x16(left_dc, 10, mmxext) 100PRED16x16(left_dc, 10, sse2) 101PRED16x16(vertical, 10, mmxext) 102PRED16x16(vertical, 10, sse2) 103PRED16x16(horizontal, 10, mmxext) 104PRED16x16(horizontal, 10, sse2) 105 106/* 8-bit versions */ 107PRED16x16(vertical, 8, mmx) 108PRED16x16(vertical, 8, sse) 109PRED16x16(horizontal, 8, mmx) 110PRED16x16(horizontal, 8, mmxext) 111PRED16x16(horizontal, 8, ssse3) 112PRED16x16(dc, 8, mmxext) 113PRED16x16(dc, 8, sse2) 114PRED16x16(dc, 8, ssse3) 115PRED16x16(plane_h264, 8, mmx) 116PRED16x16(plane_h264, 8, mmxext) 117PRED16x16(plane_h264, 8, sse2) 118PRED16x16(plane_h264, 8, ssse3) 119PRED16x16(plane_rv40, 8, mmx) 120PRED16x16(plane_rv40, 8, mmxext) 121PRED16x16(plane_rv40, 8, sse2) 122PRED16x16(plane_rv40, 8, ssse3) 123PRED16x16(plane_svq3, 8, mmx) 124PRED16x16(plane_svq3, 8, mmxext) 125PRED16x16(plane_svq3, 8, sse2) 126PRED16x16(plane_svq3, 8, ssse3) 127PRED16x16(tm_vp8, 8, mmx) 128PRED16x16(tm_vp8, 8, mmxext) 129PRED16x16(tm_vp8, 8, sse2) 130 131PRED8x8(top_dc, 8, mmxext) 132PRED8x8(dc_rv40, 8, mmxext) 133PRED8x8(dc, 8, mmxext) 134PRED8x8(vertical, 8, mmx) 135PRED8x8(horizontal, 8, mmx) 136PRED8x8(horizontal, 8, mmxext) 137PRED8x8(horizontal, 8, ssse3) 138PRED8x8(plane, 8, mmx) 139PRED8x8(plane, 8, mmxext) 140PRED8x8(plane, 8, sse2) 141PRED8x8(plane, 8, ssse3) 142PRED8x8(tm_vp8, 8, mmx) 143PRED8x8(tm_vp8, 8, mmxext) 144PRED8x8(tm_vp8, 8, sse2) 145PRED8x8(tm_vp8, 8, ssse3) 146 147PRED8x8L(top_dc, 8, mmxext) 148PRED8x8L(top_dc, 8, ssse3) 149PRED8x8L(dc, 8, mmxext) 150PRED8x8L(dc, 8, ssse3) 151PRED8x8L(horizontal, 8, mmxext) 152PRED8x8L(horizontal, 8, ssse3) 153PRED8x8L(vertical, 8, mmxext) 154PRED8x8L(vertical, 8, ssse3) 155PRED8x8L(down_left, 8, mmxext) 156PRED8x8L(down_left, 8, sse2) 157PRED8x8L(down_left, 8, ssse3) 158PRED8x8L(down_right, 8, mmxext) 159PRED8x8L(down_right, 8, sse2) 160PRED8x8L(down_right, 8, ssse3) 161PRED8x8L(vertical_right, 8, mmxext) 162PRED8x8L(vertical_right, 8, sse2) 163PRED8x8L(vertical_right, 8, ssse3) 164PRED8x8L(vertical_left, 8, sse2) 165PRED8x8L(vertical_left, 8, ssse3) 166PRED8x8L(horizontal_up, 8, mmxext) 167PRED8x8L(horizontal_up, 8, ssse3) 168PRED8x8L(horizontal_down, 8, mmxext) 169PRED8x8L(horizontal_down, 8, sse2) 170PRED8x8L(horizontal_down, 8, ssse3) 171 172PRED4x4(dc, 8, mmxext) 173PRED4x4(down_left, 8, mmxext) 174PRED4x4(down_right, 8, mmxext) 175PRED4x4(vertical_left, 8, mmxext) 176PRED4x4(vertical_right, 8, mmxext) 177PRED4x4(horizontal_up, 8, mmxext) 178PRED4x4(horizontal_down, 8, mmxext) 179PRED4x4(tm_vp8, 8, mmx) 180PRED4x4(tm_vp8, 8, mmxext) 181PRED4x4(tm_vp8, 8, ssse3) 182PRED4x4(vertical_vp8, 8, mmxext) 183 184av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, 185 const int bit_depth, 186 const int chroma_format_idc) 187{ 188 int cpu_flags = av_get_cpu_flags(); 189 190 if (bit_depth == 8) { 191 if (EXTERNAL_MMX(cpu_flags)) { 192 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmx; 193 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmx; 194 if (chroma_format_idc <= 1) { 195 h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx; 196 h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmx; 197 } 198 if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { 199 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmx; 200 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmx; 201 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmx; 202 } else { 203 if (chroma_format_idc <= 1) 204 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmx; 205 if (codec_id == AV_CODEC_ID_SVQ3) { 206 if (cpu_flags & AV_CPU_FLAG_CMOV) 207 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_mmx; 208 } else if (codec_id == AV_CODEC_ID_RV40) { 209 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_mmx; 210 } else { 211 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_mmx; 212 } 213 } 214 } 215 216 if (EXTERNAL_MMXEXT(cpu_flags)) { 217 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext; 218 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmxext; 219 if (chroma_format_idc <= 1) 220 h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext; 221 h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext; 222 h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmxext; 223 h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_mmxext; 224 h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_mmxext; 225 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_mmxext; 226 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_mmxext; 227 h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_mmxext; 228 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_mmxext; 229 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_mmxext; 230 h->pred4x4 [DIAG_DOWN_RIGHT_PRED ] = ff_pred4x4_down_right_8_mmxext; 231 h->pred4x4 [VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_8_mmxext; 232 h->pred4x4 [HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_8_mmxext; 233 h->pred4x4 [DC_PRED ] = ff_pred4x4_dc_8_mmxext; 234 if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8 || 235 codec_id == AV_CODEC_ID_H264) { 236 h->pred4x4 [DIAG_DOWN_LEFT_PRED] = ff_pred4x4_down_left_8_mmxext; 237 } 238 if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) { 239 h->pred4x4 [VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_8_mmxext; 240 } 241 if (codec_id != AV_CODEC_ID_RV40) { 242 h->pred4x4 [HOR_UP_PRED ] = ff_pred4x4_horizontal_up_8_mmxext; 243 } 244 if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) { 245 if (chroma_format_idc <= 1) { 246 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_8_mmxext; 247 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmxext; 248 } 249 } 250 if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { 251 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmxext; 252 h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_8_mmxext; 253 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmxext; 254 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmxext; 255 h->pred4x4 [VERT_PRED ] = ff_pred4x4_vertical_vp8_8_mmxext; 256 } else { 257 if (chroma_format_idc <= 1) 258 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmxext; 259 if (codec_id == AV_CODEC_ID_SVQ3) { 260 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmxext; 261 } else if (codec_id == AV_CODEC_ID_RV40) { 262 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmxext; 263 } else { 264 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmxext; 265 } 266 } 267 } 268 269 if (EXTERNAL_SSE(cpu_flags)) { 270 h->pred16x16[VERT_PRED8x8] = ff_pred16x16_vertical_8_sse; 271 } 272 273 if (EXTERNAL_SSE2(cpu_flags)) { 274 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_sse2; 275 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_sse2; 276 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_sse2; 277 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_sse2; 278 h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_sse2; 279 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_sse2; 280 if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { 281 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_sse2; 282 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_sse2; 283 } else { 284 if (chroma_format_idc <= 1) 285 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_sse2; 286 if (codec_id == AV_CODEC_ID_SVQ3) { 287 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_sse2; 288 } else if (codec_id == AV_CODEC_ID_RV40) { 289 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_sse2; 290 } else { 291 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_sse2; 292 } 293 } 294 } 295 296 if (EXTERNAL_SSSE3(cpu_flags)) { 297 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_ssse3; 298 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_ssse3; 299 if (chroma_format_idc <= 1) 300 h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_ssse3; 301 h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_ssse3; 302 h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_ssse3; 303 h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_ssse3; 304 h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_ssse3; 305 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_ssse3; 306 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_ssse3; 307 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_ssse3; 308 h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_ssse3; 309 h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_ssse3; 310 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_ssse3; 311 if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { 312 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_ssse3; 313 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_ssse3; 314 } else { 315 if (chroma_format_idc <= 1) 316 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_ssse3; 317 if (codec_id == AV_CODEC_ID_SVQ3) { 318 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_ssse3; 319 } else if (codec_id == AV_CODEC_ID_RV40) { 320 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_ssse3; 321 } else { 322 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_ssse3; 323 } 324 } 325 } 326 } else if (bit_depth == 10) { 327 if (EXTERNAL_MMXEXT(cpu_flags)) { 328 h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext; 329 h->pred4x4[HOR_UP_PRED ] = ff_pred4x4_horizontal_up_10_mmxext; 330 331 if (chroma_format_idc <= 1) 332 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_mmxext; 333 334 h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_mmxext; 335 336 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_mmxext; 337 h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_mmxext; 338 h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_mmxext; 339 h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_mmxext; 340 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_mmxext; 341 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_mmxext; 342 } 343 if (EXTERNAL_SSE2(cpu_flags)) { 344 h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_sse2; 345 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_sse2; 346 h->pred4x4[VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_10_sse2; 347 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_sse2; 348 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_sse2; 349 350 if (chroma_format_idc <= 1) { 351 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_sse2; 352 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_10_sse2; 353 h->pred8x8[PLANE_PRED8x8 ] = ff_pred8x8_plane_10_sse2; 354 h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vertical_10_sse2; 355 h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_10_sse2; 356 } 357 358 h->pred8x8l[VERT_PRED ] = ff_pred8x8l_vertical_10_sse2; 359 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_sse2; 360 h->pred8x8l[DC_PRED ] = ff_pred8x8l_dc_10_sse2; 361 h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_sse2; 362 h->pred8x8l[TOP_DC_PRED ] = ff_pred8x8l_top_dc_10_sse2; 363 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_sse2; 364 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_sse2; 365 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_sse2; 366 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_sse2; 367 368 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_sse2; 369 h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_sse2; 370 h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_sse2; 371 h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_sse2; 372 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_sse2; 373 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_sse2; 374 } 375 if (EXTERNAL_SSSE3(cpu_flags)) { 376 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_ssse3; 377 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_ssse3; 378 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_ssse3; 379 380 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_ssse3; 381 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_ssse3; 382 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_ssse3; 383 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_ssse3; 384 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_ssse3; 385 } 386 if (EXTERNAL_AVX(cpu_flags)) { 387 h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_avx; 388 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_avx; 389 h->pred4x4[VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_10_avx; 390 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_avx; 391 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_avx; 392 393 h->pred8x8l[VERT_PRED ] = ff_pred8x8l_vertical_10_avx; 394 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_avx; 395 h->pred8x8l[DC_PRED ] = ff_pred8x8l_dc_10_avx; 396 h->pred8x8l[TOP_DC_PRED ] = ff_pred8x8l_top_dc_10_avx; 397 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_avx; 398 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_avx; 399 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_avx; 400 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_avx; 401 } 402 } 403} 404