vfs: check userland buffers before reading them.
[haiku.git] / src / system / kernel / arch / ppc / arch_cpu_asm.S
blobbf5a4f629f33407f3f33503085bc0048c8ff7772
1 /*
2  * Copyright 2003, Axel Dörfler, axeld@pinc-software.de.
3  * Distributed under the terms of the MIT License.
4  */
6 #define FUNCTION(x) .global x; .type x,@function; x
8 .text
10 /* uint32 get_sdr1(void);
11  */
12 FUNCTION(get_sdr1):
13         mfsdr1  %r3
14         blr
16 /* void set_sdr1(uint32 value);
17  *                               r3
18  */
19 FUNCTION(set_sdr1):
20         mtsdr1  %r3
21         blr
23 /* uint32 get_sr(void *virtualAddress);
24  *                               r3
25  */
26 FUNCTION(get_sr):
27         mfsrin  %r3, %r3
28         blr
30 /* void set_sr(void *virtualAddress, uint32 value);
31  *                         r3                                    r4
32  */
33 FUNCTION(set_sr):
34         isync
35         mtsrin  %r4, %r3
36         isync
37         blr
39 /* uint32 get_msr(void);
40  */
41 FUNCTION(get_msr):
42         mfmsr   %r3
43         blr
45 /* uint32 set_msr(uint32 value);
46  *                                r3
47  */
48 FUNCTION(set_msr):
49         mtmsr   %r3
50         isync
51         blr
53 /* uint32 get_pvr(void);
54  */
55 FUNCTION(get_pvr):
56         mfpvr   %r3
57         blr
60 #define get_ibat(num) \
61         mfibatu %r4, num; \
62         stw             %r4, 0(%r3); \
63         mfibatl %r4, num; \
64         stw             %r4, 4(%r3); \
66 #define set_ibat(num); \
67         lwz             %r4, 0(%r3); \
68         mtibatu num, %r4; \
69         lwz             %r4, 4(%r3); \
70         mtibatl num, %r4;
72 /* void get_ibat0-3(block_address_translation *bat);
73  *                                      r3
74  */
75 FUNCTION(get_ibat0):
76         get_ibat(0)
77         blr
78 FUNCTION(get_ibat1):
79         get_ibat(1)
80         blr
81 FUNCTION(get_ibat2):
82         get_ibat(2)
83         blr
84 FUNCTION(get_ibat3):
85         get_ibat(3)
86         blr
88 /* void set_ibat0-3(block_address_translation *bat);
89  *                                      r3
90  */
91 FUNCTION(set_ibat0):
92         set_ibat(0)
93         blr
94 FUNCTION(set_ibat1):
95         set_ibat(1)
96         blr
97 FUNCTION(set_ibat2):
98         set_ibat(2)
99         blr
100 FUNCTION(set_ibat3):
101         set_ibat(3)
102         blr
104 /* void reset_ibats(void)
105  */
106 FUNCTION(reset_ibats):
107         li              %r3, 0
108         mtibatu 0, %r3
109         mtibatl 0, %r3
110         mtibatu 1, %r3
111         mtibatl 1, %r3
112         mtibatu 2, %r3
113         mtibatl 2, %r3
114         mtibatu 3, %r3
115         mtibatl 3, %r3
116         blr
118 #define get_dbat(num) \
119         mfdbatu %r4, num; \
120         stw             %r4, 0(%r3); \
121         mfdbatl %r4, num; \
122         stw             %r4, 4(%r3);
124 #define set_dbat(num) \
125         lwz             %r4, 0(%r3); \
126         mtdbatu num, %r4; \
127         lwz             %r4, 4(%r3); \
128         mtdbatl num, %r4;
130 /* void get_dbat0-3(block_address_translation *bat);
131  *                                      r3
132  */
133 FUNCTION(get_dbat0):
134         get_dbat(0)
135         blr
136 FUNCTION(get_dbat1):
137         get_dbat(1)
138         blr
139 FUNCTION(get_dbat2):
140         get_dbat(2)
141         blr
142 FUNCTION(get_dbat3):
143         get_dbat(3)
144         blr
146 /* void set_dbat0-3(block_address_translation *bat);
147  *                                      r3
148  */
149 FUNCTION(set_dbat0):
150         set_dbat(0)
151         blr
152 FUNCTION(set_dbat1):
153         set_dbat(1)
154         blr
155 FUNCTION(set_dbat2):
156         set_dbat(2)
157         blr
158 FUNCTION(set_dbat3):
159         set_dbat(3)
160         blr
162 /* void reset_dbats(void)
163  */
164 FUNCTION(reset_dbats):
165         li              %r3, 0
166         mtdbatu 0, %r3
167         mtdbatl 0, %r3
168         mtdbatu 1, %r3
169         mtdbatl 1, %r3
170         mtdbatu 2, %r3
171         mtdbatl 2, %r3
172         mtdbatu 3, %r3
173         mtdbatl 3, %r3
174         blr
176 /* void __eieio(void)
177  */
178 FUNCTION(__eieio):
179         eieio
180         blr