aboutsummaryrefslogtreecommitdiff
path: root/src/lib/trap.zig
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-11 12:02:38 +0200
committerHimbeer <himbeer@disroot.org>2024-07-11 12:02:38 +0200
commit13da66a7d65c3ab7960bef7f8914c5a09ae2d5bd (patch)
treec4294be7cbf18d4e7de9b75acf9bdddae0287628 /src/lib/trap.zig
parentea070c02fb0894f264e815d37527ae0e9b67759c (diff)
resources: Add initial process creation API
Diffstat (limited to 'src/lib/trap.zig')
-rw-r--r--src/lib/trap.zig72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/lib/trap.zig b/src/lib/trap.zig
index 4460cfd..672c45f 100644
--- a/src/lib/trap.zig
+++ b/src/lib/trap.zig
@@ -8,4 +8,76 @@ pub const Frame = extern struct {
satp: usize, // Offset: 512
stack_pointer: *allowzero u8, // Offset: 520
hart_id: usize, // Offset: 528
+
+ pub inline fn save(self: *Frame) void {
+ _ = self;
+ asm volatile (
+ \\ sd x1, 8(a0)
+ \\ sd x2, 16(a0)
+ \\ sd x3, 24(a0)
+ \\ sd x4, 32(a0)
+ \\ sd x5, 40(a0)
+ \\ sd x6, 48(a0)
+ \\ sd x7, 56(a0)
+ \\ sd x8, 64(a0)
+ \\ sd x9, 72(a0)
+ \\ sd x10, 80(a0)
+ \\ sd x11, 88(a0)
+ \\ sd x12, 96(a0)
+ \\ sd x13, 104(a0)
+ \\ sd x14, 112(a0)
+ \\ sd x15, 120(a0)
+ \\ sd x16, 128(a0)
+ \\ sd x17, 136(a0)
+ \\ sd x18, 144(a0)
+ \\ sd x19, 152(a0)
+ \\ sd x20, 160(a0)
+ \\ sd x21, 168(a0)
+ \\ sd x22, 176(a0)
+ \\ sd x23, 184(a0)
+ \\ sd x24, 192(a0)
+ \\ sd x25, 200(a0)
+ \\ sd x26, 208(a0)
+ \\ sd x27, 216(a0)
+ \\ sd x28, 224(a0)
+ \\ sd x29, 232(a0)
+ \\ sd x30, 240(a0)
+ );
+ }
+
+ pub inline fn load(self: *const Frame) void {
+ _ = self;
+ asm volatile (
+ \\ ld x1, 8(a0)
+ \\ ld x2, 16(a0)
+ \\ ld x3, 24(a0)
+ \\ ld x4, 32(a0)
+ \\ ld x5, 40(a0)
+ \\ ld x6, 48(a0)
+ \\ ld x7, 56(a0)
+ \\ ld x8, 64(a0)
+ \\ ld x9, 72(a0)
+ \\ ld x10, 80(a0)
+ \\ ld x11, 88(a0)
+ \\ ld x12, 96(a0)
+ \\ ld x13, 104(a0)
+ \\ ld x14, 112(a0)
+ \\ ld x15, 120(a0)
+ \\ ld x16, 128(a0)
+ \\ ld x17, 136(a0)
+ \\ ld x18, 144(a0)
+ \\ ld x19, 152(a0)
+ \\ ld x20, 160(a0)
+ \\ ld x21, 168(a0)
+ \\ ld x22, 176(a0)
+ \\ ld x23, 184(a0)
+ \\ ld x24, 192(a0)
+ \\ ld x25, 200(a0)
+ \\ ld x26, 208(a0)
+ \\ ld x27, 216(a0)
+ \\ ld x28, 224(a0)
+ \\ ld x29, 232(a0)
+ \\ ld x30, 240(a0)
+ );
+ }
};