1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/*
2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc.
3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License");
5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License.
6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at
7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **     http://www.apache.org/licenses/LICENSE-2.0
9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software
11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS,
12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and
14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License.
15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */
16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	File:		PrePostMDCT_v5.s
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	Content:	premdct and postmdct function armv5 assemble
21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@
22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	.section .text
25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	.global	PreMDCT
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
27e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT:
28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	stmdb       sp!, {r4 - r11, lr}
29b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add         r9, r0, r1, lsl #2
31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub         r3, r9, #8
32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	movs        r1, r1, asr #2
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	beq         PreMDCT_END
35b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
36e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT_LOOP:
37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r8, [r2], #4
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r9, [r2], #4
39b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldrd				r4, [r0]
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldrd				r6, [r3]
42b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull    			r10, r12, r7, r8					@ MULHIGH(ti1, cosa)
45b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r8, r7, r9						@ MULHIGH(ti1, sina)
47b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	smull				r7, r10, r4, r9						@ MULHIGH(tr1, sina)
48b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
49b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	add					r11, r11, r8						@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r7, r12, r10						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)
51b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r8, [r2], #4
53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r9, [r2], #4
54b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r4, r6, r8						@ MULHIGH(tr2, cosa)
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull    			r10, r12, r5, r8					@ MULHIGH(ti2, cosa)
57b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r8, r5, r9						@ MULHIGH(ti2, sina)
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r5, r10, r6, r9						@ MULHIGH(tr2, sina)
60b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add					r8, r8, r4
62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r9, r12, r10
63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
64b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	mov					r6, r11
65b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
66b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	strd				r6, [r0]
67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	strd				r8, [r3]
68b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	subs				r1, r1, #1
70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r3, r3, #8
71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add 				r0, r0, #8
72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	bne					PreMDCT_LOOP
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
74e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT_END:
75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldmia       sp!, {r4 - r11, pc}
76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	@ENDP  @ |PreMDCT|
77b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	.section .text
79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	.global	PostMDCT
80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
81e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT:
82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	stmdb       sp!, {r4 - r11, lr}
83b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add         r9, r0, r1, lsl #2
85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub         r3, r9, #8
86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	movs        r1, r1, asr #2
88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	beq         PostMDCT_END
89b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
90e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT_LOOP:
91b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	ldr					r8, [r2], #4
92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r9, [r2], #4
93b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldrd				r4, [r0]
95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldrd				r6, [r3]
96b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r11, r4, r8					@ MULHIGH(tr1, cosa)
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull    			r10, r12, r5, r8					@ MULHIGH(ti1, cosa)
99b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r8, r5, r9						@ MULHIGH(ti1, sina)
101b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	smull				r5, r10, r4, r9						@ MULHIGH(tr1, sina)
102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
103b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	add					r4, r11, r8							@ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@
104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r11, r10, r12						@ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)@
105b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r8, [r2], #4						@
107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldr					r9, [r2], #4
108b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r5, r6, r8						@ MULHIGH(tr2, cosa)
110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull    			r10, r12, r7, r8					@ MULHIGH(ti2, cosa)
111b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r14, r8, r7, r9						@ MULHIGH(ti2, sina)
113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	smull				r7, r10, r6, r9						@ MULHIGH(tr2, sina)
114b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add					r6, r8, r5							@ MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2)@
116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r5, r10, r12						@ MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2)@
117b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
118b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	mov					r7, r11
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	strd				r4, [r0]
121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	strd				r6, [r3]
122b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	subs				r1, r1, #1
124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	sub					r3, r3, #8
125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	add 				r0, r0, #8
126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	bne					PostMDCT_LOOP
127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
128e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT_END:
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ldmia       sp!, {r4 - r11, pc}
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	@ENDP  @ |PostMDCT|
131891abc0ee089f2ba5b92dcc014e5efc2ef07f01eMartin Storsjo	.end
132