1 // Copyright 2018 yuzu emulator team
2 // Licensed under GPLv2 or any later version
3 // Refer to the license.txt file included.
4
5 #pragma once
6
7 #include "common/common_types.h"
8 #include "core/arm/arm_interface.h"
9 #include "core/core.h"
10 #include "core/hle/result.h"
11
12 namespace Kernel {
13
Param(const Core::System & system,int n)14 static inline u64 Param(const Core::System& system, int n) {
15 return system.CurrentArmInterface().GetReg(n);
16 }
17
Param32(const Core::System & system,int n)18 static inline u32 Param32(const Core::System& system, int n) {
19 return static_cast<u32>(system.CurrentArmInterface().GetReg(n));
20 }
21
22 /**
23 * HLE a function return from the current ARM userland process
24 * @param system System context
25 * @param result Result to return
26 */
FuncReturn(Core::System & system,u64 result)27 static inline void FuncReturn(Core::System& system, u64 result) {
28 system.CurrentArmInterface().SetReg(0, result);
29 }
30
FuncReturn32(Core::System & system,u32 result)31 static inline void FuncReturn32(Core::System& system, u32 result) {
32 system.CurrentArmInterface().SetReg(0, (u64)result);
33 }
34
35 ////////////////////////////////////////////////////////////////////////////////////////////////////
36 // Function wrappers that return type ResultCode
37
38 template <ResultCode func(Core::System&, u64)>
SvcWrap64(Core::System & system)39 void SvcWrap64(Core::System& system) {
40 FuncReturn(system, func(system, Param(system, 0)).raw);
41 }
42
43 template <ResultCode func(Core::System&, u64, u64)>
SvcWrap64(Core::System & system)44 void SvcWrap64(Core::System& system) {
45 FuncReturn(system, func(system, Param(system, 0), Param(system, 1)).raw);
46 }
47
48 template <ResultCode func(Core::System&, u32)>
SvcWrap64(Core::System & system)49 void SvcWrap64(Core::System& system) {
50 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0))).raw);
51 }
52
53 template <ResultCode func(Core::System&, u32, u32)>
SvcWrap64(Core::System & system)54 void SvcWrap64(Core::System& system) {
55 FuncReturn(
56 system,
57 func(system, static_cast<u32>(Param(system, 0)), static_cast<u32>(Param(system, 1))).raw);
58 }
59
60 template <ResultCode func(Core::System&, u32, u64, u64, u64)>
SvcWrap64(Core::System & system)61 void SvcWrap64(Core::System& system) {
62 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0)), Param(system, 1),
63 Param(system, 2), Param(system, 3))
64 .raw);
65 }
66
67 template <ResultCode func(Core::System&, u32*)>
SvcWrap64(Core::System & system)68 void SvcWrap64(Core::System& system) {
69 u32 param = 0;
70 const u32 retval = func(system, ¶m).raw;
71 system.CurrentArmInterface().SetReg(1, param);
72 FuncReturn(system, retval);
73 }
74
75 template <ResultCode func(Core::System&, u32*, u32)>
SvcWrap64(Core::System & system)76 void SvcWrap64(Core::System& system) {
77 u32 param_1 = 0;
78 const u32 retval = func(system, ¶m_1, static_cast<u32>(Param(system, 1))).raw;
79 system.CurrentArmInterface().SetReg(1, param_1);
80 FuncReturn(system, retval);
81 }
82
83 template <ResultCode func(Core::System&, u32*, u32*)>
SvcWrap64(Core::System & system)84 void SvcWrap64(Core::System& system) {
85 u32 param_1 = 0;
86 u32 param_2 = 0;
87 const u32 retval = func(system, ¶m_1, ¶m_2).raw;
88
89 auto& arm_interface = system.CurrentArmInterface();
90 arm_interface.SetReg(1, param_1);
91 arm_interface.SetReg(2, param_2);
92
93 FuncReturn(system, retval);
94 }
95
96 template <ResultCode func(Core::System&, u32*, u64)>
SvcWrap64(Core::System & system)97 void SvcWrap64(Core::System& system) {
98 u32 param_1 = 0;
99 const u32 retval = func(system, ¶m_1, Param(system, 1)).raw;
100 system.CurrentArmInterface().SetReg(1, param_1);
101 FuncReturn(system, retval);
102 }
103
104 template <ResultCode func(Core::System&, u32*, u64, u32)>
SvcWrap64(Core::System & system)105 void SvcWrap64(Core::System& system) {
106 u32 param_1 = 0;
107 const u32 retval =
108 func(system, ¶m_1, Param(system, 1), static_cast<u32>(Param(system, 2))).raw;
109
110 system.CurrentArmInterface().SetReg(1, param_1);
111 FuncReturn(system, retval);
112 }
113
114 template <ResultCode func(Core::System&, u64*, u32)>
SvcWrap64(Core::System & system)115 void SvcWrap64(Core::System& system) {
116 u64 param_1 = 0;
117 const u32 retval = func(system, ¶m_1, static_cast<u32>(Param(system, 1))).raw;
118
119 system.CurrentArmInterface().SetReg(1, param_1);
120 FuncReturn(system, retval);
121 }
122
123 template <ResultCode func(Core::System&, u64, u32)>
SvcWrap64(Core::System & system)124 void SvcWrap64(Core::System& system) {
125 FuncReturn(system, func(system, Param(system, 0), static_cast<u32>(Param(system, 1))).raw);
126 }
127
128 template <ResultCode func(Core::System&, u64*, u64)>
SvcWrap64(Core::System & system)129 void SvcWrap64(Core::System& system) {
130 u64 param_1 = 0;
131 const u32 retval = func(system, ¶m_1, Param(system, 1)).raw;
132
133 system.CurrentArmInterface().SetReg(1, param_1);
134 FuncReturn(system, retval);
135 }
136
137 template <ResultCode func(Core::System&, u64*, u32, u32)>
SvcWrap64(Core::System & system)138 void SvcWrap64(Core::System& system) {
139 u64 param_1 = 0;
140 const u32 retval = func(system, ¶m_1, static_cast<u32>(Param(system, 1)),
141 static_cast<u32>(Param(system, 2)))
142 .raw;
143
144 system.CurrentArmInterface().SetReg(1, param_1);
145 FuncReturn(system, retval);
146 }
147
148 template <ResultCode func(Core::System&, u32, u64)>
SvcWrap64(Core::System & system)149 void SvcWrap64(Core::System& system) {
150 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0)), Param(system, 1)).raw);
151 }
152
153 template <ResultCode func(Core::System&, u32, u32, u64)>
SvcWrap64(Core::System & system)154 void SvcWrap64(Core::System& system) {
155 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0)),
156 static_cast<u32>(Param(system, 1)), Param(system, 2))
157 .raw);
158 }
159
160 template <ResultCode func(Core::System&, u32, u32*, u64*)>
SvcWrap64(Core::System & system)161 void SvcWrap64(Core::System& system) {
162 u32 param_1 = 0;
163 u64 param_2 = 0;
164 const ResultCode retval = func(system, static_cast<u32>(Param(system, 2)), ¶m_1, ¶m_2);
165
166 system.CurrentArmInterface().SetReg(1, param_1);
167 system.CurrentArmInterface().SetReg(2, param_2);
168 FuncReturn(system, retval.raw);
169 }
170
171 template <ResultCode func(Core::System&, u64, u64, u32, u32)>
SvcWrap64(Core::System & system)172 void SvcWrap64(Core::System& system) {
173 FuncReturn(system, func(system, Param(system, 0), Param(system, 1),
174 static_cast<u32>(Param(system, 2)), static_cast<u32>(Param(system, 3)))
175 .raw);
176 }
177
178 template <ResultCode func(Core::System&, u64, u64, u32, u64)>
SvcWrap64(Core::System & system)179 void SvcWrap64(Core::System& system) {
180 FuncReturn(system, func(system, Param(system, 0), Param(system, 1),
181 static_cast<u32>(Param(system, 2)), Param(system, 3))
182 .raw);
183 }
184
185 template <ResultCode func(Core::System&, u32, u64, u32)>
SvcWrap64(Core::System & system)186 void SvcWrap64(Core::System& system) {
187 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0)), Param(system, 1),
188 static_cast<u32>(Param(system, 2)))
189 .raw);
190 }
191
192 template <ResultCode func(Core::System&, u64, u64, u64)>
SvcWrap64(Core::System & system)193 void SvcWrap64(Core::System& system) {
194 FuncReturn(system, func(system, Param(system, 0), Param(system, 1), Param(system, 2)).raw);
195 }
196
197 template <ResultCode func(Core::System&, u64, u64, u32)>
SvcWrap64(Core::System & system)198 void SvcWrap64(Core::System& system) {
199 FuncReturn(
200 system,
201 func(system, Param(system, 0), Param(system, 1), static_cast<u32>(Param(system, 2))).raw);
202 }
203
204 template <ResultCode func(Core::System&, u32, u64, u64, u32)>
SvcWrap64(Core::System & system)205 void SvcWrap64(Core::System& system) {
206 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0)), Param(system, 1),
207 Param(system, 2), static_cast<u32>(Param(system, 3)))
208 .raw);
209 }
210
211 template <ResultCode func(Core::System&, u32, u64, u64)>
SvcWrap64(Core::System & system)212 void SvcWrap64(Core::System& system) {
213 FuncReturn(
214 system,
215 func(system, static_cast<u32>(Param(system, 0)), Param(system, 1), Param(system, 2)).raw);
216 }
217
218 template <ResultCode func(Core::System&, u32*, u64, u64, s64)>
SvcWrap64(Core::System & system)219 void SvcWrap64(Core::System& system) {
220 u32 param_1 = 0;
221 const u32 retval = func(system, ¶m_1, Param(system, 1), static_cast<u32>(Param(system, 2)),
222 static_cast<s64>(Param(system, 3)))
223 .raw;
224
225 system.CurrentArmInterface().SetReg(1, param_1);
226 FuncReturn(system, retval);
227 }
228
229 template <ResultCode func(Core::System&, u64, u64, u32, s64)>
SvcWrap64(Core::System & system)230 void SvcWrap64(Core::System& system) {
231 FuncReturn(system, func(system, Param(system, 0), Param(system, 1),
232 static_cast<u32>(Param(system, 2)), static_cast<s64>(Param(system, 3)))
233 .raw);
234 }
235
236 template <ResultCode func(Core::System&, u64*, u64, u64, u64)>
SvcWrap64(Core::System & system)237 void SvcWrap64(Core::System& system) {
238 u64 param_1 = 0;
239 const u32 retval =
240 func(system, ¶m_1, Param(system, 1), Param(system, 2), Param(system, 3)).raw;
241
242 system.CurrentArmInterface().SetReg(1, param_1);
243 FuncReturn(system, retval);
244 }
245
246 template <ResultCode func(Core::System&, u32*, u64, u64, u64, u32, s32)>
SvcWrap64(Core::System & system)247 void SvcWrap64(Core::System& system) {
248 u32 param_1 = 0;
249 const u32 retval = func(system, ¶m_1, Param(system, 1), Param(system, 2), Param(system, 3),
250 static_cast<u32>(Param(system, 4)), static_cast<s32>(Param(system, 5)))
251 .raw;
252
253 system.CurrentArmInterface().SetReg(1, param_1);
254 FuncReturn(system, retval);
255 }
256
257 template <ResultCode func(Core::System&, u32*, u64, u64, u32)>
SvcWrap64(Core::System & system)258 void SvcWrap64(Core::System& system) {
259 u32 param_1 = 0;
260 const u32 retval = func(system, ¶m_1, Param(system, 1), Param(system, 2),
261 static_cast<u32>(Param(system, 3)))
262 .raw;
263
264 system.CurrentArmInterface().SetReg(1, param_1);
265 FuncReturn(system, retval);
266 }
267
268 template <ResultCode func(Core::System&, Handle*, u64, u32, u32)>
SvcWrap64(Core::System & system)269 void SvcWrap64(Core::System& system) {
270 u32 param_1 = 0;
271 const u32 retval = func(system, ¶m_1, Param(system, 1), static_cast<u32>(Param(system, 2)),
272 static_cast<u32>(Param(system, 3)))
273 .raw;
274
275 system.CurrentArmInterface().SetReg(1, param_1);
276 FuncReturn(system, retval);
277 }
278
279 template <ResultCode func(Core::System&, u64, u32, s32, s64)>
SvcWrap64(Core::System & system)280 void SvcWrap64(Core::System& system) {
281 FuncReturn(system, func(system, Param(system, 0), static_cast<u32>(Param(system, 1)),
282 static_cast<s32>(Param(system, 2)), static_cast<s64>(Param(system, 3)))
283 .raw);
284 }
285
286 template <ResultCode func(Core::System&, u64, u32, s32, s32)>
SvcWrap64(Core::System & system)287 void SvcWrap64(Core::System& system) {
288 FuncReturn(system, func(system, Param(system, 0), static_cast<u32>(Param(system, 1)),
289 static_cast<s32>(Param(system, 2)), static_cast<s32>(Param(system, 3)))
290 .raw);
291 }
292
293 ////////////////////////////////////////////////////////////////////////////////////////////////////
294 // Function wrappers that return type u32
295
296 template <u32 func(Core::System&)>
SvcWrap64(Core::System & system)297 void SvcWrap64(Core::System& system) {
298 FuncReturn(system, func(system));
299 }
300
301 ////////////////////////////////////////////////////////////////////////////////////////////////////
302 // Function wrappers that return type u64
303
304 template <u64 func(Core::System&)>
SvcWrap64(Core::System & system)305 void SvcWrap64(Core::System& system) {
306 FuncReturn(system, func(system));
307 }
308
309 ////////////////////////////////////////////////////////////////////////////////////////////////////
310 /// Function wrappers that return type void
311
312 template <void func(Core::System&)>
SvcWrap64(Core::System & system)313 void SvcWrap64(Core::System& system) {
314 func(system);
315 }
316
317 template <void func(Core::System&, u32)>
SvcWrap64(Core::System & system)318 void SvcWrap64(Core::System& system) {
319 func(system, static_cast<u32>(Param(system, 0)));
320 }
321
322 template <void func(Core::System&, u32, u64, u64, u64)>
SvcWrap64(Core::System & system)323 void SvcWrap64(Core::System& system) {
324 func(system, static_cast<u32>(Param(system, 0)), Param(system, 1), Param(system, 2),
325 Param(system, 3));
326 }
327
328 template <void func(Core::System&, s64)>
SvcWrap64(Core::System & system)329 void SvcWrap64(Core::System& system) {
330 func(system, static_cast<s64>(Param(system, 0)));
331 }
332
333 template <void func(Core::System&, u64, s32)>
SvcWrap64(Core::System & system)334 void SvcWrap64(Core::System& system) {
335 func(system, Param(system, 0), static_cast<s32>(Param(system, 1)));
336 }
337
338 template <void func(Core::System&, u64, u64)>
SvcWrap64(Core::System & system)339 void SvcWrap64(Core::System& system) {
340 func(system, Param(system, 0), Param(system, 1));
341 }
342
343 template <void func(Core::System&, u64, u64, u64)>
SvcWrap64(Core::System & system)344 void SvcWrap64(Core::System& system) {
345 func(system, Param(system, 0), Param(system, 1), Param(system, 2));
346 }
347
348 template <void func(Core::System&, u32, u64, u64)>
SvcWrap64(Core::System & system)349 void SvcWrap64(Core::System& system) {
350 func(system, static_cast<u32>(Param(system, 0)), Param(system, 1), Param(system, 2));
351 }
352
353 // Used by QueryMemory32, ArbitrateLock32
354 template <ResultCode func(Core::System&, u32, u32, u32)>
SvcWrap32(Core::System & system)355 void SvcWrap32(Core::System& system) {
356 FuncReturn32(system,
357 func(system, Param32(system, 0), Param32(system, 1), Param32(system, 2)).raw);
358 }
359
360 // Used by Break32
361 template <void func(Core::System&, u32, u32, u32)>
SvcWrap32(Core::System & system)362 void SvcWrap32(Core::System& system) {
363 func(system, Param32(system, 0), Param32(system, 1), Param32(system, 2));
364 }
365
366 // Used by ExitProcess32, ExitThread32
367 template <void func(Core::System&)>
SvcWrap32(Core::System & system)368 void SvcWrap32(Core::System& system) {
369 func(system);
370 }
371
372 // Used by GetCurrentProcessorNumber32
373 template <u32 func(Core::System&)>
SvcWrap32(Core::System & system)374 void SvcWrap32(Core::System& system) {
375 FuncReturn32(system, func(system));
376 }
377
378 // Used by SleepThread32
379 template <void func(Core::System&, u32, u32)>
SvcWrap32(Core::System & system)380 void SvcWrap32(Core::System& system) {
381 func(system, Param32(system, 0), Param32(system, 1));
382 }
383
384 // Used by CreateThread32
385 template <ResultCode func(Core::System&, Handle*, u32, u32, u32, u32, s32)>
SvcWrap32(Core::System & system)386 void SvcWrap32(Core::System& system) {
387 Handle param_1 = 0;
388
389 const u32 retval = func(system, ¶m_1, Param32(system, 0), Param32(system, 1),
390 Param32(system, 2), Param32(system, 3), Param32(system, 4))
391 .raw;
392
393 system.CurrentArmInterface().SetReg(1, param_1);
394 FuncReturn(system, retval);
395 }
396
397 // Used by GetInfo32
398 template <ResultCode func(Core::System&, u32*, u32*, u32, u32, u32, u32)>
SvcWrap32(Core::System & system)399 void SvcWrap32(Core::System& system) {
400 u32 param_1 = 0;
401 u32 param_2 = 0;
402
403 const u32 retval = func(system, ¶m_1, ¶m_2, Param32(system, 0), Param32(system, 1),
404 Param32(system, 2), Param32(system, 3))
405 .raw;
406
407 system.CurrentArmInterface().SetReg(1, param_1);
408 system.CurrentArmInterface().SetReg(2, param_2);
409 FuncReturn(system, retval);
410 }
411
412 // Used by GetThreadPriority32, ConnectToNamedPort32
413 template <ResultCode func(Core::System&, u32*, u32)>
SvcWrap32(Core::System & system)414 void SvcWrap32(Core::System& system) {
415 u32 param_1 = 0;
416 const u32 retval = func(system, ¶m_1, Param32(system, 1)).raw;
417 system.CurrentArmInterface().SetReg(1, param_1);
418 FuncReturn(system, retval);
419 }
420
421 // Used by GetThreadId32
422 template <ResultCode func(Core::System&, u32*, u32*, u32)>
SvcWrap32(Core::System & system)423 void SvcWrap32(Core::System& system) {
424 u32 param_1 = 0;
425 u32 param_2 = 0;
426
427 const u32 retval = func(system, ¶m_1, ¶m_2, Param32(system, 1)).raw;
428 system.CurrentArmInterface().SetReg(1, param_1);
429 system.CurrentArmInterface().SetReg(2, param_2);
430 FuncReturn(system, retval);
431 }
432
433 // Used by GetSystemTick32
434 template <void func(Core::System&, u32*, u32*)>
SvcWrap32(Core::System & system)435 void SvcWrap32(Core::System& system) {
436 u32 param_1 = 0;
437 u32 param_2 = 0;
438
439 func(system, ¶m_1, ¶m_2);
440 system.CurrentArmInterface().SetReg(0, param_1);
441 system.CurrentArmInterface().SetReg(1, param_2);
442 }
443
444 // Used by CreateEvent32
445 template <ResultCode func(Core::System&, Handle*, Handle*)>
SvcWrap32(Core::System & system)446 void SvcWrap32(Core::System& system) {
447 Handle param_1 = 0;
448 Handle param_2 = 0;
449
450 const u32 retval = func(system, ¶m_1, ¶m_2).raw;
451 system.CurrentArmInterface().SetReg(1, param_1);
452 system.CurrentArmInterface().SetReg(2, param_2);
453 FuncReturn(system, retval);
454 }
455
456 // Used by GetThreadId32
457 template <ResultCode func(Core::System&, Handle, u32*, u32*, u32*)>
SvcWrap32(Core::System & system)458 void SvcWrap32(Core::System& system) {
459 u32 param_1 = 0;
460 u32 param_2 = 0;
461 u32 param_3 = 0;
462
463 const u32 retval = func(system, Param32(system, 2), ¶m_1, ¶m_2, ¶m_3).raw;
464 system.CurrentArmInterface().SetReg(1, param_1);
465 system.CurrentArmInterface().SetReg(2, param_2);
466 system.CurrentArmInterface().SetReg(3, param_3);
467 FuncReturn(system, retval);
468 }
469
470 // Used by SignalProcessWideKey32
471 template <void func(Core::System&, u32, s32)>
SvcWrap32(Core::System & system)472 void SvcWrap32(Core::System& system) {
473 func(system, static_cast<u32>(Param(system, 0)), static_cast<s32>(Param(system, 1)));
474 }
475
476 // Used by SetThreadPriority32
477 template <ResultCode func(Core::System&, Handle, u32)>
SvcWrap32(Core::System & system)478 void SvcWrap32(Core::System& system) {
479 const u32 retval =
480 func(system, static_cast<Handle>(Param(system, 0)), static_cast<u32>(Param(system, 1))).raw;
481 FuncReturn(system, retval);
482 }
483
484 // Used by SetThreadCoreMask32
485 template <ResultCode func(Core::System&, Handle, u32, u32, u32)>
SvcWrap32(Core::System & system)486 void SvcWrap32(Core::System& system) {
487 const u32 retval =
488 func(system, static_cast<Handle>(Param(system, 0)), static_cast<u32>(Param(system, 1)),
489 static_cast<u32>(Param(system, 2)), static_cast<u32>(Param(system, 3)))
490 .raw;
491 FuncReturn(system, retval);
492 }
493
494 // Used by WaitProcessWideKeyAtomic32
495 template <ResultCode func(Core::System&, u32, u32, Handle, u32, u32)>
SvcWrap32(Core::System & system)496 void SvcWrap32(Core::System& system) {
497 const u32 retval =
498 func(system, static_cast<u32>(Param(system, 0)), static_cast<u32>(Param(system, 1)),
499 static_cast<Handle>(Param(system, 2)), static_cast<u32>(Param(system, 3)),
500 static_cast<u32>(Param(system, 4)))
501 .raw;
502 FuncReturn(system, retval);
503 }
504
505 // Used by WaitForAddress32
506 template <ResultCode func(Core::System&, u32, u32, s32, u32, u32)>
SvcWrap32(Core::System & system)507 void SvcWrap32(Core::System& system) {
508 const u32 retval = func(system, static_cast<u32>(Param(system, 0)),
509 static_cast<u32>(Param(system, 1)), static_cast<s32>(Param(system, 2)),
510 static_cast<u32>(Param(system, 3)), static_cast<u32>(Param(system, 4)))
511 .raw;
512 FuncReturn(system, retval);
513 }
514
515 // Used by SignalToAddress32
516 template <ResultCode func(Core::System&, u32, u32, s32, s32)>
SvcWrap32(Core::System & system)517 void SvcWrap32(Core::System& system) {
518 const u32 retval =
519 func(system, static_cast<u32>(Param(system, 0)), static_cast<u32>(Param(system, 1)),
520 static_cast<s32>(Param(system, 2)), static_cast<s32>(Param(system, 3)))
521 .raw;
522 FuncReturn(system, retval);
523 }
524
525 // Used by SendSyncRequest32, ArbitrateUnlock32
526 template <ResultCode func(Core::System&, u32)>
SvcWrap32(Core::System & system)527 void SvcWrap32(Core::System& system) {
528 FuncReturn(system, func(system, static_cast<u32>(Param(system, 0))).raw);
529 }
530
531 // Used by CreateTransferMemory32
532 template <ResultCode func(Core::System&, Handle*, u32, u32, u32)>
SvcWrap32(Core::System & system)533 void SvcWrap32(Core::System& system) {
534 Handle handle = 0;
535 const u32 retval =
536 func(system, &handle, Param32(system, 1), Param32(system, 2), Param32(system, 3)).raw;
537 system.CurrentArmInterface().SetReg(1, handle);
538 FuncReturn(system, retval);
539 }
540
541 // Used by WaitSynchronization32
542 template <ResultCode func(Core::System&, u32, u32, s32, u32, Handle*)>
SvcWrap32(Core::System & system)543 void SvcWrap32(Core::System& system) {
544 u32 param_1 = 0;
545 const u32 retval = func(system, Param32(system, 0), Param32(system, 1), Param32(system, 2),
546 Param32(system, 3), ¶m_1)
547 .raw;
548 system.CurrentArmInterface().SetReg(1, param_1);
549 FuncReturn(system, retval);
550 }
551
552 } // namespace Kernel
553