stage2 提供近乎完整的功能但出现严重性能问题 添加stage0的原生性能记录 stage1添加更多内置函数 nob重构代码使其更加健壮

This commit is contained in:
zzy committed 2026-09-19 18:08:43 +08:00
1 parent b5a7a811b3
commit e02b0c633a
35 files changed
+14018 -216

No files matched your search

+38
View File
@@ -16,6 +16,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* =================================================================
* Macro templates
@@ -322,6 +323,41 @@ static spl_vm_val_t vm_printf(spl_vm_t *_vm, int nargs, spl_vm_val_t *args) {
return (spl_vm_val_t)nargs;
}
/* 探测接口(syscall 风格,非必选,逐步扩展)。
* 不假设一定可用:不支持时统一返回 0。
* case 0 -> 是否存在 time:1 = 存在(则 case 1/2 有效),0 = 不存在
* case 1 -> 当前秒(time_t)
* case 2 -> 当前纳秒部分(tv_nsec)
* case 3 -> VM 已执行指令数(参考量;解码/执行恒定时可换算时间)
* case 4 -> 完整纳秒时间戳(单次调用,避免 sec/ns 跨秒竞态;
* 纪元纳秒约 1.8e18 < u64 上限,usize 足够,无需 i128)
* 新增探测点先加 case,再在 SPL 侧逐步验证。 */
static spl_vm_val_t vm_timestamp(spl_vm_t *_vm, int nargs, spl_vm_val_t *args) {
CHECK_NARGS("vm_timestamp", 1);
spl_vm_val_t arg = args[0];
struct timespec ts;
int has_time = (timespec_get(&ts, TIME_UTC) == TIME_UTC);
switch (arg) {
case 0:
return has_time ? 1 : 0;
case 1:
return has_time ? (spl_vm_val_t)ts.tv_sec : 0;
case 2:
return has_time ? (spl_vm_val_t)ts.tv_nsec : 0;
case 3:
if (!_vm)
return 0;
return (spl_vm_val_t)_vm->steps;
case 4:
return has_time ? (spl_vm_val_t)((unsigned long long)ts.tv_sec * 1000000000ull +
(unsigned long long)ts.tv_nsec)
: 0;
default:
fprintf(stderr, "vm_timestamp: invalid arg %zu\n", (size_t)arg);
return 0;
}
}
/* =================================================================
* VM syscalls (for comptime - compile-time code execution)
*
@@ -480,6 +516,8 @@ void spl_syscall_register(spl_prog_t *prog) {
{"vm_memcpy", 0, vm_memcpy},
{"vm_memcmp", 0, vm_memcmp},
{"vm_printf", 0, vm_printf},
{"vm_timestamp", 0, vm_timestamp},
/* VM operations (comptime) */
{"vm_new", 0, vm_new},
{"vm_drop", 0, vm_drop},