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