Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / acorn32 / stand / lib / riscoscalls.S
blobaa8bde59098d61d9e0a58eaf2055b980ffd3b209
1 /*      $NetBSD: riscoscalls.S,v 1.9 2006/07/20 23:35:20 bjh21 Exp $    */
3 /*-
4  * Copyright (c) 2001 Ben Harris
5  * Copyright (c) 2002 Reinoud Zandijk
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. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  * 
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
31 #include <machine/asm.h>
32 #include <riscoscalls.h>
34 ENTRY(os_writec)
35         mov     ip, sp
36         stmfd   sp!, {fp, ip, lr, pc}
37         sub     fp, ip, #4
38         swi     OS_WriteC
39         ldmdb   fp, {fp, sp, pc}
41 ENTRY(os_new_line)
42         mov     ip, sp
43         stmfd   sp!, {fp, ip, lr, pc}
44         sub     fp, ip, #4
45         swi     OS_NewLine
46         ldmdb   fp, {fp, sp, pc}
48 ENTRY(os_readc)
49         mov     ip, sp
50         stmfd   sp!, {fp, ip, lr, pc}
51         sub     fp, ip, #4
52         swi     OS_ReadC
53         ldmdb   fp, {fp, sp, pc}
55 ENTRY(os_cli)
56         mov     ip, sp
57         stmfd   sp!, {fp, ip, lr, pc}
58         sub     fp, ip, #4
59         swi     OS_CLI
60         ldmdb   fp, {fp, sp, pc}
62 ENTRY(xos_cli)
63         mov     ip, sp
64         stmfd   sp!, {fp, ip, lr, pc}
65         sub     fp, ip, #4
66         swi     XOS_CLI
67         movvc   r0, #0
68         ldmdb   fp, {fp, sp, pc}
70 ENTRY(os_byte)
71         mov     ip, sp
72         stmfd   sp!, {fp, ip, lr, pc}
73         sub     fp, ip, #4
74         swi     OS_Byte 
75         teq     r3, #0
76         strne   r1, [r3]
77         ldr     r3, [fp, #4]
78         teq     r3, #0
79         strne   r2, [r3]
80         ldmdb   fp, {fp, sp, pc}
82 ENTRY(osbyte_read)
83         mov     ip, sp
84         stmfd   sp!, {fp, ip, lr, pc}
85         sub     fp, ip, #4
86         mov     r1, #0
87         mov     r2, #255
88         swi     OS_Byte 
89         mov     r0, r1
90         ldmdb   fp, {fp, sp, pc}        
92 ENTRY(os_word)
93         mov     ip, sp
94         stmfd   sp!, {fp, ip, lr, pc}
95         sub     fp, ip, #4
96         swi     OS_Word
97         ldmdb   fp, {fp, sp, pc}
99 ENTRY(xosargs_read)
100         mov     ip, sp
101         stmfd   sp!, {fp, ip, lr, pc}
102         sub     fp, ip, #4
103         mov     r3, r2
104         swi     XOS_Args
105         ldmvsdb fp, {fp, sp, pc}
106         teq     r3, #0
107         strne   r2, [r3]
108         mov     r0, #0
109         ldmdb   fp, {fp, sp, pc}
111 ENTRY(xosargs_set)
112         mov     ip, sp
113         stmfd   sp!, {fp, ip, lr, pc}
114         sub     fp, ip, #4
115         swi     XOS_Args
116         movvc   r0, #0
117         ldmdb   fp, {fp, sp, pc}
119 ENTRY(xosgbpb_write)
120         mov     ip, sp
121         stmfd   sp!, {r4, fp, ip, lr, pc}
122         sub     fp, ip, #4
123         mov     ip, r3
124         mov     r3, r2
125         mov     r2, r1
126         mov     r1, r0
127         mov     r0, #OSGBPB_Write
128         swi     XOS_GBPB
129         teq     ip, #0
130         strne   r3, [ip]
131         movvc   r0, #0
132         ldmdb   fp, {r4, fp, sp, pc}
134 ENTRY(xosgbpb_read)
135         mov     ip, sp
136         stmfd   sp!, {r4, fp, ip, lr, pc}
137         sub     fp, ip, #4
138         mov     ip, r3
139         mov     r3, r2
140         mov     r2, r1
141         mov     r1, r0
142         mov     r0, #OSGBPB_Read
143         swi     XOS_GBPB
144         teq     ip, #0
145         strne   r3, [ip]
146         movvc   r0, #0
147         ldmdb   fp, {r4, fp, sp, pc}
149 ENTRY(xosfind_close)
150         mov     ip, sp
151         stmfd   sp!, {fp, ip, lr, pc}
152         sub     fp, ip, #4
153         mov     r1, r0
154         mov     r0, #OSFind_Close
155         swi     XOS_Find
156         movvc   r0, #0
157         ldmdb   fp, {fp, sp, pc}        
159 ENTRY(xosfind_open)
160         mov     ip, sp
161         stmfd   sp!, {fp, ip, lr, pc}
162         sub     fp, ip, #4
163         swi     XOS_Find
164         ldmvsdb fp, {fp, sp, pc}
165         teq     r3, #0
166         strne   r0, [r3]
167         mov     r0, #0
168         ldmdb   fp, {fp, sp, pc}        
170 ENTRY(os_get_env)
171         mov     ip, sp
172         stmfd   sp!, {r4, fp, ip, lr, pc}
173         sub     fp, ip, #4
174         mov     r3, r0
175         mov     r4, r1
176         swi     OS_GetEnv
177         teq     r3, #0
178         strne   r1, [r3]
179         teq     r4, #0
180         strne   r2, [r4]
181         ldmdb   fp, {r4, fp, sp, pc}
183 ENTRY(os_exit)
184         mov     ip, sp
185         stmfd   sp!, {fp, ip, lr, pc}
186         sub     fp, ip, #4
187         mov     r2, r1
188         ldr     r1, Labex
189         swi     OS_Exit
190         ldmdb   fp, {fp, sp, pc}
191 Labex:
192         .ascii  "ABEX"
194 ENTRY(os_int_off)
195         mov     ip, sp
196         stmfd   sp!, {fp, ip, lr, pc}
197         sub     fp, ip, #4
198         swi     OS_IntOff
199         ldmdb   fp, {fp, sp, pc}
201 ENTRY(os_enter_os)
202         mov     ip, sp
203         stmfd   sp!, {fp, ip, lr, pc}
204         sub     fp, ip, #4
205         swi     OS_EnterOS
206         ldmdb   fp, {fp, sp, pc}
208 ENTRY(xosmodule_alloc)
209         mov     ip, sp
210         stmfd   sp!, {fp, ip, lr, pc}
211         sub     fp, ip, #4
212         mov     r3, r0
213         mov     r0, #OSModule_Alloc
214         swi     XOS_Module
215         ldmvsdb fp, {fp, sp, pc}
216         teq     r1, #0
217         strne   r2, [r1]
218         mov     r0, #0
219         ldmdb   fp, {fp, sp, pc}        
221 ENTRY(xosmodule_free)
222         mov     ip, sp
223         stmfd   sp!, {fp, ip, lr, pc}
224         sub     fp, ip, #4
225         mov     r2, r0
226         mov     r0, #OSModule_Free
227         swi     XOS_Module
228         movvc   r0, #0
229         ldmdb   fp, {fp, sp, pc}        
231 ENTRY(xosmodule_lookup)
232         mov     ip, sp
233         stmfd   sp!, {r4-r8, fp, ip, lr, pc}
234         sub     fp, ip, #4
235         mov     r6, r1
236         mov     r7, r2
237         mov     r8, r3
238         mov     r1, r0
239         mov     r0, #OSModule_Lookup
240         swi     XOS_Module
241         ldmvsdb fp, {r4-r8, fp, sp, pc}
242         teq     r6, #0
243         strne   r1, [r6]
244         teq     r7, #0
245         strne   r2, [r7]
246         teq     r8, #0
247         strne   r3, [r8]
248         ldr     r8, [fp, #4]
249         teq     r8, #0
250         strne   r4, [r8]
251         ldr     r8, [fp, #8]
252         teq     r8, #0
253         strne   r5, [r8]
254         mov     r0, #0
255         ldmdb   fp, {r4-r8, fp, sp, pc} 
257 ENTRY(xosfscontrol_shutdown)
258         mov     ip, sp
259         stmfd   sp!, {fp, ip, lr, pc}
260         sub     fp, ip, #4
261         mov     r0, #OSFSControl_Shutdown
262         swi     XOS_FSControl
263         movvc   r0, #0
264         ldmdb   fp, {fp, sp, pc}        
266 ENTRY(service_pre_reset)
267         mov     ip, sp
268         stmfd   sp!, {fp, ip, lr, pc}
269         sub     fp, ip, #4
270         mov     r1, #Service_PreReset
271         swi     OS_ServiceCall
272         ldmdb   fp, {fp, sp, pc}        
274 ENTRY(os_read_vdu_variables)
275         mov     ip, sp
276         stmfd   sp!, {fp, ip, lr, pc}
277         sub     fp, ip, #4
278         swi     OS_ReadVduVariables
279         ldmdb   fp, {fp, sp, pc}        
281 ENTRY(xos_swi_number_from_string)
282         mov     ip, sp
283         stmfd   sp!, {fp, ip, lr, pc}
284         sub     fp, ip, #4
285         mov     r2, r1
286         mov     r1, r0
287         swi     XOS_SWINumberFromString
288         ldmvsdb fp, {fp, sp, pc}
289         str     r0, [r2]
290         mov     r0, #0
291         ldmdb   fp, {fp, sp, pc}
293 ENTRY(os_read_monotonic_time)
294         mov     ip, sp
295         stmfd   sp!, {fp, ip, lr, pc}
296         sub     fp, ip, #4
297         swi     OS_ReadMonotonicTime
298         ldmdb   fp, {fp, sp, pc}
299         
300 ENTRY(os_read_mem_map_info)
301         mov     ip, sp
302         stmfd   sp!, {fp, ip, lr, pc}
303         sub     fp, ip, #4
304         mov     r2, r0
305         mov     r3, r1
306         swi     OS_ReadMemMapInfo
307         teq     r2, #0
308         strne   r0, [r2]
309         teq     r3, #0
310         strne   r1, [r3]
311         ldmdb   fp, {fp, sp, pc}        
313 ENTRY(os_readsysinfo)
314         mov     ip, sp
315         stmfd   sp!, {r4-r9, fp, ip, lr, pc}
316         sub     fp, ip, #4
317         mov     r9, r5
318         mov     r8, r4
319         mov     r7, r3
320         mov     r6, r2
321         mov     r5, r1
322         swi     OS_ReadSysInfo
323         teq     r5, #0
324         strne   r0, [r5]
325         teq     r6, #0
326         strne   r1, [r6]
327         teq     r7, #0
328         strne   r2, [r7]
329         ldr     r1, [ip, #0]
330         teq     r1, #0
331         strne   r3, [r1]
332         ldr     r1, [ip, #4]
333         teq     r1, #0
334         strne   r4, [r1]
335         ldmdb   fp, {r4-r9, fp, sp, pc}
337 ENTRY(os_read_mem_map_entries)
338         mov     ip, sp
339         stmfd   sp!, {fp, ip, lr, pc}
340         sub     fp, ip, #4
341         swi     OS_ReadMemMapEntries
342         ldmdb   fp, {fp, sp, pc}
344 ENTRY(osmemory_read_arrangement_table_size)
345         mov     ip, sp
346         stmfd   sp!, {r4, fp, ip, lr, pc}
347         sub     fp, ip, #4
348         mov     r3, r0
349         mov     r4, r1
350         mov     r0, #OSMemory_ReadArrangementTableSize
351         swi     OS_Memory
352         cmp     r3, #0
353         strne   r1, [r3]
354         cmp     r4, #0
355         strne   r2, [r4]
356         ldmdb   fp, {r4, fp, sp, pc}
358 ENTRY(xosmemory_read_arrangement_table_size)
359         mov     ip, sp
360         stmfd   sp!, {r4, fp, ip, lr, pc}
361         sub     fp, ip, #4
362         mov     r3, r0
363         mov     r4, r1
364         mov     r0, #OSMemory_ReadArrangementTableSize
365         swi     XOS_Memory
366         ldmvsdb fp, {r4, fp, sp, pc}
367         cmp     r3, #0
368         strne   r1, [r3]
369         cmp     r4, #0
370         strne   r2, [r4]
371         mov     r0, #0
372         ldmdb   fp, {r4, fp, sp, pc}
374 ENTRY(osmemory_read_arrangement_table)
375         mov     ip, sp
376         stmfd   sp!, {fp, ip, lr, pc}
377         sub     fp, ip, #4
378         mov     r1, r0
379         mov     r0, #OSMemory_ReadArrangementTable
380         swi     OS_Memory
381         ldmdb   fp, {fp, sp, pc}
383 ENTRY(xosmemory_read_arrangement_table)
384         mov     ip, sp
385         stmfd   sp!, {fp, ip, lr, pc}
386         sub     fp, ip, #4
387         mov     r1, r0
388         mov     r0, #OSMemory_ReadArrangementTable
389         swi     XOS_Memory
390         movvc   r0, #0
391         ldmdb   fp, {fp, sp, pc}
393 ENTRY(osmemory_page_op)
394         mov     ip, sp
395         stmfd   sp!, {fp, ip, lr, pc}
396         sub     fp, ip, #4
397         add     r0, r0, #OSMemory_PageOp
398         swi     OS_Memory
399         ldmdb   fp, {fp, sp, pc}
401 ENTRY(xcache_control)
402         mov     ip, sp
403         stmfd   sp!, {fp, ip, lr, pc}
404         sub     fp, ip, #4
405         swi     XCache_Control
406         ldmvsdb fp, {fp, sp, pc}
407         teq     r2, #0
408         strne   r0, [r2]
409         mov     r0, #0
410         ldmdb   fp, {fp, sp, pc}
412 ENTRY(xfilecorediscop_read_sectors)
413         mov     ip, sp
414         stmfd   sp!, {r4, r8, fp, ip, lr, pc}
415         sub     fp, ip, #4
416         mov     r4, r3
417         mov     r3, r2
418         mov     r2, r1
419         orr     r1, r0, #FileCoreDiscOp_ReadSectors
420         ldr     r8, [fp, #4]
421         swi     XFileCore_DiscOp
422         ldmvsdb fp, {r4, r8, fp, sp, pc}
423         ldr     r0, [fp, #8]
424         teq     r0, #0
425         strne   r2, [r0]
426         ldr     r0, [fp, #12]
427         teq     r0, #0
428         strne   r3, [r0]
429         ldr     r0, [fp, #16]
430         teq     r0, #0
431         strne   r4, [r0]
432         mov     r0, #0
433         ldmdb   fp, {r4, r8, fp, sp, pc}
434         
435 ENTRY(xfilecore_drives)
436         mov     ip, sp
437         stmfd   sp!, {r4-r5, r8, fp, ip, lr, pc}
438         sub     fp, ip, #4
439         mov     r5, r3
440         mov     r4, r2
441         mov     r3, r1
442         mov     r8, r0
443         swi     XFileCore_Drives
444         ldmvsdb fp, {r4-r5, r8, fp, sp, pc}
445         teq     r3, #0
446         strne   r0, [r3]
447         teq     r4, #0
448         strne   r1, [r4]
449         teq     r5, #0
450         strne   r2, [r5]
451         mov     r0, #0
452         ldmdb   fp, {r4-r5, r8, fp, sp, pc}
454 ENTRY(xfilecoresectorop_read_sectors)
455         mov     ip, sp
456         stmfd   sp!, {r4, r8, fp, ip, lr, pc}
457         sub     fp, ip, #4
458         mov     r4, r3
459         mov     r3, r2
460         mov     r2, r1
461         orr     r1, r0, #FileCoreDiscOp_ReadSectors
462         ldr     r8, [fp, #4]
463         swi     XFileCore_SectorOp
464         ldmvsdb fp, {r4, r8, fp, sp, pc}
465         ldr     r0, [fp, #8]
466         teq     r0, #0
467         strne   r2, [r0]
468         ldr     r0, [fp, #12]
469         teq     r0, #0
470         strne   r3, [r0]
471         ldr     r0, [fp, #16]
472         teq     r0, #0
473         strne   r4, [r0]
474         mov     r0, #0
475         ldmdb   fp, {r4, r8, fp, sp, pc}
477 ENTRY(xfilecorediscop64_read_sectors)
478         mov     ip, sp
479         stmfd   sp!, {r4, r5, r8, fp, ip, lr, pc}
480         sub     fp, ip, #4
481         mov     r4, r3
482         mov     r3, r2
483         mov     r2, r1
484         orr     r1, r0, #FileCoreDiscOp_ReadSectors
485         ldr     r5, [fp, #4]
486         ldr     r8, [fp, #8]
487         swi     XFileCore_DiscOp64
488         ldmvsdb fp, {r4, r5, r8, fp, sp, pc}
489         ldr     r0, [fp, #12]
490         teq     r0, #0
491         strne   r2, [r0]
492         ldr     r0, [fp, #16]
493         teq     r0, #0
494         strne   r3, [r0]
495         ldr     r0, [fp, #20]
496         teq     r0, #0
497         strne   r4, [r0]
498         mov     r0, #0
499         ldmdb   fp, {r4, r5, r8, fp, sp, pc}