Ensure stack allocations maintain 16-byte alignment for AVX instructions

This commit is contained in:
Herman S.
2025-09-29 12:56:25 +09:00
parent 1548b4e11c
commit f5afafaec0

View File

@@ -231,7 +231,13 @@ bool X64Emitter::Emit(HIRBuilder* builder, EmitFunctionInfo& func_info) {
locals_page_delta_ = 0;
}
assert_true((stack_size + 8) % 16 == 0);
// Ensure that after we SUB the stack_size, RSP is 16-byte aligned.
// On function entry, RSP is misaligned by 8 (due to CALL pushing return
// address). So we need stack_size to be 8 mod 16, not 0 mod 16.
if ((stack_size % 16) == 0) {
stack_size += 8; // Make it 8 mod 16
}
assert_true((stack_size % 16) == 8); // Should be 8 mod 16 for alignment
func_info.stack_size = stack_size;
stack_size_ = stack_size;