aboutsummaryrefslogtreecommitdiff
path: root/src/fvm.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-03-25 12:05:20 +0800
committerMistivia <i@mistivia.com>2025-03-25 12:05:20 +0800
commitdc87ff4b0c9f311be7fad652594e3766a4ddb0c6 (patch)
tree8e7d1c9045b8abec12b4682a2bb4d8a5b217139e /src/fvm.c
parent4188f791787be19f32226b8ac0f213f61cdd4666 (diff)
refactor name
Diffstat (limited to 'src/fvm.c')
-rw-r--r--src/fvm.c62
1 files changed, 31 insertions, 31 deletions
diff --git a/src/fvm.c b/src/fvm.c
index 1384e92..ede4005 100644
--- a/src/fvm.c
+++ b/src/fvm.c
@@ -7,77 +7,77 @@
int fvm_init(struct fvm *vm, void *code, int64_t stack_size) {
void *stack_vm = malloc(stack_size);
- vm->sp = (fvm_word_t)(stack_vm + stack_size);
+ vm->sp = (int64_t)(stack_vm + stack_size);
vm->bp = vm->sp;
- vm->pc = (fvm_word_t)code;
+ vm->pc = (int64_t)code;
vm->rv = 0;
return 1;
}
-void fvm_push(struct fvm *vm, fvm_word_t val) {
- vm->sp -= sizeof(fvm_word_t);
+void fvm_push(struct fvm *vm, int64_t val) {
+ vm->sp -= sizeof(int64_t);
fvm_store(vm, vm->sp, val);
}
int64_t fvm_pop(struct fvm *vm) {
int64_t r = fvm_load(vm, vm->sp);
- vm->sp += sizeof(fvm_word_t);
+ vm->sp += sizeof(int64_t);
return r;
}
-void fvm_pushf(struct fvm *vm, fvm_float_t val) {
- assert(sizeof(fvm_word_t) >= sizeof(fvm_float_t));
- vm->sp -= sizeof(fvm_word_t);
+void fvm_pushf(struct fvm *vm, double val) {
+ assert(sizeof(int64_t) >= sizeof(double));
+ vm->sp -= sizeof(int64_t);
fvm_storef(vm, vm->sp, val);
}
-fvm_float_t fvm_popf(struct fvm *vm) {
- assert(sizeof(fvm_word_t) >= sizeof(fvm_float_t));
- fvm_float_t r = fvm_loadf(vm, vm->sp);
- vm->sp += sizeof(fvm_word_t);
+double fvm_popf(struct fvm *vm) {
+ assert(sizeof(int64_t) >= sizeof(double));
+ double r = fvm_loadf(vm, vm->sp);
+ vm->sp += sizeof(int64_t);
return r;
}
-fvm_float_t fvm_loadf(struct fvm *vm, fvm_word_t addr) {
- return *(fvm_float_t*)addr;
+double fvm_loadf(struct fvm *vm, int64_t addr) {
+ return *(double*)addr;
}
-void fvm_storef(struct fvm *vm, fvm_word_t addr, fvm_float_t val) {
- *(fvm_float_t*)addr = val;
+void fvm_storef(struct fvm *vm, int64_t addr, double val) {
+ *(double*)addr = val;
}
-fvm_word_t fvm_load(struct fvm *vm, fvm_word_t addr) {
- return *(fvm_word_t*)addr;
+int64_t fvm_load(struct fvm *vm, int64_t addr) {
+ return *(int64_t*)addr;
}
-void fvm_store(struct fvm *vm, fvm_word_t addr, int64_t value) {
- *(fvm_word_t*)addr = value;
+void fvm_store(struct fvm *vm, int64_t addr, int64_t value) {
+ *(int64_t*)addr = value;
}
-int32_t fvm_load32(struct fvm *vm, fvm_word_t addr) {
+int32_t fvm_load32(struct fvm *vm, int64_t addr) {
return *(int32_t*)addr;
}
-void fvm_store32(struct fvm *vm, fvm_word_t addr, int32_t value) {
+void fvm_store32(struct fvm *vm, int64_t addr, int32_t value) {
*(int32_t*)addr = value;
}
-int16_t fvm_load16(struct fvm *vm, fvm_word_t addr) {
+int16_t fvm_load16(struct fvm *vm, int64_t addr) {
return *(int16_t*)addr;
}
-void fvm_store16(struct fvm *vm, fvm_word_t addr, int16_t value) {
+void fvm_store16(struct fvm *vm, int64_t addr, int16_t value) {
*(int16_t*)addr = value;
}
-int8_t fvm_load8(struct fvm *vm, fvm_word_t addr) {
+int8_t fvm_load8(struct fvm *vm, int64_t addr) {
return *(int8_t*)addr;
}
-void fvm_store8(struct fvm *vm, fvm_word_t addr, int8_t value) {
+void fvm_store8(struct fvm *vm, int64_t addr, int8_t value) {
*(int8_t*)addr = value;
}
int64_t fvm_execute(struct fvm *vm) {
- fvm_word_t a, b, c;
- fvm_float_t x, y, z;
+ int64_t a, b, c;
+ double x, y, z;
while (1) {
enum fvm_op op = (enum fvm_op)(uint8_t)fvm_load8(vm, vm->pc);
switch (op) {
@@ -113,7 +113,7 @@ int64_t fvm_execute(struct fvm *vm) {
break;
case FVM_OP_IMM:
fvm_push(vm, fvm_load(vm, vm->pc + 1));
- vm->pc += sizeof(fvm_word_t) + 1;
+ vm->pc += sizeof(int64_t) + 1;
break;
case FVM_OP_LD:
fvm_push(vm, fvm_load(vm, fvm_pop(vm)));
@@ -416,12 +416,12 @@ int64_t fvm_execute(struct fvm *vm) {
break;
case FVM_OP_FTI:
x = fvm_popf(vm);
- fvm_push(vm, (fvm_word_t)x);
+ fvm_push(vm, (int64_t)x);
vm->pc++;
break;
case FVM_OP_ITF:
a = fvm_pop(vm);
- fvm_pushf(vm, (fvm_float_t)x);
+ fvm_pushf(vm, (double)x);
vm->pc++;
break;
case FVM_OP_EXIT: