sa11x0_io_asm.S revision 1.2 1 1.2 peter /* $NetBSD: sa11x0_io_asm.S,v 1.2 2005/10/23 15:04:43 peter Exp $ */
2 1.1 rjs
3 1.1 rjs /*
4 1.1 rjs * Copyright (c) 1997 Mark Brinicombe.
5 1.1 rjs * Copyright (c) 1997 Causality Limited.
6 1.1 rjs * All rights reserved.
7 1.1 rjs *
8 1.1 rjs * Redistribution and use in source and binary forms, with or without
9 1.1 rjs * modification, are permitted provided that the following conditions
10 1.1 rjs * are met:
11 1.1 rjs * 1. Redistributions of source code must retain the above copyright
12 1.1 rjs * notice, this list of conditions and the following disclaimer.
13 1.1 rjs * 2. Redistributions in binary form must reproduce the above copyright
14 1.1 rjs * notice, this list of conditions and the following disclaimer in the
15 1.1 rjs * documentation and/or other materials provided with the distribution.
16 1.1 rjs * 3. All advertising materials mentioning features or use of this software
17 1.1 rjs * must display the following acknowledgement:
18 1.1 rjs * This product includes software developed by Mark Brinicombe.
19 1.1 rjs * 4. The name of the company nor the name of the author may be used to
20 1.1 rjs * endorse or promote products derived from this software without specific
21 1.1 rjs * prior written permission.
22 1.1 rjs *
23 1.1 rjs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
24 1.1 rjs * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 1.1 rjs * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26 1.1 rjs * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 1.1 rjs * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 1.1 rjs * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29 1.1 rjs * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 1.1 rjs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 1.1 rjs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 1.1 rjs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 1.1 rjs * SUCH DAMAGE.
34 1.1 rjs */
35 1.1 rjs
36 1.1 rjs #include <machine/asm.h>
37 1.1 rjs
38 1.1 rjs /*
39 1.1 rjs * bus_space I/O functions for sa11x0
40 1.1 rjs */
41 1.1 rjs
42 1.1 rjs /*
43 1.1 rjs * read single
44 1.1 rjs */
45 1.1 rjs
46 1.1 rjs ENTRY(sa11x0_bs_r_1)
47 1.1 rjs ldrb r0, [r1, r2]
48 1.1 rjs mov pc, lr
49 1.1 rjs
50 1.1 rjs ENTRY(sa11x0_bs_r_2)
51 1.1 rjs ldrh r0, [r1, r2]
52 1.1 rjs mov pc, lr
53 1.1 rjs
54 1.1 rjs ENTRY(sa11x0_bs_r_4)
55 1.1 rjs ldr r0, [r1, r2]
56 1.1 rjs mov pc, lr
57 1.1 rjs
58 1.1 rjs /*
59 1.1 rjs * write single
60 1.1 rjs */
61 1.1 rjs
62 1.1 rjs ENTRY(sa11x0_bs_w_1)
63 1.1 rjs strb r3, [r1, r2]
64 1.1 rjs mov pc, lr
65 1.1 rjs
66 1.1 rjs ENTRY(sa11x0_bs_w_2)
67 1.1 rjs strh r3, [r1, r2]
68 1.1 rjs mov pc, lr
69 1.1 rjs
70 1.1 rjs ENTRY(sa11x0_bs_w_4)
71 1.1 rjs str r3, [r1, r2]
72 1.1 rjs mov pc, lr
73 1.1 rjs
74 1.1 rjs
75 1.1 rjs /*
76 1.1 rjs * read multiple
77 1.1 rjs */
78 1.1 rjs
79 1.1 rjs ENTRY(sa11x0_bs_rm_1)
80 1.1 rjs add r0, r1, r2
81 1.1 rjs ldr r2, [sp, #0]
82 1.1 rjs cmp r2, #0x00000000
83 1.1 rjs movle pc, lr
84 1.1 rjs
85 1.1 rjs sa11x0_bs_rm_1_loop:
86 1.1 rjs ldrb r1, [r0]
87 1.1 rjs subs r2, r2, #0x00000001
88 1.1 rjs strb r1, [r3], #0x0001
89 1.1 rjs bgt sa11x0_bs_rm_1_loop
90 1.1 rjs
91 1.1 rjs mov pc, lr
92 1.1 rjs
93 1.1 rjs ENTRY(sa11x0_bs_rm_2)
94 1.1 rjs add r0, r1, r2
95 1.1 rjs ldr r2, [sp, #0]
96 1.1 rjs cmp r2, #0x00000000
97 1.1 rjs movle pc, lr
98 1.1 rjs
99 1.1 rjs tst r2, #0x00000007
100 1.1 rjs tsteq r3, #0x00000003
101 1.1 rjs beq sa11x0_bs_rm_2_fast
102 1.1 rjs
103 1.1 rjs sa11x0_bs_rm_2_loop:
104 1.1 rjs ldrh r1, [r0]
105 1.1 rjs subs r2, r2, #0x00000001
106 1.1 rjs strh r1, [r3], #0x0002
107 1.1 rjs bgt sa11x0_bs_rm_2_loop
108 1.1 rjs
109 1.1 rjs mov pc, lr
110 1.1 rjs
111 1.1 rjs sa11x0_bs_rm_2_fast:
112 1.1 rjs stmfd sp!, {r4, r5, lr}
113 1.1 rjs
114 1.1 rjs sa11x0_bs_rm_2_fastloop:
115 1.1 rjs ldrh r1, [r0]
116 1.1 rjs ldrh lr, [r0]
117 1.1 rjs orr r1, r1, lr, lsl #16
118 1.1 rjs
119 1.1 rjs ldrh r4, [r0]
120 1.1 rjs ldrh lr, [r0]
121 1.1 rjs orr r4, r4, lr, lsl #16
122 1.1 rjs
123 1.1 rjs ldrh r5, [r0]
124 1.1 rjs ldrh lr, [r0]
125 1.1 rjs orr r5, r5, lr, lsl #16
126 1.1 rjs
127 1.1 rjs ldrh ip, [r0]
128 1.1 rjs ldrh lr, [r0]
129 1.1 rjs orr ip, ip, lr, lsl #16
130 1.1 rjs
131 1.1 rjs stmia r3!, {r1, r4, r5, ip}
132 1.1 rjs subs r2, r2, #8
133 1.1 rjs bgt sa11x0_bs_rm_2_fastloop
134 1.1 rjs
135 1.1 rjs ldmfd sp!, {r4, r5, pc}
136 1.1 rjs
137 1.1 rjs
138 1.1 rjs ENTRY(sa11x0_bs_rm_4)
139 1.1 rjs add r0, r1, r2
140 1.1 rjs ldr r2, [sp, #0]
141 1.1 rjs cmp r2, #0x00000000
142 1.1 rjs movle pc, lr
143 1.1 rjs
144 1.1 rjs sa11x0_bs_rm_4_loop:
145 1.1 rjs ldr r1, [r0]
146 1.1 rjs subs r2, r2, #0x00000001
147 1.1 rjs str r1, [r3], #0x0004
148 1.1 rjs bgt sa11x0_bs_rm_4_loop
149 1.1 rjs
150 1.1 rjs mov pc, lr
151 1.1 rjs
152 1.1 rjs /*
153 1.1 rjs * write multiple
154 1.1 rjs */
155 1.1 rjs
156 1.1 rjs ENTRY(sa11x0_bs_wm_1)
157 1.1 rjs add r0, r1, r2
158 1.1 rjs ldr r2, [sp, #0]
159 1.1 rjs cmp r2, #0x00000000
160 1.1 rjs movle pc, lr
161 1.1 rjs
162 1.1 rjs sa11x0_wm_1_loop:
163 1.1 rjs ldrb r1, [r3], #0x0001
164 1.1 rjs subs r2, r2, #0x00000001
165 1.1 rjs strb r1, [r0]
166 1.1 rjs bgt sa11x0_wm_1_loop
167 1.1 rjs
168 1.1 rjs mov pc, lr
169 1.1 rjs
170 1.1 rjs ENTRY(sa11x0_bs_wm_2)
171 1.1 rjs add r0, r1, r2
172 1.1 rjs ldr r2, [sp, #0]
173 1.1 rjs cmp r2, #0x00000000
174 1.1 rjs movle pc, lr
175 1.1 rjs
176 1.1 rjs sa11x0_bs_wm_2_loop:
177 1.1 rjs ldrh r1, [r3], #0x0002
178 1.1 rjs subs r2, r2, #0x00000001
179 1.1 rjs strh r1, [r0]
180 1.1 rjs bgt sa11x0_bs_wm_2_loop
181 1.1 rjs
182 1.1 rjs mov pc, lr
183 1.1 rjs
184 1.1 rjs ENTRY(sa11x0_bs_wm_4)
185 1.1 rjs add r0, r1, r2
186 1.1 rjs ldr r2, [sp, #0]
187 1.1 rjs cmp r2, #0x00000000
188 1.1 rjs movle pc, lr
189 1.1 rjs
190 1.1 rjs sa11x0_bs_wm_4_loop:
191 1.1 rjs ldr r1, [r3], #0x0004
192 1.1 rjs subs r2, r2, #0x00000001
193 1.1 rjs str r1, [r0]
194 1.1 rjs bgt sa11x0_bs_wm_4_loop
195 1.1 rjs
196 1.1 rjs mov pc, lr
197 1.1 rjs
198 1.1 rjs /*
199 1.1 rjs * read region
200 1.1 rjs */
201 1.1 rjs
202 1.1 rjs ENTRY(sa11x0_bs_rr_2)
203 1.1 rjs add r0, r1, r2
204 1.1 rjs ldr r2, [sp, #0]
205 1.1 rjs cmp r2, #0x00000000
206 1.1 rjs movle pc, lr
207 1.1 rjs
208 1.1 rjs sa11x0_bs_rr_2_loop:
209 1.1 rjs ldrh r1, [r0], #0x0002
210 1.1 rjs strh r1, [r3], #0x0002
211 1.1 rjs subs r2, r2, #0x00000001
212 1.1 rjs bgt sa11x0_bs_rr_2_loop
213 1.1 rjs
214 1.1 rjs mov pc, lr
215 1.1 rjs
216 1.1 rjs /*
217 1.1 rjs * write region
218 1.1 rjs */
219 1.1 rjs
220 1.1 rjs ENTRY(sa11x0_bs_wr_2)
221 1.1 rjs add r0, r1, r2
222 1.1 rjs ldr r2, [sp, #0]
223 1.1 rjs cmp r2, #0x00000000
224 1.1 rjs movle pc, lr
225 1.1 rjs
226 1.1 rjs sa11x0_bs_wr_2_loop:
227 1.1 rjs ldrh r1, [r3], #0x0002
228 1.1 rjs strh r1, [r0], #0x0002
229 1.1 rjs subs r2, r2, #0x00000001
230 1.1 rjs bgt sa11x0_bs_wr_2_loop
231 1.1 rjs
232 1.1 rjs mov pc, lr
233 1.1 rjs
234 1.1 rjs /*
235 1.2 peter * set region
236 1.1 rjs */
237 1.1 rjs
238 1.1 rjs ENTRY(sa11x0_bs_sr_2)
239 1.1 rjs add r0, r1, r2
240 1.1 rjs ldr r2, [sp, #0]
241 1.1 rjs cmp r2, #0x00000000
242 1.1 rjs movle pc, lr
243 1.1 rjs
244 1.1 rjs sa11x0_bs_sr_2_loop:
245 1.1 rjs strh r3, [r0], #0x0002
246 1.1 rjs subs r2, r2, #0x00000001
247 1.1 rjs bgt sa11x0_bs_sr_2_loop
248 1.1 rjs
249 1.1 rjs mov pc, lr
250 1.1 rjs
251 1.1 rjs /*
252 1.1 rjs * copy region
253 1.1 rjs */
254 1.1 rjs
255 1.1 rjs ENTRY(sa11x0_bs_c_2)
256 1.1 rjs add r0, r1, r2
257 1.1 rjs ldr r2, [sp, #0]
258 1.1 rjs add r1, r2, r3
259 1.1 rjs ldr r2, [sp, #4]
260 1.1 rjs cmp r2, #0x00000000
261 1.1 rjs movle pc, lr
262 1.1 rjs
263 1.1 rjs cmp r0, r1
264 1.1 rjs blt sa11x0_bs_c_2_backwards
265 1.1 rjs
266 1.1 rjs sa11x0_bs_cf_2_loop:
267 1.1 rjs ldrh r3, [r0], #0x0002
268 1.1 rjs strh r3, [r1], #0x0002
269 1.1 rjs subs r2, r2, #0x00000001
270 1.1 rjs bgt sa11x0_bs_cf_2_loop
271 1.1 rjs
272 1.1 rjs mov pc, lr
273 1.1 rjs
274 1.1 rjs sa11x0_bs_c_2_backwards:
275 1.1 rjs add r0, r0, r2, lsl #1
276 1.1 rjs add r1, r1, r2, lsl #1
277 1.1 rjs sub r0, r0, #2
278 1.1 rjs sub r1, r1, #2
279 1.1 rjs
280 1.1 rjs sa11x0_bs_cb_2_loop:
281 1.1 rjs ldrh r3, [r0], #-2
282 1.1 rjs strh r3, [r1], #-2
283 1.1 rjs subs r2, r2, #1
284 1.1 rjs bne sa11x0_bs_cb_2_loop
285 1.1 rjs
286 1.1 rjs mov pc, lr
287 1.1 rjs
288 1.1 rjs /* end of sa11x0_io_asm.S */
289