TIME HAS BEEN INVENTED ====================== Rumpk now has cooperative multitasking with Fibers. BOOT OUTPUT ----------- [Fiber A] I am alive! Yielding to B... [Fiber B] Hello from B! Yielding to A... [Fiber A] I am back! Yielding to B... [Fiber B] Returned! Yielding to A... [Fiber A] Final return. Halting. IMPLEMENTATION -------------- hal/switch.S: - ARM64 context switch (96-byte frame, 16-byte aligned) - Saves x19-x28, x29 (FP), x30 (LR) - Stack pointer swap between fibers core/fiber.nim: - FiberObject with state (sp, entry) - fiber_trampoline() - entry point for new fibers - init_fiber() - sets up initial stack frame - switch() - cooperative yield to another fiber BUILD FIXES ----------- - Added -fno-sanitize=all to prevent ubsan interference - Added --checks:off --assertions:off to Nim - Fixed stack alignment (104 -> 96 bytes) PHASES COMPLETED ---------------- ✅ Phase 1: Documentation (SPEC-008/009/010) ✅ Phase 2: Pure Zig libc (Freestanding Doctrine) ✅ Phase 3: Cooperative Fibers (Ping Pong) → Phase 4: NPL loading + Ed25519 → Phase 5: VisionFive 2 RISC-V The unikernel can now multiplex execution. POSIX threads are optional. We own the scheduler. |
||
|---|---|---|
| .. | ||
| abi.zig | ||
| main.zig | ||
| stubs.zig | ||
| switch.S | ||
| uart.zig | ||