These are really just wrappers for idct4_add16intra functions, which are in turn mostly wrappers for idct4_add and idct4_dc_add functions. For benchmarks refer to the later two sets.
Showing the changes to libavcodec (2 of 2 files). Show all
Unified · Split
| @@ -54,7 +54,13 @@ void ff_h264_idct_add16intra_##depth##_rvv(uint8_t *d, const int *soffset, \ · 53 unmodified lines | ||
| 54 | 54 | const uint8_t nnzc[5 * 8]); \ |
| 55 | 55 | void ff_h264_idct8_add4_##depth##_rvv(uint8_t *d, const int *soffset, \ |
| 56 | 56 | int16_t *s, int stride, \ |
| 57 | − const uint8_t nnzc[5 * 8]); | |
| 57 | + const uint8_t nnzc[5 * 8]); \ | |
| 58 | +void ff_h264_idct4_add8_##depth##_rvv(uint8_t **d, const int *soffset, \ | |
| 59 | + int16_t *s, int stride, \ | |
| 60 | + const uint8_t nnzc[5 * 8]); \ | |
| 61 | +void ff_h264_idct4_add8_422_##depth##_rvv(uint8_t **d, const int *soffset, \ | |
| 62 | + int16_t *s, int stride, \ | |
| 63 | + const uint8_t nnzc[5 * 8]); | |
| 58 | 64 | |
| 59 | 65 | IDCT_DEPTH(8) |
| 60 | 66 | IDCT_DEPTH(9) |
| @@ -104,6 +110,10 @@ av_cold void ff_h264dsp_init_riscv(H264DSPContext *dsp, const int bit_depth, · 43 unmodified lines | ||
| 104 | 110 | dsp->h264_idct_add16intra = ff_h264_idct_add16intra_8_rvv; |
| 105 | 111 | # if __riscv_xlen == 64 |
| 106 | 112 | dsp->h264_idct8_add4 = ff_h264_idct8_add4_8_rvv; |
| 113 | + if (chroma_format_idc <= 1) | |
| 114 | + dsp->h264_idct_add8 = ff_h264_idct4_add8_8_rvv; | |
| 115 | + else | |
| 116 | + dsp->h264_idct_add8 = ff_h264_idct4_add8_422_8_rvv; | |
| 107 | 117 | # endif |
| 108 | 118 | } |
| 109 | 119 | if (flags & AV_CPU_FLAG_RVV_I64) { |
| @@ -123,10 +133,16 @@ av_cold void ff_h264dsp_init_riscv(H264DSPContext *dsp, const int bit_depth, · 13 unmodified lines | ||
| 123 | 133 | if (zvl128b && (flags & AV_CPU_FLAG_RVB)) { \ |
| 124 | 134 | dsp->h264_idct_dc_add = ff_h264_idct4_dc_add_##depth##_rvv; \ |
| 125 | 135 | dsp->h264_idct8_dc_add = ff_h264_idct8_dc_add_##depth##_rvv; \ |
| 136 | + dsp->h264_idct_add16 = ff_h264_idct_add16_##depth##_rvv; \ | |
| 137 | + dsp->h264_idct_add16intra = \ | |
| 138 | + ff_h264_idct_add16intra_##depth##_rvv; \ | |
| 126 | 139 | if (__riscv_xlen == 64) { \ |
| 127 | − dsp->h264_idct_add16 = ff_h264_idct_add16_##depth##_rvv; \ | |
| 128 | − dsp->h264_idct_add16intra = \ | |
| 129 | − ff_h264_idct_add16intra_##depth##_rvv; \ | |
| 140 | + if (chroma_format_idc <= 1) \ | |
| 141 | + dsp->h264_idct_add8 = \ | |
| 142 | + ff_h264_idct4_add8_##depth##_rvv; \ | |
| 143 | + else \ | |
| 144 | + dsp->h264_idct_add8 = \ | |
| 145 | + ff_h264_idct4_add8_422_##depth##_rvv; \ | |
| 130 | 146 | } \ |
| 131 | 147 | } \ |
| 132 | 148 | if (__riscv_xlen == 64 && (flags & AV_CPU_FLAG_RVB)) \ |
| @@ -57,7 +57,7 @@ endfunc · 56 unmodified lines | ||
| 57 | 57 | func ff_h264_idct_add_8_rvv, zve32x |
| 58 | 58 | lpad 0 |
| 59 | 59 | csrwi vxrm, 0 |
| 60 | −.Lidct_add4_8_rvv: | |
| 60 | +.Lidct4_add_8_rvv: | |
| 61 | 61 | vsetivli zero, 4, e16, mf2, ta, ma |
| 62 | 62 | addi t1, a1, 1 * 4 * 2 |
| 63 | 63 | vle16.v v0, (a1) |
| @@ -111,7 +111,7 @@ endfunc · 47 unmodified lines | ||
| 111 | 111 | |
| 112 | 112 | func ff_h264_idct_add_16_rvv, zve32x |
| 113 | 113 | csrwi vxrm, 0 |
| 114 | −.Lidct_add4_16_rvv: | |
| 114 | +.Lidct4_add_16_rvv: | |
| 115 | 115 | vsetivli zero, 4, e32, m1, ta, ma |
| 116 | 116 | addi t1, a1, 1 * 4 * 4 |
| 117 | 117 | vle32.v v0, (a1) |
| @@ -543,19 +543,26 @@ endfunc · 425 unmodified lines | ||
| 543 | 543 | .endr |
| 544 | 544 | |
| 545 | 545 | const ff_h264_scan8 |
| 546 | − .byte 014, 015, 024, 025, 016, 017, 026, 027 | |
| 547 | − .byte 034, 035, 044, 045, 036, 037, 046, 047 | |
| 546 | + .byte 014, 015, 024, 025, 016, 017, 026, 027 | |
| 547 | + .byte 034, 035, 044, 045, 036, 037, 046, 047 | |
| 548 | + .byte 064, 065, 074, 075, 066, 067, 076, 077 | |
| 549 | + .byte 0104, 0105, 0114, 0115, 0106, 0107, 0116, 0117 | |
| 550 | + .byte 0134, 0135, 0144, 0145, 0136, 0137, 0146, 0147 | |
| 551 | + .byte 0154, 0155, 0164, 0165, 0156, 0157, 0166, 0167 | |
| 548 | 552 | endconst |
| 549 | 553 | |
| 550 | −.macro idct4_adds type, depth | |
| 554 | +.macro idct4_add16 type, depth | |
| 551 | 555 | func ff_h264_idct_add\type\()_\depth\()_rvv, zve32x, b |
| 552 | 556 | .if \depth == 8 |
| 553 | 557 | lpad 0 |
| 554 | 558 | .endif |
| 555 | 559 | csrwi vxrm, 0 |
| 556 | 560 | lla t0, ff_h264_scan8 |
| 557 | − li t1, 32 * (\depth / 8) | |
| 558 | 561 | vsetivli zero, 16, e8, m1, ta, ma |
| 562 | +.ifc \type, 16intra | |
| 563 | +.Lidct4_add4_\depth\()_rvv: | |
| 564 | +.endif | |
| 565 | + li t1, 32 * (\depth / 8) | |
| 559 | 566 | vle8.v v8, (t0) |
| 560 | 567 | .if \depth == 8 |
| 561 | 568 | vlse16.v v16, (a2), t1 |
| @@ -587,7 +594,7 @@ func ff_h264_idct_add\type\()_\depth\()_rvv, zve32x, b · 25 unmodified lines | ||
| 587 | 594 | mv t5, a1 |
| 588 | 595 | mv a1, a2 |
| 589 | 596 | mv a2, a3 |
| 590 | − li a3, 16 | |
| 597 | + csrr a3, vl | |
| 591 | 598 | mv a7, ra |
| 592 | 599 | 1: |
| 593 | 600 | andi t0, a4, 1 |
| @@ -603,7 +610,7 @@ func ff_h264_idct_add\type\()_\depth\()_rvv, zve32x, b · 9 unmodified lines | ||
| 603 | 610 | .else |
| 604 | 611 | beqz t0, 2f # if (nnzc[scan8[i]]) |
| 605 | 612 | .endif |
| 606 | − jal .Lidct_add4_\depth\()_rvv | |
| 613 | + jal .Lidct4_add_\depth\()_rvv | |
| 607 | 614 | j 3f |
| 608 | 615 | 2: |
| 609 | 616 | .ifnc \type, 16 |
| @@ -621,9 +628,67 @@ func ff_h264_idct_add\type\()_\depth\()_rvv, zve32x, b · 11 unmodified lines | ||
| 621 | 628 | endfunc |
| 622 | 629 | .endm |
| 623 | 630 | |
| 631 | +.macro idct4_add8 type, depth | |
| 632 | +func ff_h264_idct4_add\type\()_\depth\()_rvv, zve32x | |
| 633 | +.if \depth == 8 | |
| 634 | + lpad 0 | |
| 635 | +.endif | |
| 636 | + csrwi vxrm, 0 | |
| 637 | + addi sp, sp, -32 | |
| 638 | + addi a2, a2, 16 * 16 * 2 * (\depth / 8) # &block[16 * 16] | |
| 639 | + lla t0, ff_h264_scan8 + 16 | |
| 640 | + sd s0, 0(sp) | |
| 641 | + sd ra, 8(sp) | |
| 642 | + mv s0, sp | |
| 643 | + sd a0, 16(sp) | |
| 644 | + sd a4, 24(sp) | |
| 645 | + ld a0, 0(a0) # dest[0] | |
| 646 | + addi a1, a1, 16 * 4 # &block_offset[16] | |
| 647 | + vsetivli zero, 4, e8, mf4, ta, ma | |
| 648 | + jal .Lidct4_add4_\depth\()_rvv | |
| 649 | + | |
| 650 | + ld a4, 24(sp) # nnzc | |
| 651 | + ld a0, 16(sp) | |
| 652 | + mv a3, a2 # stride | |
| 653 | + addi a2, a1, (16 - 4) * 16 * 2 * (\depth / 8) # &block[32 * 16] | |
| 654 | + addi a1, t5, (16 - 4) * 4 # &block_offset[32] | |
| 655 | + ld a0, 8(a0) # dest[1] | |
| 656 | + lla t0, ff_h264_scan8 + 32 | |
| 657 | +.ifc \type, 8_422 | |
| 658 | + vsetivli zero, 4, e8, mf4, ta, ma | |
| 659 | + jal .Lidct4_add4_\depth\()_rvv | |
| 660 | + | |
| 661 | + ld a4, 24(sp) # nnzc | |
| 662 | + ld a0, 16(sp) | |
| 663 | + mv a3, a2 # stride | |
| 664 | + addi a2, a1, (-12- 4) * 16 * 2 * (\depth / 8) # &block[20 * 16] | |
| 665 | + addi a1, t5, (-8 - 4) * 4 # &block_offset[24] | |
| 666 | + ld a0, 0(a0) # dest[0] | |
| 667 | + lla t0, ff_h264_scan8 + 24 | |
| 668 | + vsetivli zero, 4, e8, mf4, ta, ma | |
| 669 | + jal .Lidct4_add4_\depth\()_rvv | |
| 670 | + | |
| 671 | + ld a4, 24(sp) # nnzc | |
| 672 | + ld a0, 16(sp) | |
| 673 | + mv a3, a2 # stride | |
| 674 | + addi a2, a1, (16 - 4) * 16 * 2 * (\depth / 8) # &block[36 * 16] | |
| 675 | + addi a1, t5, (16 - 4) * 4 # &block_offset[40] | |
| 676 | + ld a0, 8(a0) # dest[1] | |
| 677 | + lla t0, ff_h264_scan8 + 40 | |
| 678 | +.endif | |
| 679 | + ld ra, 8(sp) | |
| 680 | + ld s0, 0(sp) | |
| 681 | + addi sp, sp, 32 | |
| 682 | + vsetivli zero, 4, e8, mf4, ta, ma | |
| 683 | + j .Lidct4_add4_\depth\()_rvv | |
| 684 | +endfunc | |
| 685 | +.endm | |
| 686 | + | |
| 624 | 687 | .irp depth, 8, 16 |
| 625 | −idct4_adds 16, \depth | |
| 626 | −idct4_adds 16intra, \depth | |
| 688 | +idct4_add16 16, \depth | |
| 689 | +idct4_add16 16intra, \depth | |
| 690 | +idct4_add8 8, \depth | |
| 691 | +idct4_add8 8_422, \depth | |
| 627 | 692 | |
| 628 | 693 | #if (__riscv_xlen == 64) |
| 629 | 694 | func ff_h264_idct8_add4_\depth\()_rvv, zve32x, b |
| @@ -724,5 +789,17 @@ func ff_h264_idct8_add4_\depth\()_rvv, zve32x · 94 unmodified lines | ||
| 724 | 789 | li a5, (1 << \depth) - 1 |
| 725 | 790 | j ff_h264_idct8_add4_16_rvv |
| 726 | 791 | endfunc |
| 792 | + | |
| 793 | +func ff_h264_idct4_add8_\depth\()_rvv, zve32x | |
| 794 | + lpad 0 | |
| 795 | + li a5, (1 << \depth) - 1 | |
| 796 | + j ff_h264_idct4_add8_16_rvv | |
| 797 | +endfunc | |
| 798 | + | |
| 799 | +func ff_h264_idct4_add8_422_\depth\()_rvv, zve32x | |
| 800 | + lpad 0 | |
| 801 | + li a5, (1 << \depth) - 1 | |
| 802 | + j ff_h264_idct4_add8_422_16_rvv | |
| 803 | +endfunc | |
| 727 | 804 | #endif |
| 728 | 805 | .endr |