arm.asm revision 1.9
11.9Snonaka;	$NetBSD: arm.asm,v 1.9 2010/04/06 16:20:28 nonaka Exp $	
21.1Such;
31.1Such; Copyright (c) 2001 The NetBSD Foundation, Inc.
41.1Such; All rights reserved.
51.1Such;
61.1Such; This code is derived from software contributed to The NetBSD Foundation
71.1Such; by UCHIYAMA Yasushi.
81.1Such;
91.1Such; Redistribution and use in source and binary forms, with or without
101.1Such; modification, are permitted provided that the following conditions
111.1Such; are met:
121.1Such; 1. Redistributions of source code must retain the above copyright
131.1Such;    notice, this list of conditions and the following disclaimer.
141.1Such; 2. Redistributions in binary form must reproduce the above copyright
151.1Such;    notice, this list of conditions and the following disclaimer in the
161.1Such;    documentation and/or other materials provided with the distribution.
171.1Such;
181.1Such; THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
191.1Such; ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
201.1Such; TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
211.1Such; PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
221.1Such; BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
231.1Such; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
241.1Such; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
251.1Such; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
261.1Such; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
271.1Such; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
281.1Such; POSSIBILITY OF SUCH DAMAGE.
291.1Such;
301.4Such
311.1Such;
321.1Such;armasm.exe $(InputPath)
331.1Such;arm.obj
341.1Such;
351.1Such	; dummy buffer for WritebackDCache
361.9Snonaka	EXPORT	|dcachesize|	[DATA]
371.1Such	EXPORT	|dcachebuf|	[DATA]
381.1Such	AREA	|.data|, DATA
391.9Snonaka|dcachesize|
401.9Snonaka	DCD	8192	; for SA1100
411.4Such|dcachebuf|
421.9Snonaka	%	65536	; max D-cache size
431.1Such
441.1Such	AREA	|.text|, CODE, PIC
451.4Such
461.1Such	;
471.1Such	; Operation mode ops.
481.1Such	;
491.1Such	EXPORT	|SetSVCMode|
501.1Such|SetSVCMode| PROC
511.1Such	mrs	r0, cpsr
521.1Such	bic	r0, r0, #0x1f
531.1Such	orr	r0, r0, #0x13
541.1Such	msr	cpsr, r0
551.1Such	mov	pc, lr
561.1Such	ENDP  ; |SetSVCMode|
571.1Such	EXPORT	|SetSystemMode|
581.1Such|SetSystemMode| PROC
591.1Such	mrs	r0, cpsr
601.1Such	orr	r0, r0, #0x1f
611.1Such	msr	cpsr, r0
621.1Such	mov	pc, lr
631.1Such	ENDP  ; |SetSystemMode|
641.1Such
651.1Such	;
661.1Such	; Interrupt ops.
671.1Such	;
681.1Such	EXPORT	|DI|
691.1Such|DI| PROC
701.1Such	mrs	r0, cpsr
711.1Such	orr	r0, r0, #0xc0
721.1Such	msr	cpsr, r0
731.1Such	mov	pc, lr
741.1Such	ENDP  ; |DI|
751.1Such	EXPORT	|EI|
761.1Such|EI| PROC
771.1Such	mrs	r0, cpsr
781.1Such	bic	r0, r0, #0xc0
791.1Such	msr	cpsr, r0
801.1Such	mov	pc, lr
811.1Such	ENDP  ; |EI|
821.4Such
831.1Such	;
841.1Such	; Cache ops.
851.1Such	;
861.1Such	EXPORT	|InvalidateICache|
871.1Such|InvalidateICache| PROC
881.1Such	; c7	(CRn) Cache Control Register
891.1Such	; c5, 0	(CRm, opcode_2) Flush I
901.1Such	; r0	(Rd) ignored
911.1Such	mcr	p15, 0, r0, c7, c5, 0
921.1Such	mov	pc, lr
931.1Such	ENDP  ; |InvalidateICache|
941.4Such
951.1Such	EXPORT	|WritebackDCache|
961.1Such|WritebackDCache| PROC
971.9Snonaka	ldr	r0, [pc, #24]	; dcachebuf
981.9Snonaka	ldr	r1, [pc, #24]
991.9Snonaka	ldr	r1, [r1]	; dcache-size
1001.9Snonaka	add	r1, r1, r0
1011.1Such|wbdc1|
1021.1Such	ldr	r2, [r0], #32	; line-size is 32byte.
1031.1Such	teq	r1, r0
1041.1Such	bne	|wbdc1|
1051.1Such	mov	pc, lr
1061.1Such	DCD	|dcachebuf|
1071.9Snonaka	DCD	|dcachesize|
1081.1Such	ENDP  ; |WritebackDCache|
1091.4Such
1101.1Such	EXPORT	|InvalidateDCache|
1111.1Such|InvalidateDCache| PROC
1121.1Such	; c7	(CRn) Cache Control Register
1131.1Such	; c6, 0	(CRm, opcode_2) Flush D
1141.1Such	; r0	(Rd) ignored
1151.4Such	mcr	p15, 0, r0, c7, c6, 0
1161.1Such	mov	pc, lr
1171.1Such	ENDP  ; |InvalidateDCache|
1181.1Such
1191.1Such	EXPORT	|WritebackInvalidateDCache|
1201.1Such|WritebackInvalidateDCache| PROC
1211.9Snonaka	ldr	r0, [pc, #28]	; dcachebuf
1221.9Snonaka	ldr	r1, [pc, #28]
1231.9Snonaka	ldr	r1, [r1]	; dcache-size
1241.9Snonaka	add	r1, r1, r0
1251.1Such|wbidc1|
1261.1Such	ldr	r2, [r0], #32
1271.1Such	teq	r1, r0
1281.1Such	bne	|wbidc1|
1291.1Such	mcr	p15, 0, r0, c7, c6, 0
1301.1Such	mov	pc, lr
1311.1Such	DCD	|dcachebuf|
1321.9Snonaka	DCD	|dcachesize|
1331.1Such	ENDP  ; |WritebackInvalidateDCache|
1341.1Such
1351.1Such	;
1361.1Such	; WriteBuffer ops
1371.1Such	;
1381.1Such	EXPORT	|WritebufferFlush|
1391.1Such|WritebufferFlush| PROC
1401.1Such	; c7	(CRn) Cache Control Register
1411.1Such	; c10, 4(CRm, opcode_2) Flush D
1421.1Such	; r0	(Rd) ignored
1431.1Such	mcr	p15, 0, r0, c7, c10, 4
1441.1Such	mov	pc, lr
1451.1Such	ENDP  ; |WritebufferFlush|
1461.1Such
1471.1Such	;
1481.1Such	;	TLB ops.
1491.1Such	;
1501.1Such	EXPORT	|FlushIDTLB|
1511.1Such|FlushIDTLB| PROC
1521.1Such	mcr	p15, 0, r0, c8, c7, 0
1531.1Such	mov	pc, lr
1541.1Such	ENDP  ; |FlushIDTLB|
1551.1Such
1561.1Such	EXPORT	|FlushITLB|
1571.1Such|FlushITLB| PROC
1581.1Such	mcr	p15, 0, r0, c8, c5, 0
1591.1Such	mov	pc, lr
1601.1Such	ENDP  ; |FlushITLB|
1611.4Such
1621.1Such	EXPORT	|FlushDTLB|
1631.1Such|FlushDTLB| PROC
1641.1Such	mcr	p15, 0, r0, c8, c6, 0
1651.1Such	mov	pc, lr
1661.1Such	ENDP  ; |FlushITLB|
1671.1Such
1681.1Such	EXPORT	|FlushDTLBS|
1691.1Such|FlushDTLBS| PROC
1701.1Such	mcr	p15, 0, r0, c8, c6, 1
1711.1Such	mov	pc, lr
1721.1Such	ENDP  ; |FlushITLBS|
1731.1Such
1741.1Such	;
1751.1Such	;	CurrentProgramStatusRegister access.
1761.1Such	;
1771.1Such	EXPORT	|GetCPSR|
1781.1Such|GetCPSR| PROC
1791.1Such	mrs	r0, cpsr
1801.1Such	mov	pc, lr
1811.1Such	ENDP  ; |GetCPSR|
1821.1Such
1831.4Such	EXPORT	|SetCPSR|
1841.1Such|SetCPSR| PROC
1851.1Such	msr	cpsr, r0
1861.1Such	mov	pc, lr
1871.1Such	ENDP  ; |SetCPSR|
1881.1Such
1891.1Such	;
1901.1Such	;	SA-1100 Coprocessor15 access.
1911.1Such	;
1921.1Such; Reg0	ID (R)
1931.1Such	EXPORT	|GetCop15Reg0|
1941.1Such|GetCop15Reg0| PROC
1951.1Such	mrc	p15, 0, r0, c0, c0, 0
1961.1Such	; 0x4401a119 (44|01 = version 4|A11 = SA1100|9 = E stepping)
1971.1Such	mov	pc, lr
1981.1Such	ENDP  ; |GetCop15Reg0|
1991.1Such
2001.1Such; Reg1	Control (R/W)
2011.1Such	EXPORT	|GetCop15Reg1|
2021.1Such|GetCop15Reg1| PROC
2031.1Such	mrc	p15, 0, r0, c1, c0, 0
2041.1Such	; 0xc007327f (||...........|||..||..|..|||||||)
2051.1Such	;	0 (1)MMU enabled
2061.1Such	;	1 (1)Address fault enabled
2071.1Such	;	2 (1)D-cache enabled
2081.1Such	;	3 (1)Write-buffer enabled
2091.1Such	;	7 (0)little-endian
2101.1Such	;	8 (0)MMU protection (System)
2111.1Such	;	9 (1)MMU protection (ROM)
2121.1Such	;	12 (1)I-cache enabled
2131.1Such	;	13 (1)Base address of interrupt vector is 0xffff0000
2141.1Such	mov	pc, lr
2151.1Such	ENDP  ; |GetCop15Reg1|
2161.4Such	EXPORT	|SetCop15Reg1|
2171.1Such|SetCop15Reg1| PROC
2181.1Such	mcr	p15, 0, r0, c1, c0, 0
2191.1Such	nop
2201.1Such	nop
2211.1Such	nop
2221.1Such	mov	pc, lr
2231.1Such	ENDP  ; |SetCop15Reg1|
2241.4Such
2251.4Such; Reg2	Translation table base (R/W)
2261.4Such	EXPORT	|GetCop15Reg2|
2271.1Such|GetCop15Reg2| PROC
2281.1Such	mrc	p15, 0, r0, c2, c0, 0
2291.1Such	mov	pc, lr
2301.1Such	ENDP  ; |GetCop15Reg2|
2311.4Such	EXPORT	|SetCop15Reg2|
2321.1Such|SetCop15Reg2| PROC
2331.1Such	mcr	p15, 0, r0, c2, c0, 0
2341.1Such	mov	pc, lr
2351.1Such	ENDP  ; |SetCop15Reg2|
2361.1Such
2371.1Such; Reg3	Domain access control (R/W)
2381.1Such	EXPORT	|GetCop15Reg3|
2391.1Such|GetCop15Reg3| PROC
2401.1Such	mrc	p15, 0, r0, c3, c0, 0
2411.1Such	mov	pc, lr
2421.1Such	ENDP  ; |GetCop15Reg3|
2431.4Such	EXPORT	|SetCop15Reg3|
2441.1Such|SetCop15Reg3| PROC
2451.1Such	mcr	p15, 0, r0, c3, c0, 0
2461.1Such	mov	pc, lr
2471.1Such	ENDP  ; |SetCop15Reg3|
2481.4Such
2491.1Such; Reg5	Fault status (R/W)
2501.4Such	EXPORT	|GetCop15Reg5|
2511.1Such|GetCop15Reg5| PROC
2521.1Such	mrc	p15, 0, r0, c5, c0, 0
2531.1Such	mov	pc, lr
2541.1Such	ENDP  ; |GetCop15Reg5|
2551.4Such
2561.4Such; Reg6	Fault address (R/W)
2571.4Such	EXPORT	|GetCop15Reg6|
2581.1Such|GetCop15Reg6| PROC
2591.1Such	mrc	p15, 0, r0, c6, c0, 0
2601.1Such	mov	pc, lr
2611.1Such	ENDP  ; |GetCop15Reg6|
2621.1Such
2631.1Such; Reg7	Cache operations (W)
2641.1Such	; -> Cache ops
2651.1Such; Reg8	TLB operations (Flush) (W)
2661.1Such	; -> TLB ops
2671.4Such; Reg9	Read buffer operations (W)
2681.4Such; Reg13	Process ID (R/W)
2691.4Such	EXPORT	|GetCop15Reg13|
2701.1Such|GetCop15Reg13| PROC
2711.1Such	mrc	p15, 0, r0, c13, c0, 0
2721.1Such	mov	pc, lr
2731.1Such	ENDP  ; |GetCop15Reg13|
2741.4Such	EXPORT	|SetCop15Reg13|
2751.1Such|SetCop15Reg13| PROC
2761.1Such	mcr	p15, 0, r0, c13, c0, 0
2771.1Such	mov	pc, lr
2781.1Such	ENDP  ; |SetCop15Reg13|
2791.4Such
2801.1Such; Reg14	Breakpoint (R/W)
2811.4Such	EXPORT	|GetCop15Reg14|
2821.1Such|GetCop15Reg14| PROC
2831.1Such	mrc	p15, 0, r0, c14, c0, 0
2841.1Such	mov	pc, lr
2851.1Such	ENDP  ; |GetCop15Reg14|
2861.1Such; Reg15	Test, clock, and idle (W)
2871.4Such
2881.1Such	END
289