moved unsigned range list to base math

This commit is contained in:
Nikita Smith
2024-12-06 11:38:38 -08:00
parent d73e53a5b5
commit 29de0c5a9e
9 changed files with 60 additions and 55 deletions
+24
View File
@@ -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)
{
+25
View File
@@ -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);
-1
View File
@@ -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"
-1
View File
@@ -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"
-19
View File
@@ -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;
}
-23
View File
@@ -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);
+4 -4
View File
@@ -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);
}
}
}
+5 -5
View File
@@ -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;
+2 -2
View File
@@ -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);