stage2 提供近乎完整的功能但出现严重性能问题 添加stage0的原生性能记录 stage1添加更多内置函数 nob重构代码使其更加健壮
This commit is contained in:
1 parent
b5a7a811b3
commit
e02b0c633a
35 files changed
+14018
-216
No files matched your search
@@ -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},
|
||||
|
||||
Reference in new issue
Block a user