diff --git a/src/artifact_cache/artifact_cache.c b/src/artifact_cache/artifact_cache.c index 100fc81c..62443ede 100644 --- a/src/artifact_cache/artifact_cache.c +++ b/src/artifact_cache/artifact_cache.c @@ -20,7 +20,7 @@ ac_init(void) //////////////////////////////// //~ rjf: Cache Lookups -internal void * +internal AC_Artifact ac_artifact_from_key(Access *access, String8 key, U64 gen, AC_CreateFunctionType *create, AC_DestroyFunctionType *destroy, U64 slots_count) { //- rjf: create function -> cache @@ -60,7 +60,7 @@ ac_artifact_from_key(Access *access, String8 key, U64 gen, AC_CreateFunctionType } //- rjf: cache * key -> artifact - void *artifact = 0; + AC_Artifact artifact = {0}; { U64 hash = u64_hash_from_str8(key); U64 slot_idx = hash%cache->slots_count; @@ -222,7 +222,7 @@ ac_async_tick(void) // rjf: compute val B32 retry = 0; - void *val = reqs[idx].create(reqs[idx].key, &retry); + AC_Artifact val = reqs[idx].create(reqs[idx].key, &retry); // rjf: retry? -> resubmit request if(retry && lane_idx() == 0) diff --git a/src/artifact_cache/artifact_cache.h b/src/artifact_cache/artifact_cache.h index 69035cde..a52ef971 100644 --- a/src/artifact_cache/artifact_cache.h +++ b/src/artifact_cache/artifact_cache.h @@ -4,11 +4,20 @@ #ifndef ARTIFACT_CACHE_H #define ARTIFACT_CACHE_H +//////////////////////////////// +//~ rjf: Artifact Handle Type + +typedef struct AC_Artifact AC_Artifact; +struct AC_Artifact +{ + U64 u64[4]; +}; + //////////////////////////////// //~ rjf: Artifact Computation Function Types -typedef void *AC_CreateFunctionType(String8 key, B32 *retry_out); -typedef void AC_DestroyFunctionType(void *artifact); +typedef AC_Artifact AC_CreateFunctionType(String8 key, B32 *retry_out); +typedef void AC_DestroyFunctionType(AC_Artifact artifact); //////////////////////////////// //~ rjf: Cache Types @@ -37,7 +46,7 @@ struct AC_Node // rjf: key/gen/value String8 key; U64 gen; - void *val; + AC_Artifact val; // rjf: metadata AccessPt access_pt; @@ -96,7 +105,7 @@ internal void ac_init(void); //////////////////////////////// //~ rjf: Cache Lookups -internal void *ac_artifact_from_key(Access *access, String8 key, U64 gen, AC_CreateFunctionType *create, AC_DestroyFunctionType *destroy, U64 slots_count); +internal AC_Artifact ac_artifact_from_key(Access *access, String8 key, U64 gen, AC_CreateFunctionType *create, AC_DestroyFunctionType *destroy, U64 slots_count); //////////////////////////////// //~ rjf: Asynchronous Tick diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index b7ddb26b..d77f8f91 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -7460,6 +7460,21 @@ ASYNC_WORK_DEF(ctrl_call_stack_tree_build_work) return 0; } +//////////////////////////////// +//~ rjf: Process Memory Artifact Cache Hooks / Lookups + +internal void * +ctrl_memory_artifact_create(String8 key, B32 *retry_out) +{ + +} + +internal void +ctrl_memory_artifact_destroy(void *ptr) +{ + +} + //////////////////////////////// //~ rjf: Asynchronous Tick @@ -7467,7 +7482,7 @@ internal void ctrl_async_tick(void) { Temp scratch = scratch_begin(0, 0); - +#if 0 //- rjf: get all memory requests U64 mem_reqs_count = 0; CTRL_MemRequest *mem_reqs = 0; @@ -7642,6 +7657,6 @@ ctrl_async_tick(void) } } } - +#endif scratch_end(scratch); } diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 036a7288..1add5ec4 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -1250,6 +1250,12 @@ ASYNC_WORK_DEF(ctrl_call_stack_build_work); ASYNC_WORK_DEF(ctrl_call_stack_tree_build_work); +//////////////////////////////// +//~ rjf: Process Memory Artifact Cache Hooks / Lookups + +internal void *ctrl_memory_artifact_create(String8 key, B32 *retry_out); +internal void ctrl_memory_artifact_destroy(void *ptr); + //////////////////////////////// //~ rjf: Asynchronous Tick diff --git a/src/disasm/disasm.c b/src/disasm/disasm.c index fbaff78b..11b461c1 100644 --- a/src/disasm/disasm.c +++ b/src/disasm/disasm.c @@ -264,10 +264,10 @@ struct DASM_Artifact DASM_Info info; }; -internal void * +internal AC_Artifact dasm_artifact_create(String8 key, B32 *retry_out) { - void *result = 0; + DASM_Artifact *artifact = 0; if(lane_idx() == 0) { Temp scratch = scratch_begin(0, 0); @@ -473,27 +473,28 @@ dasm_artifact_create(String8 key, B32 *retry_out) //- rjf: fill result if(info_arena != 0) { - DASM_Artifact *artifact = push_array(info_arena, DASM_Artifact, 1); + artifact = push_array(info_arena, DASM_Artifact, 1); artifact->arena = info_arena; artifact->info = info; - result = artifact; } di_scope_close(di_scope); access_close(access); scratch_end(scratch); } - lane_sync_u64(&result, 0); + lane_sync_u64(&artifact, 0); + AC_Artifact result = {0}; + result.u64[0] = (U64)artifact; return result; } internal void -dasm_artifact_destroy(void *ptr) +dasm_artifact_destroy(AC_Artifact artifact) { - if(ptr == 0) { return; } - DASM_Artifact *artifact = (DASM_Artifact *)ptr; - c_close_key(artifact->info.text_key); - arena_release(artifact->arena); + DASM_Artifact *dasm_artifact = (DASM_Artifact *)artifact.u64[0]; + if(dasm_artifact == 0) { return; } + c_close_key(dasm_artifact->info.text_key); + arena_release(dasm_artifact->arena); } internal DASM_Info @@ -511,10 +512,11 @@ dasm_info_from_hash_params(Access *access, U128 hash, DASM_Params *params) String8 key = str8_list_join(scratch.arena, &key_parts, 0); // rjf: get info - DASM_Artifact *artifact = ac_artifact_from_key(access, key, fs_change_gen(), dasm_artifact_create, dasm_artifact_destroy, 1024); - if(artifact) + AC_Artifact artifact = ac_artifact_from_key(access, key, fs_change_gen(), dasm_artifact_create, dasm_artifact_destroy, 1024); + DASM_Artifact *dasm_artifact = (DASM_Artifact *)artifact.u64[0]; + if(dasm_artifact) { - info = artifact->info; + info = dasm_artifact->info; } scratch_end(scratch); diff --git a/src/disasm/disasm.h b/src/disasm/disasm.h index b1acf658..cd346fd7 100644 --- a/src/disasm/disasm.h +++ b/src/disasm/disasm.h @@ -197,8 +197,8 @@ internal U64 dasm_line_array_code_off_from_idx(DASM_LineArray *array, U64 idx); //////////////////////////////// //~ rjf: Artifact Cache Hooks / Lookups -internal void *dasm_artifact_create(String8 key, B32 *retry_out); -internal void dasm_artifact_destroy(void *ptr); +internal AC_Artifact dasm_artifact_create(String8 key, B32 *retry_out); +internal void dasm_artifact_destroy(AC_Artifact artifact); internal DASM_Info dasm_info_from_hash_params(Access *access, U128 hash, DASM_Params *params); internal DASM_Info dasm_info_from_key_params(Access *access, C_Key key, DASM_Params *params, U128 *hash_out); diff --git a/src/text/text.c b/src/text/text.c index 015f54fb..e5b1a305 100644 --- a/src/text/text.c +++ b/src/text/text.c @@ -1968,7 +1968,7 @@ struct TXT_ArtifactCreateShared TXT_Artifact *artifact; }; -internal void * +internal AC_Artifact txt_artifact_create(String8 key, B32 *retry_out) { ProfBeginFunction(); @@ -2232,15 +2232,17 @@ txt_artifact_create(String8 key, B32 *retry_out) access_close(access); scratch_end(scratch); ProfEnd(); - return shared->artifact; + AC_Artifact result = {0}; + result.u64[0] = (U64)shared->artifact; + return result; } internal void -txt_artifact_destroy(void *ptr) +txt_artifact_destroy(AC_Artifact artifact) { - if(ptr == 0) { return; } - TXT_Artifact *artifact = (TXT_Artifact *)ptr; - arena_release(artifact->arena); + TXT_Artifact *txt_artifact = (TXT_Artifact *)artifact.u64[0]; + if(txt_artifact == 0) { return; } + arena_release(txt_artifact->arena); } internal TXT_TextInfo @@ -2252,11 +2254,12 @@ txt_text_info_from_hash_lang(Access *access, U128 hash, TXT_LangKind lang) TXT_LangKind lang; } key = {hash, lang}; String8 key_string = str8_struct(&key); - TXT_Artifact *artifact = ac_artifact_from_key(access, key_string, 0, txt_artifact_create, txt_artifact_destroy, 1024); + AC_Artifact artifact = ac_artifact_from_key(access, key_string, 0, txt_artifact_create, txt_artifact_destroy, 1024); + TXT_Artifact *txt_artifact = (TXT_Artifact *)artifact.u64[0]; TXT_TextInfo info = {0}; - if(artifact != 0) + if(txt_artifact != 0) { - info = artifact->info; + info = txt_artifact->info; } return info; } diff --git a/src/text/text.h b/src/text/text.h index bc41db58..45f9a2f3 100644 --- a/src/text/text.h +++ b/src/text/text.h @@ -203,8 +203,8 @@ internal TXT_ScopeNode *txt_scope_node_from_info_pt(TXT_TextInfo *info, TxtPt pt //////////////////////////////// //~ rjf: Artifact Cache Hooks / Lookups -internal void *txt_artifact_create(String8 key, B32 *retry_out); -internal void txt_artifact_destroy(void *ptr); +internal AC_Artifact txt_artifact_create(String8 key, B32 *retry_out); +internal void txt_artifact_destroy(AC_Artifact artifact); internal TXT_TextInfo txt_text_info_from_hash_lang(Access *access, U128 hash, TXT_LangKind lang); internal TXT_TextInfo txt_text_info_from_key_lang(Access *access, C_Key key, TXT_LangKind lang, U128 *hash_out);