pass over the aligner

This commit is contained in:
Nikita Smith
2026-02-15 23:17:59 -08:00
parent 76213ec5cd
commit 4e4a806b33
2 changed files with 13 additions and 24 deletions
+12 -19
View File
@@ -1078,26 +1078,19 @@ str8_list_concat_in_place(String8List *list, String8List *to_push)
}
internal String8Node*
str8_list_push_aligner(Arena *arena, String8List *list, U64 min, U64 align){
String8Node *node = push_array_no_zero(arena, String8Node, 1);
U64 new_size = list->total_size + min;
U64 increase_size = 0;
if (align > 1){
// NOTE(allen): assert is power of 2
Assert(((align - 1) & align) == 0);
U64 mask = align - 1;
new_size += mask;
new_size &= (~mask);
increase_size = new_size - list->total_size;
str8_list_push_aligner(Arena *arena, String8List *list, U64 min, U64 align)
{
read_only local_persist U8 zeroes[64] = {0};
Assert(IsPow2OrZero(align));
U64 pad = Max(min, AlignPadPow2(list->total_size, align));
if(pad < sizeof(zeroes))
{
return str8_list_push(arena, list, str8(zeroes, pad));
}
else
{
return str8_list_push(arena, list, str8(push_array(arena, U8, pad), pad));
}
local_persist const U8 zeroes_buffer[64] = {0};
Assert(increase_size <= ArrayCount(zeroes_buffer));
SLLQueuePush(list->first, list->last, node);
list->node_count += 1;
list->total_size = new_size;
node->string.str = (U8*)zeroes_buffer;
node->string.size = increase_size;
return(node);
}
internal String8Node*
+1 -5
View File
@@ -4118,11 +4118,7 @@ lnk_build_win32_header(Arena *arena, LNK_SymbolTable *symtab, LNK_Config *config
}
// align image headers
{
U64 image_headers_align_size = AlignPadPow2(result.total_size, config->file_align);
U8 *image_headers_align = push_array(arena, U8, image_headers_align_size);
str8_list_push(arena, &result, str8(image_headers_align, image_headers_align_size));
}
str8_list_push_aligner(arena, &result, 0, config->file_align);
//
// entry point