blob: 71556ed0c7fa8f5113c89d7e81a36bb033b14f62 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
general_purpose_registers: [32]usize, // Offset: 0
floating_point_registers: [32]usize, // Offset: 256
satp: usize, // Offset: 512
stack_pointer: *allowzero u8, // Offset: 520
hart_id: usize, // Offset: 528
const Self = @This();
pub fn setReturnValue(self: *Self, value: anytype) void {
switch (@typeInfo(@TypeOf(value))) {
.ErrorUnion => self.returnErrorUnion(value),
.ErrorSet => self.returnError(value),
else => self.returnValue(value),
}
}
fn returnErrorUnion(self: *Self, error_union: anytype) void {
if (error_union) |value| {
self.returnValue(value);
} else |err| {
self.returnError(err);
}
}
fn returnError(self: *Self, err: anyerror) void {
self.general_purpose_registers[11] = @intFromError(err);
}
fn returnValue(self: *Self, value: anytype) void {
self.general_purpose_registers[11] = 0;
if (@typeInfo(@TypeOf(value)) != .Void) {
self.general_purpose_registers[10] = @bitCast(value);
}
}
|