aboutsummaryrefslogtreecommitdiff
path: root/executor/executor.h
diff options
context:
space:
mode:
Diffstat (limited to 'executor/executor.h')
-rw-r--r--executor/executor.h37
1 files changed, 19 insertions, 18 deletions
diff --git a/executor/executor.h b/executor/executor.h
index 7f9793e..245e64c 100644
--- a/executor/executor.h
+++ b/executor/executor.h
@@ -4,6 +4,7 @@
#include "../include/std/misc.h"
#include "../include/std/types.h"
#include "../include/std/buffer_view.h"
+#include "../include/bytecode/bytecode.h"
/*doc(Execution backend)
Amalgam supports multiple execution backend and they can be implemented with minimal
@@ -26,29 +27,29 @@ CHECK_RESULT int amal_executor_instructions_start(amal_executor *self, u16 num_f
CHECK_RESULT int amal_executor_instructions_end(amal_executor *self);
CHECK_RESULT int amal_exec_nop(amal_executor *self);
-CHECK_RESULT int amal_exec_setz(amal_executor *self, i8 dst_reg);
-CHECK_RESULT int amal_exec_mov(amal_executor *self, i8 dst_reg, i8 src_reg);
-CHECK_RESULT int amal_exec_movi(amal_executor *self, i8 dst_reg, i64 imm);
-CHECK_RESULT int amal_exec_movd(amal_executor *self, i8 dst_reg, BufferView data);
-CHECK_RESULT int amal_exec_add(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_sub(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_imul(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_mul(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_idiv(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_div(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_push(amal_executor *self, i8 reg);
+CHECK_RESULT int amal_exec_setz(amal_executor *self, AmalReg dst_reg);
+CHECK_RESULT int amal_exec_mov(amal_executor *self, AmalReg dst_reg, AmalReg src_reg);
+CHECK_RESULT int amal_exec_movi(amal_executor *self, AmalReg dst_reg, i64 imm);
+CHECK_RESULT int amal_exec_movd(amal_executor *self, AmalReg dst_reg, BufferView data);
+CHECK_RESULT int amal_exec_add(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_sub(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_imul(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_mul(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_idiv(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_div(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_push(amal_executor *self, AmalReg reg);
CHECK_RESULT int amal_exec_pushi(amal_executor *self, i64 imm);
CHECK_RESULT int amal_exec_pushd(amal_executor *self, BufferView data);
CHECK_RESULT int amal_exec_call_start(amal_executor *self, u8 num_args);
-CHECK_RESULT int amal_exec_call(amal_executor *self, u32 code_offset, i8 dst_reg);
+CHECK_RESULT int amal_exec_call(amal_executor *self, u32 code_offset, AmalReg dst_reg);
void amal_exec_call_overwrite(amal_executor *self, u32 call_code_offset, i32 new_target_rel32);
-/*CHECK_RESULT int amal_exec_callr(i8 dst_reg, BufferView data);*/
-CHECK_RESULT int amal_exec_calle(amal_executor *self, void *func, i8 dst_reg);
-CHECK_RESULT int amal_exec_cmp(amal_executor *self, i8 dst_reg, i8 src_reg1, i8 src_reg2);
-CHECK_RESULT int amal_exec_jz(amal_executor *self, i8 reg, u16 target_label);
+/*CHECK_RESULT int amal_exec_callr(AmalReg dst_reg, BufferView data);*/
+CHECK_RESULT int amal_exec_calle(amal_executor *self, void *func, AmalReg dst_reg);
+CHECK_RESULT int amal_exec_cmp(amal_executor *self, AmalReg dst_reg, AmalReg src_reg1, AmalReg src_reg2);
+CHECK_RESULT int amal_exec_jz(amal_executor *self, AmalReg reg, u16 target_label);
CHECK_RESULT int amal_exec_jmp(amal_executor *self, u16 target_label);
-CHECK_RESULT int amal_exec_ret(amal_executor *self, i8 reg);
-CHECK_RESULT int amal_exec_func_start(amal_executor *self, u16 num_regs);
+CHECK_RESULT int amal_exec_ret(amal_executor *self, AmalReg reg);
+CHECK_RESULT int amal_exec_func_start(amal_executor *self, u8 num_params, u16 num_regs);
CHECK_RESULT int amal_exec_func_end(amal_executor *self);
CHECK_RESULT int amal_exec_label(amal_executor *self);