tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

vp8_armv6.S (8638B)


      1 /*
      2 * Copyright (C) 2010 Mans Rullgard
      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/arm/asm.S"
     22 
     23 .macro rac_get_prob     h, bs, buf, cw, pr, t0, t1
     24        adds            \bs, \bs, \t0
     25        lsl             \cw, \cw, \t0
     26        lsl             \t0, \h,  \t0
     27        rsb             \h,  \pr, #256
     28        it              cs
     29        ldrhcs          \t1, [\buf], #2
     30        smlabb          \h,  \t0, \pr, \h
     31 T       itttt           cs
     32        rev16cs         \t1, \t1
     33 A       orrcs           \cw, \cw, \t1, lsl \bs
     34 T       lslcs           \t1, \t1, \bs
     35 T       orrcs           \cw, \cw, \t1
     36        subcs           \bs, \bs, #16
     37        lsr             \h,  \h,  #8
     38        cmp             \cw, \h,  lsl #16
     39        itt             ge
     40        subge           \cw, \cw, \h,  lsl #16
     41        subge           \h,  \t0, \h
     42 .endm
     43 
     44 .macro rac_get_128      h, bs, buf, cw, t0, t1
     45        adds            \bs, \bs, \t0
     46        lsl             \cw, \cw, \t0
     47        lsl             \t0, \h,  \t0
     48        it              cs
     49        ldrhcs          \t1, [\buf], #2
     50        mov             \h,  #128
     51        it              cs
     52        rev16cs         \t1, \t1
     53        add             \h,  \h,  \t0, lsl #7
     54 A       orrcs           \cw, \cw, \t1, lsl \bs
     55 T       ittt            cs
     56 T       lslcs           \t1, \t1, \bs
     57 T       orrcs           \cw, \cw, \t1
     58        subcs           \bs, \bs, #16
     59        lsr             \h,  \h,  #8
     60        cmp             \cw, \h,  lsl #16
     61        itt             ge
     62        subge           \cw, \cw, \h,  lsl #16
     63        subge           \h,  \t0, \h
     64 .endm
     65 
     66 function ff_decode_block_coeffs_armv6, export=1
     67        push            {r0,r1,r4-r11,lr}
     68        movrelx         lr,  X(ff_vpx_norm_shift)
     69        ldrd            r4,  r5,  [sp, #44]             @ token_prob, qmul
     70        cmp             r3,  #0
     71        ldr             r11, [r5]
     72        ldm             r0,  {r5-r7}                    @ high, bits, buf
     73        it              ne
     74        pkhtbne         r11, r11, r11, asr #16
     75        ldr             r8,  [r0, #16]                  @ code_word
     76 0:
     77        ldrb            r9,  [lr, r5]
     78        add             r3,  r3,  #1
     79        ldrb            r0,  [r4, #1]
     80        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
     81        blt             2f
     82 
     83        ldrb            r9,  [lr, r5]
     84        ldrb            r0,  [r4, #2]
     85        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
     86        ldrb            r9,  [lr, r5]
     87        bge             3f
     88 
     89        add             r4,  r3,  r3,  lsl #5
     90        sxth            r12, r11
     91        add             r4,  r4,  r2
     92        adds            r6,  r6,  r9
     93        add             r4,  r4,  #11
     94        lsl             r8,  r8,  r9
     95        it              cs
     96        ldrhcs          r10, [r7], #2
     97        lsl             r9,  r5,  r9
     98        mov             r5,  #128
     99        it              cs
    100        rev16cs         r10, r10
    101        add             r5,  r5,  r9,  lsl #7
    102 T       ittt            cs
    103 T       lslcs           r10, r10, r6
    104 T       orrcs           r8,  r8,  r10
    105 A       orrcs           r8,  r8,  r10, lsl r6
    106        subcs           r6,  r6,  #16
    107        lsr             r5,  r5,  #8
    108        cmp             r8,  r5,  lsl #16
    109        movrel          r10, zigzag_scan-1
    110        itt             ge
    111        subge           r8,  r8,  r5,  lsl #16
    112        subge           r5,  r9,  r5
    113        ldrb            r10, [r10, r3]
    114        it              ge
    115        rsbge           r12, r12, #0
    116        cmp             r3,  #16
    117        strh            r12, [r1, r10]
    118        bge             6f
    119 5:
    120        ldrb            r9,  [lr, r5]
    121        ldrb            r0,  [r4]
    122        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    123        pkhtb           r11, r11, r11, asr #16
    124        bge             0b
    125 
    126 6:
    127        ldr             r0,  [sp]
    128        ldr             r9,  [r0, #12]
    129        cmp             r7,  r9
    130        it              hi
    131        movhi           r7,  r9
    132        stm             r0,  {r5-r7}                    @ high, bits, buf
    133        str             r8,  [r0, #16]                  @ code_word
    134 
    135        add             sp,  sp,  #8
    136        mov             r0,  r3
    137        pop             {r4-r11,pc}
    138 2:
    139        add             r4,  r3,  r3,  lsl #5
    140        cmp             r3,  #16
    141        add             r4,  r4,  r2
    142        pkhtb           r11, r11, r11, asr #16
    143        bne             0b
    144        b               6b
    145 3:
    146        ldrb            r0,  [r4, #3]
    147        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    148        ldrb            r9,  [lr, r5]
    149        bge             1f
    150 
    151        mov             r12, #2
    152        ldrb            r0,  [r4, #4]
    153        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    154        it              ge
    155        addge           r12, #1
    156        ldrb            r9,  [lr, r5]
    157        blt             4f
    158        ldrb            r0,  [r4, #5]
    159        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    160        it              ge
    161        addge           r12, #1
    162        ldrb            r9,  [lr, r5]
    163        b               4f
    164 1:
    165        ldrb            r0,  [r4, #6]
    166        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    167        ldrb            r9,  [lr, r5]
    168        bge             3f
    169 
    170        ldrb            r0,  [r4, #7]
    171        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    172        ldrb            r9,  [lr, r5]
    173        bge             2f
    174 
    175        mov             r12, #5
    176        mov             r0,  #159
    177        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    178        it              ge
    179        addge           r12, r12, #1
    180        ldrb            r9,  [lr, r5]
    181        b               4f
    182 2:
    183        mov             r12, #7
    184        mov             r0,  #165
    185        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    186        it              ge
    187        addge           r12, r12, #2
    188        ldrb            r9,  [lr, r5]
    189        mov             r0,  #145
    190        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    191        it              ge
    192        addge           r12, r12, #1
    193        ldrb            r9,  [lr, r5]
    194        b               4f
    195 3:
    196        ldrb            r0,  [r4, #8]
    197        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    198        it              ge
    199        addge           r4,  r4,  #1
    200        ldrb            r9,  [lr, r5]
    201        ite             ge
    202        movge           r12, #2
    203        movlt           r12, #0
    204        ldrb            r0,  [r4, #9]
    205        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    206        mov             r9,  #8
    207        it              ge
    208        addge           r12, r12, #1
    209        movrelx         r4,  X(ff_vp8_dct_cat_prob), r1
    210        lsl             r9,  r9,  r12
    211        ldr             r4,  [r4, r12, lsl #2]
    212        add             r12, r9,  #3
    213        mov             r1,  #0
    214        ldrb            r0,  [r4], #1
    215 1:
    216        ldrb            r9,  [lr, r5]
    217        lsl             r1,  r1,  #1
    218        rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
    219        ldrb            r0,  [r4], #1
    220        it              ge
    221        addge           r1,  r1,  #1
    222        cmp             r0,  #0
    223        bne             1b
    224        ldrb            r9,  [lr, r5]
    225        add             r12, r12, r1
    226        ldr             r1,  [sp, #4]
    227 4:
    228        add             r4,  r3,  r3,  lsl #5
    229        add             r4,  r4,  r2
    230        add             r4,  r4,  #22
    231        rac_get_128     r5,  r6,  r7,  r8,  r9,  r10
    232        it              ge
    233        rsbge           r12, r12, #0
    234        smulbb          r12, r12, r11
    235        movrel          r9,  zigzag_scan-1
    236        ldrb            r9,  [r9, r3]
    237        cmp             r3,  #16
    238        strh            r12, [r1, r9]
    239        bge             6b
    240        b               5b
    241 endfunc
    242 
    243 const zigzag_scan
    244        .byte            0,  2,  8, 16
    245        .byte           10,  4,  6, 12
    246        .byte           18, 24, 26, 20
    247        .byte           14, 22, 28, 30
    248 endconst