• Martin Storsjö's avatar
    aarch64: vp9itxfm: Do separate functions for half/quarter idct16 and idct32 · 9532a7d4
    Martin Storsjö authored
    This work is sponsored by, and copyright, Google.
    
    This avoids loading and calculating coefficients that we know will
    be zero, and avoids filling the temp buffer with zeros in places
    where we know the second pass won't read.
    
    This gives a pretty substantial speedup for the smaller subpartitions.
    
    The code size increases from 14740 bytes to 24292 bytes.
    
    The idct16/32_end macros are moved above the individual functions; the
    instructions themselves are unchanged, but since new functions are added
    at the same place where the code is moved from, the diff looks rather
    messy.
    
    Before:
    vp9_inv_dct_dct_16x16_sub1_add_neon:     236.7
    vp9_inv_dct_dct_16x16_sub2_add_neon:    1051.0
    vp9_inv_dct_dct_16x16_sub4_add_neon:    1051.0
    vp9_inv_dct_dct_16x16_sub8_add_neon:    1051.0
    vp9_inv_dct_dct_16x16_sub12_add_neon:   1387.4
    vp9_inv_dct_dct_16x16_sub16_add_neon:   1387.6
    vp9_inv_dct_dct_32x32_sub1_add_neon:     554.1
    vp9_inv_dct_dct_32x32_sub2_add_neon:    5198.5
    vp9_inv_dct_dct_32x32_sub4_add_neon:    5198.6
    vp9_inv_dct_dct_32x32_sub8_add_neon:    5196.3
    vp9_inv_dct_dct_32x32_sub12_add_neon:   6183.4
    vp9_inv_dct_dct_32x32_sub16_add_neon:   6174.3
    vp9_inv_dct_dct_32x32_sub20_add_neon:   7151.4
    vp9_inv_dct_dct_32x32_sub24_add_neon:   7145.3
    vp9_inv_dct_dct_32x32_sub28_add_neon:   8119.3
    vp9_inv_dct_dct_32x32_sub32_add_neon:   8118.7
    
    After:
    vp9_inv_dct_dct_16x16_sub1_add_neon:     236.7
    vp9_inv_dct_dct_16x16_sub2_add_neon:     640.8
    vp9_inv_dct_dct_16x16_sub4_add_neon:     639.0
    vp9_inv_dct_dct_16x16_sub8_add_neon:     842.0
    vp9_inv_dct_dct_16x16_sub12_add_neon:   1388.3
    vp9_inv_dct_dct_16x16_sub16_add_neon:   1389.3
    vp9_inv_dct_dct_32x32_sub1_add_neon:     554.1
    vp9_inv_dct_dct_32x32_sub2_add_neon:    3685.5
    vp9_inv_dct_dct_32x32_sub4_add_neon:    3685.1
    vp9_inv_dct_dct_32x32_sub8_add_neon:    3684.4
    vp9_inv_dct_dct_32x32_sub12_add_neon:   5312.2
    vp9_inv_dct_dct_32x32_sub16_add_neon:   5315.4
    vp9_inv_dct_dct_32x32_sub20_add_neon:   7154.9
    vp9_inv_dct_dct_32x32_sub24_add_neon:   7154.5
    vp9_inv_dct_dct_32x32_sub28_add_neon:   8126.6
    vp9_inv_dct_dct_32x32_sub32_add_neon:   8127.2
    
    This is cherrypicked from libav commit
    a63da451.
    Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
    9532a7d4
vp9itxfm_neon.S 61.9 KB