dequant_idct_v6.asm revision f71323e297a928af368937089d3ed71239786f86
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
13f71323e297a928af368937089d3ed71239786f86Andreas Huber;void vp8_dequant_idct_v6(short *input, short *dq, unsigned char *pred,
14f71323e297a928af368937089d3ed71239786f86Andreas Huber; unsigned char *dest, int pitch, int stride)
15f71323e297a928af368937089d3ed71239786f86Andreas Huber; r0 = input
16f71323e297a928af368937089d3ed71239786f86Andreas Huber; r1 = dq
17f71323e297a928af368937089d3ed71239786f86Andreas Huber; r2 = pred
18f71323e297a928af368937089d3ed71239786f86Andreas Huber; r3 = dest
19f71323e297a928af368937089d3ed71239786f86Andreas Huber; sp + 36 = pitch  ; +4 = 40
20f71323e297a928af368937089d3ed71239786f86Andreas Huber; sp + 40 = stride  ; +4 = 44
21f71323e297a928af368937089d3ed71239786f86Andreas Huber
22f71323e297a928af368937089d3ed71239786f86Andreas Huber
23f71323e297a928af368937089d3ed71239786f86Andreas Huber|vp8_dequant_idct_add_v6| PROC
24f71323e297a928af368937089d3ed71239786f86Andreas Huber    stmdb   sp!, {r4-r11, lr}
25f71323e297a928af368937089d3ed71239786f86Andreas Huber
26f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, [r0]                ;input
27f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r5, [r1], #4            ;dq
28f71323e297a928af368937089d3ed71239786f86Andreas Huber
29f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     sp, sp, #4
30f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r3, [sp]
31f71323e297a928af368937089d3ed71239786f86Andreas Huber
32f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r12, #4
33f71323e297a928af368937089d3ed71239786f86Andreas Huber
34f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_add_loop
35f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulbb  r6, r4, r5
36f71323e297a928af368937089d3ed71239786f86Andreas Huber    smultt  r7, r4, r5
37f71323e297a928af368937089d3ed71239786f86Andreas Huber
38f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, [r0, #4]            ;input
39f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r5, [r1], #4            ;dq
40f71323e297a928af368937089d3ed71239786f86Andreas Huber
41f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r6, [r0], #2
42f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r7, [r0], #2
43f71323e297a928af368937089d3ed71239786f86Andreas Huber
44f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulbb  r6, r4, r5
45f71323e297a928af368937089d3ed71239786f86Andreas Huber    smultt  r7, r4, r5
46f71323e297a928af368937089d3ed71239786f86Andreas Huber
47f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r12, r12, #1
48f71323e297a928af368937089d3ed71239786f86Andreas Huber
49f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r4, [r0, #4]
50f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r5, [r1], #4
51f71323e297a928af368937089d3ed71239786f86Andreas Huber
52f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r6, [r0], #2
53f71323e297a928af368937089d3ed71239786f86Andreas Huber    strh    r7, [r0], #2
54f71323e297a928af368937089d3ed71239786f86Andreas Huber
55f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_add_loop
56f71323e297a928af368937089d3ed71239786f86Andreas Huber
57f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r0, #32
58f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r0
59f71323e297a928af368937089d3ed71239786f86Andreas Huber
60f71323e297a928af368937089d3ed71239786f86Andreas Huber; short_idct4x4llm_v6_dual
61f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r3, cospi8sqrt2minus1
62f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r4, sinpi8sqrt2
63f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r6, [r0, #8]
64f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r5, #2
65f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_idct_loop1_v6
66f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r12, [r0, #24]
67f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r14, [r0, #16]
68f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r9, r3, r6
69f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r7, r3, r6
70f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r10, r4, r6
71f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r8, r4, r6
72f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r7, r7, r9, lsl #16
73f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r11, r3, r12
74f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r8, r8, r10, lsl #16
75f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r7
76f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r7, r4, r12
77f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r9, r3, r12
78f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r10, r4, r12
79f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r5, r5, #1
80f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r9, r9, r11, lsl #16
81f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r11, [r0], #4
82f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r10, r10, r7, lsl #16
83f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r7, r12, r9
84f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r8, r7
85f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r10
86f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r11, r14
87f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r8, r11, r14
88f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r9, r10, r6
89f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r10, r10, r6
90f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r8, r7
91f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r8, r7
92f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r6, [r1, #8]
93f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldrne   r6, [r0, #8]
94f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r7, [r1, #16]
95f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r10, [r1, #24]
96f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r9, [r1], #4
97f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_idct_loop1_v6
98f71323e297a928af368937089d3ed71239786f86Andreas Huber
99f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r5, #2
100f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r1, #8
101f71323e297a928af368937089d3ed71239786f86Andreas Hubervp8_dequant_idct_loop2_v6
102f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r6, [r0], #4
103f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r7, [r0], #4
104f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r8, [r0], #4
105f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r9, [r0], #4
106f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r1, r3, r6
107f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r12, r4, r6
108f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  lr, r3, r8
109f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r10, r4, r8
110f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r11, r8, r6, lsl #16
111f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r1, lr, r1, lsl #16
112f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r12, r10, r12, lsl #16
113f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r6, r6, r8, asr #16
114f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r1, r6
115f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   lr, r9, r7, lsl #16
116f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r11, lr
117f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  lr, r11, lr
118f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r8, r7, r9, asr #16
119f71323e297a928af368937089d3ed71239786f86Andreas Huber    subs    r5, r5, #1
120f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r1, r3, r8
121f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r7, r3, r8
122f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwt  r11, r4, r8
123f71323e297a928af368937089d3ed71239786f86Andreas Huber    smulwb  r9, r4, r8
124f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r1, r7, r1, lsl #16
125f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r8, r1, r8
126f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhbt   r11, r9, r11, lsl #16
127f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r1, r12, r8
128f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r8, r11, r6
129f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r9, c0x00040004
130f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r12, [sp, #40]
131f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r10, r8
132f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r7, r10, r8
133f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r7, r7, r9
134f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r6, r6, r9
135f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r14, r1
136f71323e297a928af368937089d3ed71239786f86Andreas Huber    usub16  r1, r14, r1
137f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r10, r10, r9
138f71323e297a928af368937089d3ed71239786f86Andreas Huber    uadd16  r1, r1, r9
139f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r11, [r2], r12
140f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r8, r7, asr #3
141f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r9, r8, r10, asr #19
142f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r8, r1, asr #3
143f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r8, r8, r6, asr #19
144f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  lr, r11, ror #8
145f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r9, r9, lr
146f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  lr, r11
147f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r8, r8, lr
148f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r9, #8, r9
149f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r8, #8, r8
150f71323e297a928af368937089d3ed71239786f86Andreas Huber    orr     r9, r8, r9, lsl #8
151f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r11, [r2], r12
152f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     lr, [sp]
153f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldr     r12, [sp, #44]
154f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r7, r7, lsl #16
155f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r1, lsl #16
156f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r10, r10, lsl #16
157f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r6, r6, lsl #16
158f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r7, r7, asr #3
159f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r7, r7, r10, asr #19
160f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r1, r1, asr #3
161f71323e297a928af368937089d3ed71239786f86Andreas Huber    pkhtb   r1, r1, r6, asr #19
162f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  r8, r11, ror #8
163f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r7, r7, r8
164f71323e297a928af368937089d3ed71239786f86Andreas Huber    uxtb16  r8, r11
165f71323e297a928af368937089d3ed71239786f86Andreas Huber    qadd16  r1, r1, r8
166f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r7, #8, r7
167f71323e297a928af368937089d3ed71239786f86Andreas Huber    usat16  r1, #8, r1
168f71323e297a928af368937089d3ed71239786f86Andreas Huber    orr     r1, r1, r7, lsl #8
169f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r9, [lr], r12
170f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r1, [lr], r12
171f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     lr, [sp]
172f71323e297a928af368937089d3ed71239786f86Andreas Huber    bne     vp8_dequant_idct_loop2_v6
173f71323e297a928af368937089d3ed71239786f86Andreas Huber
174f71323e297a928af368937089d3ed71239786f86Andreas Huber; vpx_memset
175f71323e297a928af368937089d3ed71239786f86Andreas Huber    sub     r0, r0, #32
176f71323e297a928af368937089d3ed71239786f86Andreas Huber    add     sp, sp, #4
177f71323e297a928af368937089d3ed71239786f86Andreas Huber
178f71323e297a928af368937089d3ed71239786f86Andreas Huber    mov     r12, #0
179f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0]
180f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #4]
181f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #8]
182f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #12]
183f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #16]
184f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #20]
185f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #24]
186f71323e297a928af368937089d3ed71239786f86Andreas Huber    str     r12, [r0, #28]
187f71323e297a928af368937089d3ed71239786f86Andreas Huber
188f71323e297a928af368937089d3ed71239786f86Andreas Huber    ldmia   sp!, {r4 - r11, pc}
189f71323e297a928af368937089d3ed71239786f86Andreas Huber    ENDP    ; |vp8_dequant_idct_add_v6|
190f71323e297a928af368937089d3ed71239786f86Andreas Huber
191f71323e297a928af368937089d3ed71239786f86Andreas Huber; Constant Pool
192f71323e297a928af368937089d3ed71239786f86Andreas Hubercospi8sqrt2minus1 DCD 0x00004E7B
193f71323e297a928af368937089d3ed71239786f86Andreas Hubersinpi8sqrt2       DCD 0x00008A8C
194f71323e297a928af368937089d3ed71239786f86Andreas Huberc0x00040004       DCD 0x00040004
195f71323e297a928af368937089d3ed71239786f86Andreas Huber
196f71323e297a928af368937089d3ed71239786f86Andreas Huber    END
197