diff --git a/src/base/base_math.c b/src/base/base_math.c index 465d342d..3718c6a9 100644 --- a/src/base/base_math.c +++ b/src/base/base_math.c @@ -591,6 +591,30 @@ u32_from_rgba(Vec4F32 rgba) //////////////////////////////// //~ rjf: List Type Functions +internal void +rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng) +{ + Rng1U64Node *n = push_array(arena, Rng1U64Node, 1); + MemoryCopyStruct(&n->v, &rng); + SLLQueuePush(list->first, list->last, n); + list->count += 1; +} + +internal Rng1U64Array +rng1u64_array_from_list(Arena *arena, Rng1U64List *list) +{ + Rng1U64Array arr = {0}; + arr.count = list->count; + arr.v = push_array_no_zero(arena, Rng1U64, arr.count); + U64 idx = 0; + for(Rng1U64Node *n = list->first; n != 0; n = n->next) + { + arr.v[idx] = n->v; + idx += 1; + } + return arr; +} + internal void rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng) { diff --git a/src/base/base_math.h b/src/base/base_math.h index 645a6d31..dc404fb3 100644 --- a/src/base/base_math.h +++ b/src/base/base_math.h @@ -329,6 +329,28 @@ union Rng2S64 //////////////////////////////// //~ rjf: List Types +typedef struct Rng1U64Node Rng1U64Node; +struct Rng1U64Node +{ + Rng1U64Node *next; + Rng1U64 v; +}; + +typedef struct Rng1U64List Rng1U64List; +struct Rng1U64List +{ + U64 count; + Rng1U64Node *first; + Rng1U64Node *last; +}; + +typedef struct Rng1U64Array Rng1U64Array; +struct Rng1U64Array +{ + Rng1U64 *v; + U64 count; +}; + typedef struct Rng1S64Node Rng1S64Node; struct Rng1S64Node { @@ -643,6 +665,9 @@ internal U32 u32_from_rgba(Vec4F32 rgba); //////////////////////////////// //~ rjf: List Type Functions +internal void rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng); +internal Rng1U64Array rng1u64_array_from_list(Arena *arena, Rng1U64List *list); + internal void rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng); internal Rng1S64Array rng1s64_array_from_list(Arena *arena, Rng1S64List *list); diff --git a/src/linker/base_ext/base_inc.c b/src/linker/base_ext/base_inc.c index 94acc94c..c90891e9 100644 --- a/src/linker/base_ext/base_inc.c +++ b/src/linker/base_ext/base_inc.c @@ -4,7 +4,6 @@ #include "base_core.c" #include "base_strings.c" #include "base_arena.c" -#include "base_math.c" #include "base_arrays.c" #include "base_bit_array.c" #include "base_crc32.c" diff --git a/src/linker/base_ext/base_inc.h b/src/linker/base_ext/base_inc.h index 8d1c09e1..c06090ff 100644 --- a/src/linker/base_ext/base_inc.h +++ b/src/linker/base_ext/base_inc.h @@ -6,7 +6,6 @@ #include "base_core.h" #include "base_strings.h" #include "base_arena.h" -#include "base_math.h" #include "base_arrays.h" #include "base_blake3.h" #include "base_bit_array.h" diff --git a/src/linker/base_ext/base_math.c b/src/linker/base_ext/base_math.c deleted file mode 100644 index e5b78e6c..00000000 --- a/src/linker/base_ext/base_math.c +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2024 Epic Games Tools -// Licensed under the MIT license (https://opensource.org/license/mit/) - -internal void -rng_1u64_list_push_node(Rng1U64List *list, Rng1U64Node *node) -{ - SLLQueuePush(list->first, list->last, node); - ++list->count; -} - -internal Rng1U64Node * -rng_1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 range) -{ - Rng1U64Node *node = push_array(arena, Rng1U64Node, 1); - node->v = range; - rng_1u64_list_push_node(list, node); - return node; -} - diff --git a/src/linker/base_ext/base_math.h b/src/linker/base_ext/base_math.h deleted file mode 100644 index a6efcffc..00000000 --- a/src/linker/base_ext/base_math.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2024 Epic Games Tools -// Licensed under the MIT license (https://opensource.org/license/mit/) - -#pragma once - -typedef struct Rng1U64Node -{ - struct Rng1U64Node *next; - Rng1U64 v; -} Rng1U64Node; - -typedef struct Rng1U64List -{ - U64 count; - Rng1U64Node *first; - Rng1U64Node *last; -} Rng1U64List; - -//////////////////////////////// - -internal void rng_1u64_list_push_node(Rng1U64List *list, Rng1U64Node *node); -internal Rng1U64Node * rng_1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 range); - diff --git a/src/linker/codeview_ext/codeview.c b/src/linker/codeview_ext/codeview.c index 96f4d015..e1f1f90a 100644 --- a/src/linker/codeview_ext/codeview.c +++ b/src/linker/codeview_ext/codeview.c @@ -2127,7 +2127,7 @@ cv_c13_parse_inline_binary_annots(Arena *arena, code_ranges.last->v.max = parent_voff + code_offset_hi; } else { // append range - rng_1u64_list_push(arena, &code_ranges, rng_1u64(parent_voff + code_offset_lo, parent_voff + code_offset_hi)); + rng1u64_list_push(arena, &code_ranges, rng_1u64(parent_voff + code_offset_lo, parent_voff + code_offset_hi)); // update last code range in file if (file_last) { @@ -2226,13 +2226,13 @@ cv_make_defined_range_list_from_gaps(Arena *arena, Rng1U64 defrange, CV_LvarAddr if (gap_count == 0) { // no gaps, push whole range - rng_1u64_list_push(arena, &result, defrange); + rng1u64_list_push(arena, &result, defrange); } else { U64 cursor = defrange.min; for (U64 gap_idx = 0; gap_idx < gap_count; ++gap_idx) { // make range Rng1U64 range = rng_1u64(cursor, cursor + gaps[gap_idx].off); - rng_1u64_list_push(arena, &result, range); + rng1u64_list_push(arena, &result, range); // advance cursor = defrange.min + gaps[gap_idx].off + gaps[gap_idx].len; @@ -2245,7 +2245,7 @@ cv_make_defined_range_list_from_gaps(Arena *arena, Rng1U64 defrange, CV_LvarAddr U64 last_range_byte_size = dim_1u64(defrange) - (last_gap.off + last_gap.len); if (last_range_byte_size) { Rng1U64 last_range = rng_1u64(defrange.min + last_gap.off + last_gap.len, defrange.max); - rng_1u64_list_push(arena, &result, last_range); + rng1u64_list_push(arena, &result, last_range); } } } diff --git a/src/linker/lnk_debug_info.c b/src/linker/lnk_debug_info.c index 97f8d4a9..262d130e 100644 --- a/src/linker/lnk_debug_info.c +++ b/src/linker/lnk_debug_info.c @@ -4704,7 +4704,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task) scope->container_proc = scope_stack->proc; scope->parent = scope_stack->scope; SLLQueuePush_N(scope_stack->scope->first_child, scope_stack->scope->last_child, scope, next_sibling); - rng_1u64_list_push(arena, &scope->ranges, virt_range); + rng1u64_list_push(arena, &scope->ranges, virt_range); #if 0 if (scope->parent) { @@ -4753,7 +4753,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task) } Rng1U64List ranges = {0}; - rng_1u64_list_push(arena, &ranges, rng_1u64(data_voff, data_voff + data_size)); + rng1u64_list_push(arena, &ranges, rng_1u64(data_voff, data_voff + data_size)); RDIB_Location location = rdib_make_location_addr_byte_stream(ranges, bytecode); rdib_location_list_push(arena, &locations, location); @@ -4787,7 +4787,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task) rdib_bytecode_push_op(arena, &bytecode, RDI_EvalOp_TLSOff, thread32->tls_off); Rng1U64List ranges = {0}; - rng_1u64_list_push(arena, &ranges, rng_1u64(0, max_U64)); + rng1u64_list_push(arena, &ranges, rng_1u64(0, max_U64)); RDIB_Location location = rdib_make_location_addr_byte_stream(ranges, bytecode); rdib_location_list_push(arena, &locations, location); @@ -4868,7 +4868,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task) if (scope_stack->scope != 0) { SLLQueuePush_N(scope_stack->scope->first_child, scope_stack->scope->last_child, root_scope, next_sibling); } - rng_1u64_list_push(arena, &root_scope->ranges, virt_range); + rng1u64_list_push(arena, &root_scope->ranges, virt_range); // fill out procedure proc->link_flags = symbol.kind == CV_SymKind_GPROC32 ? RDI_LinkFlag_External : 0; @@ -4951,7 +4951,7 @@ THREAD_POOL_TASK_FUNC(lnk_convert_symbols_to_rdi_task) if (scope_stack->scope != 0) { SLLQueuePush_N(scope_stack->scope->first_child, scope_stack->scope->last_child, root_scope, next_sibling); } - rng_1u64_list_push(arena, &root_scope->ranges, virt_range); + rng1u64_list_push(arena, &root_scope->ranges, virt_range); // fill out procedure thunk->name = name; diff --git a/src/linker/rdi/rdi_builder.c b/src/linker/rdi/rdi_builder.c index 3502c4af..6d7145f1 100644 --- a/src/linker/rdi/rdi_builder.c +++ b/src/linker/rdi/rdi_builder.c @@ -4985,11 +4985,11 @@ rdib_init_input(Arena *arena) null_unit->line_table = null_line_table; // Scope - rng_1u64_list_push(arena, &null_scope->ranges, rng_1u64(0,max_U32)); + rng1u64_list_push(arena, &null_scope->ranges, rng_1u64(0,max_U32)); // Location RDIB_Location null_loc = {0}; - rng_1u64_list_push(arena, &null_loc.ranges, rng_1u64(0,0)); + rng1u64_list_push(arena, &null_loc.ranges, rng_1u64(0,0)); RDIB_LocationList null_loc_list = {0}; rdib_location_list_push(arena, &null_loc_list, null_loc);