1f71323e297a928af368937089d3ed71239786f86Andreas Huber;
2f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3f71323e297a928af368937089d3ed71239786f86Andreas Huber;
4f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Use of this source code is governed by a BSD-style license and patent
5f71323e297a928af368937089d3ed71239786f86Andreas Huber;  grant that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber;  tree. All contributing project authors may be found in the AUTHORS
7f71323e297a928af368937089d3ed71239786f86Andreas Huber;  file in the root of the source tree.
8f71323e297a928af368937089d3ed71239786f86Andreas Huber;
9f71323e297a928af368937089d3ed71239786f86Andreas Huber
10f71323e297a928af368937089d3ed71239786f86Andreas Huber    EXPORT |vp8_dequant_idct_add_v6|
11f71323e297a928af368937089d3ed71239786f86Andreas Huber
12f71323e297a928af368937089d3ed71239786f86Andreas Huber    AREA |.text|, CODE, READONLY
131b362b15af34006e6a11974088a46d42b903418eJohann;void vp8_dequant_idct_v6(short *input, short *dq,
141b362b15af34006e6a11974088a46d42b903418eJohann;                         unsigned char *dest, int stride)
151b362b15af34006e6a11974088a46d42b903418eJohann; r0 = q
16f71323e297a928af368937089d3ed71239786f86Andreas Huber; r1 = dq
171b362b15af34006e6a11974088a46d42b903418eJohann; r2 = dst
181b362b15af34006e6a11974088a46d42b903418eJohann; r3 = stride
19f71323e297a928af368937089d3ed71239786f86Andreas Huber
20f71323e297a928af368937089d3ed71239786f86Andreas Huber|vp8_dequant_idct_add_v6| PROC
21f71323e297a928af368937089d3ed71239786f86Andreas Huber    stmdb   sp!, {r4-r11, lr}
22f71323e297a928af368937089d3ed71239786f86Andreas Huber
23f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, [r0]                ;input
24f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r5, [r1], #4            ;dq
25f71323e297a928af368937089d3ed71239786f86Andreas Huber
26f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     sp, sp, #4
27f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r3, [sp]
28f71323e297a928af368937089d3ed71239786f86Andreas Huber
29f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r12, #4
30f71323e297a928af368937089d3ed71239786f86Andreas Huber
31f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_add_loop
32f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulbb  r6, r4, r5
33f71323e297a928af368937089d3ed71239786f86Andreas Huber    smultt  r7, r4, r5
34f71323e297a928af368937089d3ed71239786f86Andreas Huber
35f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, [r0, #4]            ;input
36f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r5, [r1], #4            ;dq
37f71323e297a928af368937089d3ed71239786f86Andreas Huber
38f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r6, [r0], #2
39f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r7, [r0], #2
40f71323e297a928af368937089d3ed71239786f86Andreas Huber
41f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulbb  r6, r4, r5
42f71323e297a928af368937089d3ed71239786f86Andreas Huber    smultt  r7, r4, r5
43f71323e297a928af368937089d3ed71239786f86Andreas Huber
44f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r12, r12, #1
45f71323e297a928af368937089d3ed71239786f86Andreas Huber
46f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r4, [r0, #4]
47f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r5, [r1], #4
48f71323e297a928af368937089d3ed71239786f86Andreas Huber
49f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r6, [r0], #2
50f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r7, [r0], #2
51f71323e297a928af368937089d3ed71239786f86Andreas Huber
52f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_add_loop
53f71323e297a928af368937089d3ed71239786f86Andreas Huber
54f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r0, #32
55f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r0
56f71323e297a928af368937089d3ed71239786f86Andreas Huber
57f71323e297a928af368937089d3ed71239786f86Andreas Huber; short_idct4x4llm_v6_dual
58f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r3, cospi8sqrt2minus1
59f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, sinpi8sqrt2
60f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r6, [r0, #8]
61f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r5, #2
62f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_idct_loop1_v6
63f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r12, [r0, #24]
64f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r14, [r0, #16]
65f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r9, r3, r6
66f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r7, r3, r6
67f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r10, r4, r6
68f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r8, r4, r6
69f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r7, r7, r9, lsl #16
70f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r11, r3, r12
71f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r8, r8, r10, lsl #16
72f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r7
73f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r7, r4, r12
74f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r9, r3, r12
75f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r10, r4, r12
76f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r5, r5, #1
77f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r9, r9, r11, lsl #16
78f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r11, [r0], #4
79f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r10, r10, r7, lsl #16
80f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r7, r12, r9
81f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r8, r7
82f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r10
83f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r11, r14
84f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r8, r11, r14
85f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r9, r10, r6
86f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r10, r10, r6
87f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r8, r7
88f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r8, r7
89f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r6, [r1, #8]
90f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r6, [r0, #8]
91f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r7, [r1, #16]
92f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r10, [r1, #24]
93f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r9, [r1], #4
94f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_idct_loop1_v6
95f71323e297a928af368937089d3ed71239786f86Andreas Huber
96f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r5, #2
97f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r1, #8
98f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_idct_loop2_v6
99f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r6, [r0], #4
100f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r7, [r0], #4
101f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r8, [r0], #4
102f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r9, [r0], #4
103f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r1, r3, r6
104f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r12, r4, r6
105f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  lr, r3, r8
106f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r10, r4, r8
107f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r11, r8, r6, lsl #16
108f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r1, lr, r1, lsl #16
109f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r12, r10, r12, lsl #16
110f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r6, r6, r8, asr #16
111f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r1, r6
112f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   lr, r9, r7, lsl #16
113f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r11, lr
114f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  lr, r11, lr
115f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r8, r7, r9, asr #16
116f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r5, r5, #1
117f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r1, r3, r8
118f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r7, r3, r8
119f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r11, r4, r8
120f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r9, r4, r8
121f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r1, r7, r1, lsl #16
122f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r8, r1, r8
123f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r11, r9, r11, lsl #16
124f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r1, r12, r8
125f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r8, r11, r6
126f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r9, c0x00040004
1271b362b15af34006e6a11974088a46d42b903418eJohann    ldr     r12, [sp]               ; get stride from stack
128f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r10, r8
129f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r10, r8
130f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r7, r7, r9
131f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r9
132f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r14, r1
133f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r1, r14, r1
134f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r10, r9
135f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r1, r1, r9
1361b362b15af34006e6a11974088a46d42b903418eJohann    ldr     r11, [r2]               ; load input from dst
137f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r8, r7, asr #3
138f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r9, r8, r10, asr #19
139f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r8, r1, asr #3
140f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r8, r8, r6, asr #19
141f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  lr, r11, ror #8
142f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r9, r9, lr
143f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  lr, r11
144f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r8, r8, lr
145f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r9, #8, r9
146f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r8, #8, r8
147f71323e297a928af368937089d3ed71239786f86Andreas Huber    orr     r9, r8, r9, lsl #8
1481b362b15af34006e6a11974088a46d42b903418eJohann    ldr     r11, [r2, r12]          ; load input from dst
149f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r7, r7, lsl #16
150f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r1, lsl #16
151f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r10, r10, lsl #16
152f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r6, r6, lsl #16
153f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r7, r7, asr #3
154f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r7, r7, r10, asr #19
155f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r1, asr #3
156f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r1, r1, r6, asr #19
157f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  r8, r11, ror #8
158f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r7, r7, r8
159f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  r8, r11
160f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r1, r1, r8
161f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r7, #8, r7
162f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r1, #8, r1
163f71323e297a928af368937089d3ed71239786f86Andreas Huber    orr     r1, r1, r7, lsl #8
1641b362b15af34006e6a11974088a46d42b903418eJohann    str     r9, [r2], r12           ; store output to dst
1651b362b15af34006e6a11974088a46d42b903418eJohann    str     r1, [r2], r12           ; store output to dst
166f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_idct_loop2_v6
167f71323e297a928af368937089d3ed71239786f86Andreas Huber
168f71323e297a928af368937089d3ed71239786f86Andreas Huber; vpx_memset
169f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r0, #32
170f71323e297a928af368937089d3ed71239786f86Andreas Huber    add     sp, sp, #4
171f71323e297a928af368937089d3ed71239786f86Andreas Huber
172f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r12, #0
173f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0]
174f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #4]
175f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #8]
176f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #12]
177f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #16]
178f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #20]
179f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #24]
180f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #28]
181f71323e297a928af368937089d3ed71239786f86Andreas Huber
182f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldmia   sp!, {r4 - r11, pc}
183f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENDP    ; |vp8_dequant_idct_add_v6|
184f71323e297a928af368937089d3ed71239786f86Andreas Huber
185f71323e297a928af368937089d3ed71239786f86Andreas Huber; Constant Pool
186f71323e297a928af368937089d3ed71239786f86Andreas Hubercospi8sqrt2minus1 DCD 0x00004E7B
187f71323e297a928af368937089d3ed71239786f86Andreas Hubersinpi8sqrt2       DCD 0x00008A8C
188f71323e297a928af368937089d3ed71239786f86Andreas Huberc0x00040004       DCD 0x00040004
189f71323e297a928af368937089d3ed71239786f86Andreas Huber
190f71323e297a928af368937089d3ed71239786f86Andreas Huber    END
191