Unified · Split
| @@ -1,5 +1,5 @@ | ||
| 1 | 1 | /* |
| 2 | − * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com) | |
| 2 | + * Copyright (c) 2015 - 2017 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com) | |
| 3 | 3 | * |
| 4 | 4 | * This file is part of FFmpeg. |
| 5 | 5 | * |
| @@ -302,8 +302,34 @@ static void hevc_copy_16w_msa(uint8_t *src, int32_t src_stride, · 296 unmodified lines | ||
| 302 | 302 | ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); |
| 303 | 303 | ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); |
| 304 | 304 | } else if (0 == (height % 8)) { |
| 305 | − hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, | |
| 306 | − height, 16); | |
| 305 | + uint32_t loop_cnt; | |
| 306 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; | |
| 307 | + v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; | |
| 308 | + | |
| 309 | + for (loop_cnt = (height >> 3); loop_cnt--;) { | |
| 310 | + LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, | |
| 311 | + src7); | |
| 312 | + src += (8 * src_stride); | |
| 313 | + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r, | |
| 314 | + in1_r, in2_r, in3_r); | |
| 315 | + ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l, | |
| 316 | + in1_l, in2_l, in3_l); | |
| 317 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 318 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 319 | + ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); | |
| 320 | + ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); | |
| 321 | + dst += (4 * dst_stride); | |
| 322 | + | |
| 323 | + ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r, | |
| 324 | + in1_r, in2_r, in3_r); | |
| 325 | + ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_l, | |
| 326 | + in1_l, in2_l, in3_l); | |
| 327 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 328 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 329 | + ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); | |
| 330 | + ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); | |
| 331 | + dst += (4 * dst_stride); | |
| 332 | + } | |
| 307 | 333 | } |
| 308 | 334 | } |
| 309 | 335 | |
| @@ -311,29 +337,155 @@ static void hevc_copy_24w_msa(uint8_t *src, int32_t src_stride, · 1 unmodified line | ||
| 311 | 337 | int16_t *dst, int32_t dst_stride, |
| 312 | 338 | int32_t height) |
| 313 | 339 | { |
| 314 | − hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 16); | |
| 315 | − hevc_copy_8w_msa(src + 16, src_stride, dst + 16, dst_stride, height); | |
| 340 | + uint32_t loop_cnt; | |
| 341 | + v16i8 zero = { 0 }; | |
| 342 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; | |
| 343 | + v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; | |
| 344 | + | |
| 345 | + for (loop_cnt = (height >> 2); loop_cnt--;) { | |
| 346 | + LD_SB4(src, src_stride, src0, src1, src2, src3); | |
| 347 | + LD_SB4((src + 16), src_stride, src4, src5, src6, src7); | |
| 348 | + src += (4 * src_stride); | |
| 349 | + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r, in1_r, | |
| 350 | + in2_r, in3_r); | |
| 351 | + ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l, in1_l, | |
| 352 | + in2_l, in3_l); | |
| 353 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 354 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 355 | + ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); | |
| 356 | + ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); | |
| 357 | + ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r, in1_r, | |
| 358 | + in2_r, in3_r); | |
| 359 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 360 | + ST_SH4(in0_r, in1_r, in2_r, in3_r, (dst + 16), dst_stride); | |
| 361 | + dst += (4 * dst_stride); | |
| 362 | + } | |
| 316 | 363 | } |
| 317 | 364 | |
| 318 | 365 | static void hevc_copy_32w_msa(uint8_t *src, int32_t src_stride, |
| 319 | 366 | int16_t *dst, int32_t dst_stride, |
| 320 | 367 | int32_t height) |
| 321 | 368 | { |
| 322 | − hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 32); | |
| 369 | + uint32_t loop_cnt; | |
| 370 | + v16i8 zero = { 0 }; | |
| 371 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; | |
| 372 | + v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; | |
| 373 | + | |
| 374 | + for (loop_cnt = (height >> 2); loop_cnt--;) { | |
| 375 | + LD_SB4(src, src_stride, src0, src2, src4, src6); | |
| 376 | + LD_SB4((src + 16), src_stride, src1, src3, src5, src7); | |
| 377 | + src += (4 * src_stride); | |
| 378 | + | |
| 379 | + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_r, in1_r, | |
| 380 | + in2_r, in3_r); | |
| 381 | + ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, in0_l, in1_l, | |
| 382 | + in2_l, in3_l); | |
| 383 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 384 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 385 | + ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8); | |
| 386 | + dst += dst_stride; | |
| 387 | + ST_SH4(in2_r, in2_l, in3_r, in3_l, dst, 8); | |
| 388 | + dst += dst_stride; | |
| 389 | + | |
| 390 | + ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_r, in1_r, | |
| 391 | + in2_r, in3_r); | |
| 392 | + ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, in0_l, in1_l, | |
| 393 | + in2_l, in3_l); | |
| 394 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 395 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 396 | + ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8); | |
| 397 | + dst += dst_stride; | |
| 398 | + ST_SH4(in2_r, in2_l, in3_r, in3_l, dst, 8); | |
| 399 | + dst += dst_stride; | |
| 400 | + } | |
| 323 | 401 | } |
| 324 | 402 | |
| 325 | 403 | static void hevc_copy_48w_msa(uint8_t *src, int32_t src_stride, |
| 326 | 404 | int16_t *dst, int32_t dst_stride, |
| 327 | 405 | int32_t height) |
| 328 | 406 | { |
| 329 | − hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 48); | |
| 407 | + uint32_t loop_cnt; | |
| 408 | + v16i8 zero = { 0 }; | |
| 409 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; | |
| 410 | + v16i8 src8, src9, src10, src11; | |
| 411 | + v8i16 in0_r, in1_r, in2_r, in3_r, in4_r, in5_r; | |
| 412 | + v8i16 in0_l, in1_l, in2_l, in3_l, in4_l, in5_l; | |
| 413 | + | |
| 414 | + for (loop_cnt = (height >> 2); loop_cnt--;) { | |
| 415 | + LD_SB3(src, 16, src0, src1, src2); | |
| 416 | + src += src_stride; | |
| 417 | + LD_SB3(src, 16, src3, src4, src5); | |
| 418 | + src += src_stride; | |
| 419 | + LD_SB3(src, 16, src6, src7, src8); | |
| 420 | + src += src_stride; | |
| 421 | + LD_SB3(src, 16, src9, src10, src11); | |
| 422 | + src += src_stride; | |
| 423 | + | |
| 424 | + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, | |
| 425 | + in0_r, in1_r, in2_r, in3_r); | |
| 426 | + ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, | |
| 427 | + in0_l, in1_l, in2_l, in3_l); | |
| 428 | + ILVR_B2_SH(zero, src4, zero, src5, in4_r, in5_r); | |
| 429 | + ILVL_B2_SH(zero, src4, zero, src5, in4_l, in5_l); | |
| 430 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 431 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 432 | + SLLI_4V(in4_r, in5_r, in4_l, in5_l, 6); | |
| 433 | + ST_SH6(in0_r, in0_l, in1_r, in1_l, in2_r, in2_l, dst, 8); | |
| 434 | + dst += dst_stride; | |
| 435 | + ST_SH6(in3_r, in3_l, in4_r, in4_l, in5_r, in5_l, dst, 8); | |
| 436 | + dst += dst_stride; | |
| 437 | + | |
| 438 | + ILVR_B4_SH(zero, src6, zero, src7, zero, src8, zero, src9, | |
| 439 | + in0_r, in1_r, in2_r, in3_r); | |
| 440 | + ILVL_B4_SH(zero, src6, zero, src7, zero, src8, zero, src9, | |
| 441 | + in0_l, in1_l, in2_l, in3_l); | |
| 442 | + ILVR_B2_SH(zero, src10, zero, src11, in4_r, in5_r); | |
| 443 | + ILVL_B2_SH(zero, src10, zero, src11, in4_l, in5_l); | |
| 444 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 445 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 446 | + SLLI_4V(in4_r, in5_r, in4_l, in5_l, 6); | |
| 447 | + ST_SH6(in0_r, in0_l, in1_r, in1_l, in2_r, in2_l, dst, 8); | |
| 448 | + dst += dst_stride; | |
| 449 | + ST_SH6(in3_r, in3_l, in4_r, in4_l, in5_r, in5_l, dst, 8); | |
| 450 | + dst += dst_stride; | |
| 451 | + } | |
| 330 | 452 | } |
| 331 | 453 | |
| 332 | 454 | static void hevc_copy_64w_msa(uint8_t *src, int32_t src_stride, |
| 333 | 455 | int16_t *dst, int32_t dst_stride, |
| 334 | 456 | int32_t height) |
| 335 | 457 | { |
| 336 | − hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 64); | |
| 458 | + uint32_t loop_cnt; | |
| 459 | + v16i8 zero = { 0 }; | |
| 460 | + v16i8 src0, src1, src2, src3, src4, src5, src6, src7; | |
| 461 | + v8i16 in0_r, in1_r, in2_r, in3_r, in0_l, in1_l, in2_l, in3_l; | |
| 462 | + | |
| 463 | + for (loop_cnt = (height >> 1); loop_cnt--;) { | |
| 464 | + LD_SB4(src, 16, src0, src1, src2, src3); | |
| 465 | + src += src_stride; | |
| 466 | + LD_SB4(src, 16, src4, src5, src6, src7); | |
| 467 | + src += src_stride; | |
| 468 | + | |
| 469 | + ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, | |
| 470 | + in0_r, in1_r, in2_r, in3_r); | |
| 471 | + ILVL_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3, | |
| 472 | + in0_l, in1_l, in2_l, in3_l); | |
| 473 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 474 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 475 | + ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8); | |
| 476 | + ST_SH4(in2_r, in2_l, in3_r, in3_l, (dst + 32), 8); | |
| 477 | + dst += dst_stride; | |
| 478 | + | |
| 479 | + ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, | |
| 480 | + in0_r, in1_r, in2_r, in3_r); | |
| 481 | + ILVL_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7, | |
| 482 | + in0_l, in1_l, in2_l, in3_l); | |
| 483 | + SLLI_4V(in0_r, in1_r, in2_r, in3_r, 6); | |
| 484 | + SLLI_4V(in0_l, in1_l, in2_l, in3_l, 6); | |
| 485 | + ST_SH4(in0_r, in0_l, in1_r, in1_l, dst, 8); | |
| 486 | + ST_SH4(in2_r, in2_l, in3_r, in3_l, (dst + 32), 8); | |
| 487 | + dst += dst_stride; | |
| 488 | + } | |
| 337 | 489 | } |
| 338 | 490 | |
| 339 | 491 | static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, |