Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / acorn32 / podulebus / rapide_io_asm.S
blob891ee5f16ce4628537a10871dc549d5bae1d60a9
1 /*      $NetBSD: rapide_io_asm.S,v 1.7 1998/12/12 17:28:05 mycroft Exp $        */
3 /*
4  * Copyright (c) 1997 Mark Brinicombe.
5  * Copyright (c) 1997 Causality Limited.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by Mark Brinicombe
19  *      for the NetBSD Project.
20  * 4. The name of the company nor the name of the author may be used to
21  *    endorse or promote products derived from this software without specific
22  *    prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
25  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
28  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  */
37 #include <machine/asm.h>
40  * bus_space I/O functions for Yellowstone RapIDE podule
41  *
42  * These are optimised 32 bit transfer routines
43  */
45 ENTRY(rapide_bs_rm_4)
46         add     r0, r1, r2
47         mov     r1, r3
49         /* Test length */
50         ldr     r2, [sp, #0]
51         tst     r2, #0x7f
52         beq     rapide_rm_4_m128
53         tst     r2, #0x07
54         beq     rapide_rm_4_m8
56         /* xfer 4 bytes at a time */
57 rapide_rm_4_loop:
58         ldr     r3, [r0]
59         str     r3, [r1], #0x0004
60         subs    r2, r2, #1
61         bne     rapide_rm_4_loop
63         mov     pc, lr
65 rapide_rm_4_m8:
66         /* xfer 32 bytes at a time */
67         stmfd   sp!, {r4-r10}
69 rapide_rm_4_m8_loop:
70         ldmia   r0, {r3-r10}
71         stmia   r1!, {r3-r10}
72         subs    r2, r2, #8
73         bne     rapide_rm_4_m8_loop
75         ldmfd   sp!, {r4-r10}
76         mov     pc, lr
78 rapide_rm_4_m128:
79         /* xfer 512 bytes at a time */
80         stmfd   sp!, {r4-r12, r14}
82 rapide_rm_4_m128_loop:
83         ldmia   r0, {r3-r12, r14}
84         stmia   r1!, {r3-r12, r14}
85         ldmia   r0, {r3-r12, r14}
86         stmia   r1!, {r3-r12, r14}
87         ldmia   r0, {r3-r12, r14}
88         stmia   r1!, {r3-r12, r14}
89         ldmia   r0, {r3-r12, r14}
90         stmia   r1!, {r3-r12, r14}
91         ldmia   r0, {r3-r12, r14}
92         stmia   r1!, {r3-r12, r14}
93         ldmia   r0, {r3-r12, r14}
94         stmia   r1!, {r3-r12, r14}
95         ldmia   r0, {r3-r12, r14}
96         stmia   r1!, {r3-r12, r14}
97         ldmia   r0, {r3-r12, r14}
98         stmia   r1!, {r3-r12, r14}
99         ldmia   r0, {r3-r12, r14}
100         stmia   r1!, {r3-r12, r14}
101         ldmia   r0, {r3-r12, r14}
102         stmia   r1!, {r3-r12, r14}
103         ldmia   r0, {r3-r12, r14}
104         stmia   r1!, {r3-r12, r14}
105         ldmia   r0, {r3-r9}
106         stmia   r1!, {r3-r9}
107         subs    r2, r2, #128
108         bne     rapide_rm_4_m128_loop
110         ldmfd   sp!, {r4-r12, pc}
112 ENTRY(rapide_bs_wm_4)
113         add     r0, r1, r2
114         mov     r1, r3
115         ldr     r2, [sp, #0]
116         tst     r2, #0x7f
117         beq     rapide_wm_4_m128
118         tst     r2, #0x07
119         beq     rapide_wm_4_m8
121         /* xfer 4 bytes at a time */
122 rapide_wm_4_loop:
123         ldr     r3, [r1], #0x0004
124         str     r3, [r0]
125         subs    r2, r2, #1
126         bne     rapide_wm_4_loop
128         mov     pc, lr
130 rapide_wm_4_m8:
131         /* xfer 32 bytes at a time */
132         stmfd   sp!, {r4-r10}
134 rapide_wm_4_m8_loop:
135         ldmia   r1!, {r3-r10}
136         stmia   r0, {r3-r10}
137         subs    r2, r2, #8
138         bne     rapide_wm_4_m8_loop
140         ldmfd   sp!, {r4-r10}
141         mov     pc, lr
143 rapide_wm_4_m128:
144         /* xfer 512 bytes at a time */
145         stmfd   sp!, {r4-r12}
147 rapide_wm_4_m128_loop:
148         ldmia   r1!, {r3-r12}
149         stmia   r0, {r3-r12}
150         ldmia   r1!, {r3-r12}
151         stmia   r0, {r3-r12}
152         ldmia   r1!, {r3-r12}
153         stmia   r0, {r3-r12}
154         ldmia   r1!, {r3-r12}
155         stmia   r0, {r3-r12}
156         ldmia   r1!, {r3-r12}
157         stmia   r0, {r3-r12}
158         ldmia   r1!, {r3-r12}
159         stmia   r0, {r3-r12}
160         ldmia   r1!, {r3-r12}
161         stmia   r0, {r3-r12}
162         ldmia   r1!, {r3-r12}
163         stmia   r0, {r3-r12}
164         ldmia   r1!, {r3-r12}
165         stmia   r0, {r3-r12}
166         ldmia   r1!, {r3-r12}
167         stmia   r0, {r3-r12}
168         ldmia   r1!, {r3-r12}
169         stmia   r0, {r3-r12}
170         ldmia   r1!, {r3-r12}
171         stmia   r0, {r3-r12}
172         ldmia   r1!, {r3-r10}
173         stmia   r0, {r3-r10}
174         subs    r2, r2, #128
175         bne     rapide_wm_4_m128_loop
177         ldmfd   sp!, {r4-r12}
178         mov     pc, lr