Home | History | Annotate | Download | only in neon
      1 ;
      2 ;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
      3 ;
      4 ;  Use of this source code is governed by a BSD-style license
      5 ;  that can be found in the LICENSE file in the root of the source
      6 ;  tree. An additional intellectual property rights grant can be found
      7 ;  in the file PATENTS.  All contributing project authors may
      8 ;  be found in the AUTHORS file in the root of the source tree.
      9 ;
     10 
     11 
     12     EXPORT  |vp8_sad16x16_neon|
     13     EXPORT  |vp8_sad16x8_neon|
     14 
     15     ARM
     16     REQUIRE8
     17     PRESERVE8
     18 
     19     AREA ||.text||, CODE, READONLY, ALIGN=2
     20 
     21 ; r0    unsigned char *src_ptr
     22 ; r1    int  src_stride
     23 ; r2    unsigned char *ref_ptr
     24 ; r3    int  ref_stride
     25 |vp8_sad16x16_neon| PROC
     26 ;;
     27     vld1.8          {q0}, [r0], r1
     28     vld1.8          {q4}, [r2], r3
     29 
     30     vld1.8          {q1}, [r0], r1
     31     vld1.8          {q5}, [r2], r3
     32 
     33     vabdl.u8        q12, d0, d8
     34     vabdl.u8        q13, d1, d9
     35 
     36     vld1.8          {q2}, [r0], r1
     37     vld1.8          {q6}, [r2], r3
     38 
     39     vabal.u8        q12, d2, d10
     40     vabal.u8        q13, d3, d11
     41 
     42     vld1.8          {q3}, [r0], r1
     43     vld1.8          {q7}, [r2], r3
     44 
     45     vabal.u8        q12, d4, d12
     46     vabal.u8        q13, d5, d13
     47 
     48 ;;
     49     vld1.8          {q0}, [r0], r1
     50     vld1.8          {q4}, [r2], r3
     51 
     52     vabal.u8        q12, d6, d14
     53     vabal.u8        q13, d7, d15
     54 
     55     vld1.8          {q1}, [r0], r1
     56     vld1.8          {q5}, [r2], r3
     57 
     58     vabal.u8        q12, d0, d8
     59     vabal.u8        q13, d1, d9
     60 
     61     vld1.8          {q2}, [r0], r1
     62     vld1.8          {q6}, [r2], r3
     63 
     64     vabal.u8        q12, d2, d10
     65     vabal.u8        q13, d3, d11
     66 
     67     vld1.8          {q3}, [r0], r1
     68     vld1.8          {q7}, [r2], r3
     69 
     70     vabal.u8        q12, d4, d12
     71     vabal.u8        q13, d5, d13
     72 
     73 ;;
     74     vld1.8          {q0}, [r0], r1
     75     vld1.8          {q4}, [r2], r3
     76 
     77     vabal.u8        q12, d6, d14
     78     vabal.u8        q13, d7, d15
     79 
     80     vld1.8          {q1}, [r0], r1
     81     vld1.8          {q5}, [r2], r3
     82 
     83     vabal.u8        q12, d0, d8
     84     vabal.u8        q13, d1, d9
     85 
     86     vld1.8          {q2}, [r0], r1
     87     vld1.8          {q6}, [r2], r3
     88 
     89     vabal.u8        q12, d2, d10
     90     vabal.u8        q13, d3, d11
     91 
     92     vld1.8          {q3}, [r0], r1
     93     vld1.8          {q7}, [r2], r3
     94 
     95     vabal.u8        q12, d4, d12
     96     vabal.u8        q13, d5, d13
     97 
     98 ;;
     99     vld1.8          {q0}, [r0], r1
    100     vld1.8          {q4}, [r2], r3
    101 
    102     vabal.u8        q12, d6, d14
    103     vabal.u8        q13, d7, d15
    104 
    105     vld1.8          {q1}, [r0], r1
    106     vld1.8          {q5}, [r2], r3
    107 
    108     vabal.u8        q12, d0, d8
    109     vabal.u8        q13, d1, d9
    110 
    111     vld1.8          {q2}, [r0], r1
    112     vld1.8          {q6}, [r2], r3
    113 
    114     vabal.u8        q12, d2, d10
    115     vabal.u8        q13, d3, d11
    116 
    117     vld1.8          {q3}, [r0]
    118     vld1.8          {q7}, [r2]
    119 
    120     vabal.u8        q12, d4, d12
    121     vabal.u8        q13, d5, d13
    122 
    123     vabal.u8        q12, d6, d14
    124     vabal.u8        q13, d7, d15
    125 
    126     vadd.u16        q0, q12, q13
    127 
    128     vpaddl.u16      q1, q0
    129     vpaddl.u32      q0, q1
    130 
    131     vadd.u32        d0, d0, d1
    132 
    133     vmov.32         r0, d0[0]
    134 
    135     bx              lr
    136 
    137     ENDP
    138 
    139 ;==============================
    140 ;unsigned int vp8_sad16x8_c(
    141 ;    unsigned char *src_ptr,
    142 ;    int  src_stride,
    143 ;    unsigned char *ref_ptr,
    144 ;    int  ref_stride)
    145 |vp8_sad16x8_neon| PROC
    146     vld1.8          {q0}, [r0], r1
    147     vld1.8          {q4}, [r2], r3
    148 
    149     vld1.8          {q1}, [r0], r1
    150     vld1.8          {q5}, [r2], r3
    151 
    152     vabdl.u8        q12, d0, d8
    153     vabdl.u8        q13, d1, d9
    154 
    155     vld1.8          {q2}, [r0], r1
    156     vld1.8          {q6}, [r2], r3
    157 
    158     vabal.u8        q12, d2, d10
    159     vabal.u8        q13, d3, d11
    160 
    161     vld1.8          {q3}, [r0], r1
    162     vld1.8          {q7}, [r2], r3
    163 
    164     vabal.u8        q12, d4, d12
    165     vabal.u8        q13, d5, d13
    166 
    167     vld1.8          {q0}, [r0], r1
    168     vld1.8          {q4}, [r2], r3
    169 
    170     vabal.u8        q12, d6, d14
    171     vabal.u8        q13, d7, d15
    172 
    173     vld1.8          {q1}, [r0], r1
    174     vld1.8          {q5}, [r2], r3
    175 
    176     vabal.u8        q12, d0, d8
    177     vabal.u8        q13, d1, d9
    178 
    179     vld1.8          {q2}, [r0], r1
    180     vld1.8          {q6}, [r2], r3
    181 
    182     vabal.u8        q12, d2, d10
    183     vabal.u8        q13, d3, d11
    184 
    185     vld1.8          {q3}, [r0], r1
    186     vld1.8          {q7}, [r2], r3
    187 
    188     vabal.u8        q12, d4, d12
    189     vabal.u8        q13, d5, d13
    190 
    191     vabal.u8        q12, d6, d14
    192     vabal.u8        q13, d7, d15
    193 
    194     vadd.u16        q0, q12, q13
    195 
    196     vpaddl.u16      q1, q0
    197     vpaddl.u32      q0, q1
    198 
    199     vadd.u32        d0, d0, d1
    200 
    201     vmov.32         r0, d0[0]
    202 
    203     bx              lr
    204 
    205     ENDP
    206 
    207     END
    208