Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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_vp56_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
  249.