aboutsummaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-12-30 14:41:08 +0530
committerBobby <[email protected]>2025-12-30 14:41:08 +0530
commit5de74fe69126c5c28142b19770438f6a2ebf4f1e (patch)
tree433006b0aaaefa38c8feb6513894d1b78656870d /system
parent1e732e7e5b1a81cf88556005110a039e18553eea (diff)
downloadakiba-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.zig4
-rw-r--r--system/libraries/akiba/sys.zig20
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;
}