mirror of
https://github.com/pound-emu/ballistic.git
synced 2026-06-17 04:16:48 -07:00
x86/compiler1: organize macro opcodes
Signed-off-by: Ronald Caesar <github43132@proton.me>
This commit is contained in:
@@ -84,13 +84,13 @@ extern "C"
|
||||
BAL_X86_MACRO_JCC_RELATIVE,
|
||||
BAL_X86_MACRO_JMP_REGISTER,
|
||||
BAL_X86_MACRO_JMP_RELATIVE,
|
||||
BAL_X86_MACRO_OR_REGISTER_IMMEDIATE,
|
||||
BAL_X86_MACRO_LOAD,
|
||||
BAL_X86_MACRO_MOV_REGISTER_IMMEDIATE,
|
||||
BAL_X86_MACRO_MOV_REGISTER_REGISTER,
|
||||
BAL_X86_MACRO_LOAD,
|
||||
BAL_X86_MACRO_STORE,
|
||||
BAL_X86_MACRO_OR_REGISTER_IMMEDIATE,
|
||||
BAL_X86_MACRO_RET,
|
||||
BAL_X86_MACRO_SETCC,
|
||||
BAL_X86_MACRO_STORE,
|
||||
} bal_x86_macro_opcode_t;
|
||||
|
||||
/// Represents a single un-lowered x86 instruction inside the sliding window.
|
||||
|
||||
@@ -194,6 +194,11 @@ flush_single_macro(bal_x86_assembler_t *BAL_RESTRICT assembler,
|
||||
bal_x86_emit_add_mem64_rbp_offset_imm(
|
||||
assembler, offsetof(bal_cpu_t, instruction_count), (int32_t)immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_AND_REGISTER_IMMEDIATE:
|
||||
bal_x86_emit_mov_r64_imm64(
|
||||
assembler, ASSEMBLER_TEMPORARY_REGISTER, immediate_or_offset);
|
||||
bal_x86_emit_and_r64_r64(assembler, destination, ASSEMBLER_TEMPORARY_REGISTER);
|
||||
break;
|
||||
case BAL_X86_MACRO_JCC_RELATIVE:
|
||||
bal_x86_emit_jcc_rel32(assembler, macro->condition, (int32_t)immediate_or_offset);
|
||||
case BAL_X86_MACRO_JMP_REGISTER:
|
||||
@@ -203,31 +208,26 @@ flush_single_macro(bal_x86_assembler_t *BAL_RESTRICT assembler,
|
||||
// WARNING: Relative jump offsets fit within a 32-bit signed integer.
|
||||
bal_x86_emit_jmp_rel32(assembler, (int32_t)immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_MOV_REGISTER_IMMEDIATE:
|
||||
bal_x86_emit_mov_r64_imm64(assembler, destination, immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_LOAD:
|
||||
// WARNING: The displacement offset refers to the structural members within bal_cpu_t.
|
||||
// This struct is statically bounded to 264 bytes, which fits inside a signed 32-bit
|
||||
// integer.
|
||||
bal_x86_emit_load_r64_rbp_offset(assembler, destination, (int32_t)immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_STORE:
|
||||
// WARNING: The displacement offset refers to the structural members within bal_cpu_t.
|
||||
// This struct is statically bounded to 264 bytes, which fits inside a signed 32-bit
|
||||
// integer.
|
||||
bal_x86_emit_store_r64_rbp_offset(assembler, source, (int32_t)immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_AND_REGISTER_IMMEDIATE:
|
||||
bal_x86_emit_mov_r64_imm64(
|
||||
assembler, ASSEMBLER_TEMPORARY_REGISTER, immediate_or_offset);
|
||||
bal_x86_emit_and_r64_r64(assembler, destination, ASSEMBLER_TEMPORARY_REGISTER);
|
||||
case BAL_X86_MACRO_MOV_REGISTER_IMMEDIATE:
|
||||
bal_x86_emit_mov_r64_imm64(assembler, destination, immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_OR_REGISTER_IMMEDIATE:
|
||||
bal_x86_emit_mov_r64_imm64(
|
||||
assembler, ASSEMBLER_TEMPORARY_REGISTER, immediate_or_offset);
|
||||
bal_x86_emit_or_r64_r64(assembler, destination, ASSEMBLER_TEMPORARY_REGISTER);
|
||||
break;
|
||||
case BAL_X86_MACRO_STORE:
|
||||
// WARNING: The displacement offset refers to the structural members within bal_cpu_t.
|
||||
// This struct is statically bounded to 264 bytes, which fits inside a signed 32-bit
|
||||
// integer.
|
||||
bal_x86_emit_store_r64_rbp_offset(assembler, source, (int32_t)immediate_or_offset);
|
||||
break;
|
||||
case BAL_X86_MACRO_SETCC:
|
||||
bal_x86_emit_setcc_mem8_rbp_offset(
|
||||
assembler, macro->condition, (int32_t)immediate_or_offset);
|
||||
|
||||
Reference in New Issue
Block a user