diff options
| author | Bobby <[email protected]> | 2025-12-30 14:41:08 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-12-30 14:41:08 +0530 |
| commit | 5de74fe69126c5c28142b19770438f6a2ebf4f1e (patch) | |
| tree | 433006b0aaaefa38c8feb6513894d1b78656870d /system | |
| parent | 1e732e7e5b1a81cf88556005110a039e18553eea (diff) | |
| download | akiba-5de74fe69126c5c28142b19770438f6a2ebf4f1e.tar.xz akiba-5de74fe69126c5c28142b19770438f6a2ebf4f1e.zip | |
feat: add yield invocation and syscall support for process scheduling
Diffstat (limited to 'system')
| -rw-r--r-- | system/libraries/akiba/kata.zig | 4 | ||||
| -rw-r--r-- | system/libraries/akiba/sys.zig | 20 |
2 files changed, 21 insertions, 3 deletions
diff --git a/system/libraries/akiba/kata.zig b/system/libraries/akiba/kata.zig index 3d1ccef..2283ce8 100644 --- a/system/libraries/akiba/kata.zig +++ b/system/libraries/akiba/kata.zig @@ -2,6 +2,10 @@ const sys = @import("sys.zig"); +pub fn yield() void { + _ = sys.syscall0(.yield); +} + pub fn exit(code: u64) noreturn { _ = sys.syscall1(.exit, code); unreachable; diff --git a/system/libraries/akiba/sys.zig b/system/libraries/akiba/sys.zig index bf0eec4..ee74777 100644 --- a/system/libraries/akiba/sys.zig +++ b/system/libraries/akiba/sys.zig @@ -8,15 +8,27 @@ pub const Invocation = enum(u64) { mark = 0x05, spawn = 0x06, wait = 0x07, + yield = 0x08, }; +pub fn syscall0(inv: Invocation) u64 { + var result: u64 = undefined; + asm volatile ("syscall" + : [ret] "={rax}" (result), + : [inv] "{rax}" (@intFromEnum(inv)), + : .{ .rcx = true, .r11 = true, .memory = true } + ); + return result; +} + pub fn syscall1(inv: Invocation, arg1: u64) u64 { var result: u64 = undefined; asm volatile ("syscall" : [ret] "={rax}" (result), : [inv] "{rax}" (@intFromEnum(inv)), [arg1] "{rdi}" (arg1), - : .{ .memory = true }); + : .{ .rcx = true, .r11 = true, .memory = true } + ); return result; } @@ -27,7 +39,8 @@ pub fn syscall2(inv: Invocation, arg1: u64, arg2: u64) u64 { : [inv] "{rax}" (@intFromEnum(inv)), [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), - : .{ .memory = true }); + : .{ .rcx = true, .r11 = true, .memory = true } + ); return result; } @@ -39,6 +52,7 @@ pub fn syscall3(inv: Invocation, arg1: u64, arg2: u64, arg3: u64) u64 { [arg1] "{rdi}" (arg1), [arg2] "{rsi}" (arg2), [arg3] "{rdx}" (arg3), - : .{ .memory = true }); + : .{ .rcx = true, .r11 = true, .memory = true } + ); return result; } |
