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 and patent
      5 ;  grant that can be found in the LICENSE file in the root of the source
      6 ;  tree. All contributing project authors may be found in the AUTHORS
      7 ;  file in the root of the source tree.
      8 ;
      9 
     10 
     11     EXPORT  |idct_dequant_0_2x_neon|
     12     ARM
     13     REQUIRE8
     14     PRESERVE8
     15 
     16     AREA ||.text||, CODE, READONLY, ALIGN=2
     17 ;void idct_dequant_0_2x_neon(short *q, short dq, unsigned char *pre,
     18 ;                            int pitch, unsigned char *dst, int stride);
     19 ; r0   *q
     20 ; r1   dq
     21 ; r2   *pre
     22 ; r3   pitch
     23 ; sp   *dst
     24 ; sp+4 stride
     25 |idct_dequant_0_2x_neon| PROC
     26     add             r12, r2, #4
     27     vld1.32         {d2[0]}, [r2], r3
     28     vld1.32         {d2[1]}, [r2], r3
     29     vld1.32         {d4[0]}, [r2], r3
     30     vld1.32         {d4[1]}, [r2]
     31     vld1.32         {d8[0]}, [r12], r3
     32     vld1.32         {d8[1]}, [r12], r3
     33     vld1.32         {d10[0]}, [r12], r3
     34     vld1.32         {d10[1]}, [r12]
     35 
     36     ldrh            r12, [r0]               ; lo q
     37     ldrh            r2, [r0, #32]           ; hi q
     38     mov             r3, #0
     39     strh            r3, [r0]
     40     strh            r3, [r0, #32]
     41 
     42     sxth            r12, r12                ; lo
     43     mul             r0, r12, r1
     44     add             r0, r0, #4
     45     asr             r0, r0, #3
     46     vdup.16         q0, r0
     47     sxth            r2, r2                  ; hi
     48     mul             r0, r2, r1
     49     add             r0, r0, #4
     50     asr             r0, r0, #3
     51     vdup.16         q3, r0
     52 
     53     vaddw.u8        q1, q0, d2              ; lo
     54     vaddw.u8        q2, q0, d4
     55     vaddw.u8        q4, q3, d8              ; hi
     56     vaddw.u8        q5, q3, d10
     57 
     58     ldr             r2, [sp]                ; dst
     59     ldr             r3, [sp, #4]            ; stride
     60 
     61     vqmovun.s16     d2, q1                  ; lo
     62     vqmovun.s16     d4, q2
     63     vqmovun.s16     d8, q4                  ; hi
     64     vqmovun.s16     d10, q5
     65 
     66     add             r0, r2, #4
     67     vst1.32         {d2[0]}, [r2], r3       ; lo
     68     vst1.32         {d2[1]}, [r2], r3
     69     vst1.32         {d4[0]}, [r2], r3
     70     vst1.32         {d4[1]}, [r2]
     71     vst1.32         {d8[0]}, [r0], r3       ; hi
     72     vst1.32         {d8[1]}, [r0], r3
     73     vst1.32         {d10[0]}, [r0], r3
     74     vst1.32         {d10[1]}, [r0]
     75 
     76     bx             lr
     77 
     78     ENDP           ; |idct_dequant_0_2x_neon|
     79     END
     80