aboutsummaryrefslogtreecommitdiff
path: root/executor/x86_64/asm.h
diff options
context:
space:
mode:
Diffstat (limited to 'executor/x86_64/asm.h')
-rw-r--r--executor/x86_64/asm.h131
1 files changed, 66 insertions, 65 deletions
diff --git a/executor/x86_64/asm.h b/executor/x86_64/asm.h
index ac519e9..a3f1b5a 100644
--- a/executor/x86_64/asm.h
+++ b/executor/x86_64/asm.h
@@ -50,8 +50,9 @@ void asm_deinit(Asm *self);
usize asm_get_size(Asm *self);
CHECK_RESULT int asm_execute(Asm *self, u32 offset);
+CHECK_RESULT int asm_ensure_capacity(Asm *self, usize size);
-CHECK_RESULT int asm_nop(Asm *self);
+void asm_nop(Asm *self);
@@ -61,48 +62,48 @@ CHECK_RESULT int asm_nop(Asm *self);
-CHECK_RESULT int asm_mov_mi(Asm *self, AsmPtr *dst, i32 immediate);
-CHECK_RESULT int asm_mov_mr(Asm *self, AsmPtr *dst, Reg64 src);
-CHECK_RESULT int asm_mov_rm(Asm *self, Reg64 dst, AsmPtr *src);
-CHECK_RESULT int asm_mov_ri(Asm *self, Reg64 dst, i64 immediate);
-CHECK_RESULT int asm_mov_rr(Asm *self, Reg64 dst, Reg64 src);
+void asm_mov_mi(Asm *self, AsmPtr *dst, i32 immediate);
+void asm_mov_mr(Asm *self, AsmPtr *dst, Reg64 src);
+void asm_mov_rm(Asm *self, Reg64 dst, AsmPtr *src);
+void asm_mov_ri(Asm *self, Reg64 dst, i64 immediate);
+void asm_mov_rr(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_add_rr(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_sub_rr(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_imul_rr(Asm *self, Reg64 dst, Reg64 src);
+void asm_add_rr(Asm *self, Reg64 dst, Reg64 src);
+void asm_sub_rr(Asm *self, Reg64 dst, Reg64 src);
+void asm_imul_rr(Asm *self, Reg64 dst, Reg64 src);
/* Sign extend RAX into RDX, this is needed for some operations, such as idiv */
-CHECK_RESULT int asm_cqo(Asm *self);
+void asm_cqo(Asm *self);
/*
Divide RDX:RAX by @src. Store the quotient in RAX and the remainder in RDX.
@asm_cqo should be called before this, since RAX needs to be sign extended into RDX
*/
-CHECK_RESULT int asm_idiv_rr(Asm *self, Reg64 src);
+void asm_idiv_rr(Asm *self, Reg64 src);
-CHECK_RESULT int asm_pushr(Asm *self, Reg64 reg);
-CHECK_RESULT int asm_popr(Asm *self, Reg64 reg);
-CHECK_RESULT int asm_callr(Asm *self, Reg64 reg);
+void asm_pushr(Asm *self, Reg64 reg);
+void asm_popr(Asm *self, Reg64 reg);
+void asm_callr(Asm *self, Reg64 reg);
/*
In x86 assembly, the @relative position starts from the next instruction.
This offset shouldn't be calculated by the caller and is instead managed
by this asm library itself.
*/
-CHECK_RESULT int asm_call_rel32(Asm *self, i32 relative);
+void asm_call_rel32(Asm *self, i32 relative);
void asm_override_call_rel32(Asm *self, u32 asm_index, i32 new_relative);
-CHECK_RESULT int asm_cmp_rm(Asm *self, Reg64 reg1, AsmPtr *reg2);
+void asm_cmp_rm(Asm *self, Reg64 reg1, AsmPtr *reg2);
/*
Sets the 8 bit memory operand to 1 if the last cmp was equals, otherwise set it to 0.
Note: this instruction doesn't work with AH (RSP), CH (RBP), DH (RSI) and BH (RDI).
TODO: When ST, MM AND XMM registers are implemented, also check for them as they are also invalid
*/
-CHECK_RESULT int asm_sete_m(Asm *self, AsmPtr *dst);
-CHECK_RESULT int asm_sete_r(Asm *self, Reg64 dst);
+void asm_sete_m(Asm *self, AsmPtr *dst);
+void asm_sete_r(Asm *self, Reg64 dst);
/*
In x86 assembly, the @relative position starts from the next instruction.
This offset shouldn't be calculated by the caller and is instead managed
by this asm library itself.
*/
-CHECK_RESULT int asm_jz(Asm *self, i32 relative);
+void asm_jz(Asm *self, i32 relative);
/* Override conditional jump target */
void asm_override_jcc_rel32(Asm *self, u32 asm_index, i32 new_relative);
/*
@@ -110,7 +111,7 @@ void asm_override_jcc_rel32(Asm *self, u32 asm_index, i32 new_relative);
This offset shouldn't be calculated by the caller and is instead managed
by this asm library itself.
*/
-CHECK_RESULT int asm_jmp(Asm *self, i32 relative);
+void asm_jmp(Asm *self, i32 relative);
void asm_override_jmp_rel32(Asm *self, u32 asm_index, i32 new_relative);
@@ -124,52 +125,52 @@ void asm_override_jmp_rel32(Asm *self, u32 asm_index, i32 new_relative);
-CHECK_RESULT int asm_mov_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_add_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_sub_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_and_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_or_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_xor_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_cmp_rm32(Asm *self, Reg32 dst, Reg32 src);
-CHECK_RESULT int asm_add_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_or_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_adc_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_sbb_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_and_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_sub_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_xor_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_cmp_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
-CHECK_RESULT int asm_rol_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_ror_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_rcl_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_rcr_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_shl_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_shr_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_sar_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_mov_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_add_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_sub_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_and_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_or_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_xor_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_cmp_rm32(Asm *self, Reg32 dst, Reg32 src);
+void asm_add_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_or_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_adc_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_sbb_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_and_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_sub_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_xor_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_cmp_rm32_imm(Asm *self, Reg32 reg, i32 immediate);
+void asm_rol_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_ror_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_rcl_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_rcr_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_shl_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_shr_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
+void asm_sar_rm32_imm(Asm *self, Reg32 reg, i8 immediate);
-CHECK_RESULT int asm_mov_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_add_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_sub_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_and_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_or_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_xor_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_cmp_rm64(Asm *self, Reg64 dst, Reg64 src);
-CHECK_RESULT int asm_add_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_or_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_adc_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_sbb_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_and_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_sub_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_xor_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_cmp_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
-CHECK_RESULT int asm_rol_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_ror_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_rcl_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_rcr_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_shl_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_shr_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_sar_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_mov_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_add_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_sub_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_and_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_or_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_xor_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_cmp_rm64(Asm *self, Reg64 dst, Reg64 src);
+void asm_add_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_or_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_adc_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_sbb_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_and_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_sub_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_xor_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_cmp_rm64_imm(Asm *self, Reg64 reg, i32 immediate);
+void asm_rol_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_ror_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_rcl_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_rcr_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_shl_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_shr_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
+void asm_sar_rm64_imm(Asm *self, Reg64 reg, i8 immediate);
-CHECK_RESULT int asm_ret(Asm *self, u16 bytes);
+void asm_ret(Asm *self, u16 bytes);
#endif