Showing the changes to libavcodec/mips (1 of 1 file). Show all
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 | * This file is part of FFmpeg. | 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 | ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); | 302 | ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride); |
| 303 | ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); | 303 | ST_SH4(in0_l, in1_l, in2_l, in3_l, (dst + 8), dst_stride); |
| 304 | } else if (0 == (height % 8)) { | 304 | } else if (0 == (height % 8)) { |
| 305 | hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, | 305 | uint32_t loop_cnt; |
| 306 | height, 16); | 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 | int16_t *dst, int32_t dst_stride, | 337 | int16_t *dst, int32_t dst_stride, |
| 312 | int32_t height) | 338 | int32_t height) |
| 313 | { | 339 | { |
| 314 | hevc_copy_16multx8mult_msa(src, src_stride, dst, dst_stride, height, 16); | 340 | uint32_t loop_cnt; |
| 315 | hevc_copy_8w_msa(src + 16, src_stride, dst + 16, dst_stride, height); | 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 | static void hevc_copy_32w_msa(uint8_t *src, int32_t src_stride, | 365 | static void hevc_copy_32w_msa(uint8_t *src, int32_t src_stride, |
| 319 | int16_t *dst, int32_t dst_stride, | 366 | int16_t *dst, int32_t dst_stride, |
| 320 | int32_t height) | 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 | static void hevc_copy_48w_msa(uint8_t *src, int32_t src_stride, | 403 | static void hevc_copy_48w_msa(uint8_t *src, int32_t src_stride, |
| 326 | int16_t *dst, int32_t dst_stride, | 404 | int16_t *dst, int32_t dst_stride, |
| 327 | int32_t height) | 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 | static void hevc_copy_64w_msa(uint8_t *src, int32_t src_stride, | 454 | static void hevc_copy_64w_msa(uint8_t *src, int32_t src_stride, |
| 333 | int16_t *dst, int32_t dst_stride, | 455 | int16_t *dst, int32_t dst_stride, |
| 334 | int32_t height) | 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 | static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, | 491 | static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride, |