Markus Maiwald
2f8a062a74
feat(rumpk): Multi-Architecture HAL (aarch64, x86_64, riscv64)
...
TRI-ARCH SOVEREIGNTY
====================
Rumpk now supports three major architectures:
- aarch64 (ARM64): VisionFive 2, RPi, AWS Graviton
- x86_64: Standard servers, trading, banking
- riscv64: Sovereign compute, satellites, drones
DIRECTORY STRUCTURE
-------------------
hal/arch/
├── aarch64/
│ ├── switch.S # ARM64 context switch (96 bytes)
│ └── constants.nim # LR_OFFSET=11, FP_OFFSET=10
├── x86_64/
│ ├── switch.S # System V ABI switch (56 bytes)
│ └── constants.nim # RIP_OFFSET=6
└── riscv64/
├── switch.S # RISC-V LP64 switch (112 bytes)
└── constants.nim # RA_OFFSET=0
UNIFIED FIBER.NIM
-----------------
Uses Nim's 'when defined()' for compile-time arch selection:
- CONTEXT_SIZE varies by arch (56/96/112)
- RET_ADDR_INDEX points to return address slot
- Halt instruction varies (hlt/wfi)
BUILD SYSTEM
------------
./build.sh [aarch64|x86_64|riscv64]
- Default: aarch64
- Output: build/rumpk-$ARCH.elf
- Auto-selects linker script if arch-specific exists
ABI SUMMARY
-----------
| Arch | Callee-Saved | Frame | Alignment |
|----------|------------------------|-------|-----------|
| aarch64 | x19-x30 | 96B | 16-byte |
| x86_64 | rbx,rbp,r12-r15 | 56B | 16-byte |
| riscv64 | ra,s0-s11 | 112B | 16-byte |
VERIFICATION
------------
ARM64 fibers still work:
[Fiber A] I am alive! Yielding to B...
[Fiber B] Hello from B! Yielding to A...
[Fiber A] I am back! Yielding to B...
One codebase. All profiles. NIIX philosophy enforced.
2025-12-31 20:18:47 +01:00