From 44dc0ec6021beebdc7ffe9b73eb0b95fce78d455 Mon Sep 17 00:00:00 2001 From: Ronald Caesar Date: Sat, 6 Jun 2026 02:11:38 -0400 Subject: [PATCH] x86/compiler1: organize macro opcodes Signed-off-by: Ronald Caesar --- include/backend/x86/bal_x86_sliding_window.h | 6 ++--- src/backend/x86/bal_x86_sliding_window.c | 26 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/backend/x86/bal_x86_sliding_window.h b/include/backend/x86/bal_x86_sliding_window.h index 48c9590d..ad166183 100644 --- a/include/backend/x86/bal_x86_sliding_window.h +++ b/include/backend/x86/bal_x86_sliding_window.h @@ -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. diff --git a/src/backend/x86/bal_x86_sliding_window.c b/src/backend/x86/bal_x86_sliding_window.c index 1ed4e755..66d1a456 100644 --- a/src/backend/x86/bal_x86_sliding_window.c +++ b/src/backend/x86/bal_x86_sliding_window.c @@ -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);