xref: /haiku/src/system/kernel/arch/m68k/arch_cpu_asm.S (revision 9f5e12b6b3963316be2f05912f1bc12c9bc87258)
1845a180fSFrançois Revol/*
2845a180fSFrançois Revol** Copyright 2003, Axel D�fler, axeld@pinc-software.de. All rights reserved.
3845a180fSFrançois Revol** Distributed under the terms of the OpenBeOS License.
4845a180fSFrançois Revol*/
5845a180fSFrançois Revol
6*9f5e12b6SFrançois Revol#include <asm_defs.h>
7845a180fSFrançois Revol
8845a180fSFrançois Revol.text
9845a180fSFrançois Revol
1042b025beSFrançois Revol#if 0 /* PPC stuff ahead... */
11845a180fSFrançois Revol/* uint32 get_sdr1(void);
12845a180fSFrançois Revol */
13845a180fSFrançois RevolFUNCTION(get_sdr1):
14845a180fSFrançois Revol	mfsdr1	%r3
15845a180fSFrançois Revol	blr
16845a180fSFrançois Revol
17845a180fSFrançois Revol/* void set_sdr1(uint32 value);
18845a180fSFrançois Revol *				 r3
19845a180fSFrançois Revol */
20845a180fSFrançois RevolFUNCTION(set_sdr1):
21845a180fSFrançois Revol	mtsdr1	%r3
22845a180fSFrançois Revol	blr
23845a180fSFrançois Revol
24845a180fSFrançois Revol/* uint32 get_sr(void *virtualAddress);
25845a180fSFrançois Revol *				 r3
26845a180fSFrançois Revol */
27845a180fSFrançois RevolFUNCTION(get_sr):
28845a180fSFrançois Revol	mfsrin	%r3, %r3
29845a180fSFrançois Revol	blr
30845a180fSFrançois Revol
31845a180fSFrançois Revol/* void set_sr(void *virtualAddress, uint32 value);
32845a180fSFrançois Revol *			   r3					 r4
33845a180fSFrançois Revol */
34845a180fSFrançois RevolFUNCTION(set_sr):
35845a180fSFrançois Revol	mtsrin	%r4, %r3
36845a180fSFrançois Revol	blr
37845a180fSFrançois Revol
38845a180fSFrançois Revol/* uint32 get_msr(void);
39845a180fSFrançois Revol */
40845a180fSFrançois RevolFUNCTION(get_msr):
41845a180fSFrançois Revol	mfmsr	%r3
42845a180fSFrançois Revol	blr
43845a180fSFrançois Revol
44845a180fSFrançois Revol/* uint32 set_msr(uint32 value);
45845a180fSFrançois Revol *				  r3
46845a180fSFrançois Revol */
47845a180fSFrançois RevolFUNCTION(set_msr):
48845a180fSFrançois Revol	mtmsr	%r3
49845a180fSFrançois Revol	blr
50845a180fSFrançois Revol
51845a180fSFrançois Revol/* uint32 get_pvr(void);
52845a180fSFrançois Revol */
53845a180fSFrançois RevolFUNCTION(get_pvr):
54845a180fSFrançois Revol	mfpvr	%r3
55845a180fSFrançois Revol	blr
56845a180fSFrançois Revol
57845a180fSFrançois Revol
58845a180fSFrançois Revol#define get_ibat(num) \
59845a180fSFrançois Revol	mfibatu	%r4, num; \
60845a180fSFrançois Revol	stw		%r4, 0(%r3); \
61845a180fSFrançois Revol	mfibatl	%r4, num; \
62845a180fSFrançois Revol	stw		%r4, 4(%r3); \
63845a180fSFrançois Revol
64845a180fSFrançois Revol#define set_ibat(num); \
65845a180fSFrançois Revol	lwz		%r4, 0(%r3); \
66845a180fSFrançois Revol	mtibatu num, %r4; \
67845a180fSFrançois Revol	lwz		%r4, 4(%r3); \
68845a180fSFrançois Revol	mtibatl	num, %r4;
69845a180fSFrançois Revol
70845a180fSFrançois Revol/* void get_ibat0-3(block_address_translation *bat);
71845a180fSFrançois Revol *					r3
72845a180fSFrançois Revol */
73845a180fSFrançois RevolFUNCTION(get_ibat0):
74845a180fSFrançois Revol	get_ibat(0)
75845a180fSFrançois Revol	blr
76845a180fSFrançois RevolFUNCTION(get_ibat1):
77845a180fSFrançois Revol	get_ibat(1)
78845a180fSFrançois Revol	blr
79845a180fSFrançois RevolFUNCTION(get_ibat2):
80845a180fSFrançois Revol	get_ibat(2)
81845a180fSFrançois Revol	blr
82845a180fSFrançois RevolFUNCTION(get_ibat3):
83845a180fSFrançois Revol	get_ibat(3)
84845a180fSFrançois Revol	blr
85845a180fSFrançois Revol
86845a180fSFrançois Revol/* void set_ibat0-3(block_address_translation *bat);
87845a180fSFrançois Revol *					r3
88845a180fSFrançois Revol */
89845a180fSFrançois RevolFUNCTION(set_ibat0):
90845a180fSFrançois Revol	set_ibat(0)
91845a180fSFrançois Revol	blr
92845a180fSFrançois RevolFUNCTION(set_ibat1):
93845a180fSFrançois Revol	set_ibat(1)
94845a180fSFrançois Revol	blr
95845a180fSFrançois RevolFUNCTION(set_ibat2):
96845a180fSFrançois Revol	set_ibat(2)
97845a180fSFrançois Revol	blr
98845a180fSFrançois RevolFUNCTION(set_ibat3):
99845a180fSFrançois Revol	set_ibat(3)
100845a180fSFrançois Revol	blr
101845a180fSFrançois Revol
102845a180fSFrançois Revol/* void reset_ibats(void)
103845a180fSFrançois Revol */
104845a180fSFrançois RevolFUNCTION(reset_ibats):
105845a180fSFrançois Revol	li		%r3, 0
106845a180fSFrançois Revol	mtibatu	0, %r3
107845a180fSFrançois Revol	mtibatl 0, %r3
108845a180fSFrançois Revol	mtibatu	1, %r3
109845a180fSFrançois Revol	mtibatl 1, %r3
110845a180fSFrançois Revol	mtibatu	2, %r3
111845a180fSFrançois Revol	mtibatl 2, %r3
112845a180fSFrançois Revol	mtibatu	3, %r3
113845a180fSFrançois Revol	mtibatl 3, %r3
114845a180fSFrançois Revol	blr
115845a180fSFrançois Revol
116845a180fSFrançois Revol#define get_dbat(num) \
117845a180fSFrançois Revol	mfdbatu	%r4, num; \
118845a180fSFrançois Revol	stw		%r4, 0(%r3); \
119845a180fSFrançois Revol	mfdbatl	%r4, num; \
120845a180fSFrançois Revol	stw		%r4, 4(%r3);
121845a180fSFrançois Revol
122845a180fSFrançois Revol#define set_dbat(num) \
123845a180fSFrançois Revol	lwz		%r4, 0(%r3); \
124845a180fSFrançois Revol	mtdbatu num, %r4; \
125845a180fSFrançois Revol	lwz		%r4, 4(%r3); \
126845a180fSFrançois Revol	mtdbatl	num, %r4;
127845a180fSFrançois Revol
128845a180fSFrançois Revol/* void get_dbat0-3(block_address_translation *bat);
129845a180fSFrançois Revol *					r3
130845a180fSFrançois Revol */
131845a180fSFrançois RevolFUNCTION(get_dbat0):
132845a180fSFrançois Revol	get_dbat(0)
133845a180fSFrançois Revol	blr
134845a180fSFrançois RevolFUNCTION(get_dbat1):
135845a180fSFrançois Revol	get_dbat(1)
136845a180fSFrançois Revol	blr
137845a180fSFrançois RevolFUNCTION(get_dbat2):
138845a180fSFrançois Revol	get_dbat(2)
139845a180fSFrançois Revol	blr
140845a180fSFrançois RevolFUNCTION(get_dbat3):
141845a180fSFrançois Revol	get_dbat(3)
142845a180fSFrançois Revol	blr
143845a180fSFrançois Revol
144845a180fSFrançois Revol/* void set_dbat0-3(block_address_translation *bat);
145845a180fSFrançois Revol *					r3
146845a180fSFrançois Revol */
147845a180fSFrançois RevolFUNCTION(set_dbat0):
148845a180fSFrançois Revol	set_dbat(0)
149845a180fSFrançois Revol	blr
150845a180fSFrançois RevolFUNCTION(set_dbat1):
151845a180fSFrançois Revol	set_dbat(1)
152845a180fSFrançois Revol	blr
153845a180fSFrançois RevolFUNCTION(set_dbat2):
154845a180fSFrançois Revol	set_dbat(2)
155845a180fSFrançois Revol	blr
156845a180fSFrançois RevolFUNCTION(set_dbat3):
157845a180fSFrançois Revol	set_dbat(3)
158845a180fSFrançois Revol	blr
159845a180fSFrançois Revol
160845a180fSFrançois Revol/* void reset_dbats(void)
161845a180fSFrançois Revol */
162845a180fSFrançois RevolFUNCTION(reset_dbats):
163845a180fSFrançois Revol	li		%r3, 0
164845a180fSFrançois Revol	mtdbatu	0, %r3
165845a180fSFrançois Revol	mtdbatl 0, %r3
166845a180fSFrançois Revol	mtdbatu	1, %r3
167845a180fSFrançois Revol	mtdbatl 1, %r3
168845a180fSFrançois Revol	mtdbatu	2, %r3
169845a180fSFrançois Revol	mtdbatl 2, %r3
170845a180fSFrançois Revol	mtdbatu	3, %r3
171845a180fSFrançois Revol	mtdbatl 3, %r3
172845a180fSFrançois Revol	blr
173845a180fSFrançois Revol
174845a180fSFrançois Revol/* void __eieio(void)
175845a180fSFrançois Revol */
176845a180fSFrançois RevolFUNCTION(__eieio):
177845a180fSFrançois Revol	eieio
178845a180fSFrançois Revol	blr
17942b025beSFrançois Revol#endif
180