diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-11 12:02:38 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-11 12:02:38 +0200 |
commit | 13da66a7d65c3ab7960bef7f8914c5a09ae2d5bd (patch) | |
tree | c4294be7cbf18d4e7de9b75acf9bdddae0287628 /src/lib/trap.zig | |
parent | ea070c02fb0894f264e815d37527ae0e9b67759c (diff) |
resources: Add initial process creation API
Diffstat (limited to 'src/lib/trap.zig')
-rw-r--r-- | src/lib/trap.zig | 72 |
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) + ); + } }; |