From 7f56d951fe4ad6749e68ac860ea05f572b6d04ed Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sat, 7 Sep 2024 10:20:52 -0700 Subject: Allow compiling ancestor at half of max address Also makes code compatible with older versions of GCC. --- src/salis.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/salis.c') diff --git a/src/salis.c b/src/salis.c index c3de4f4..24f3966 100644 --- a/src/salis.c +++ b/src/salis.c @@ -27,6 +27,8 @@ #define INST_CAPS (0x80) #define INST_MASK (0x7f) +#define U64_HALF (0x8000000000000000) + typedef struct Core Core; typedef struct Ipcm Ipcm; typedef struct Proc Proc; @@ -296,7 +298,12 @@ u64 core_assemble_ancestor(int cix, const char *anc) { assert(f); - u64 addr = 0; +#if ANC_HALF == 1 + u64 addr = U64_HALF; +#else + u64 addr = 0; +#endif + char line[ASM_LINE_LEN] = {0}; Core *core = &g_cores[cix]; @@ -352,6 +359,10 @@ void core_init(int cix, u64 *seed, const char *anc) { u64 anc_size = core_assemble_ancestor(cix, anc); +#if ANC_HALF == 1 + anc_size -= U64_HALF; +#endif + arch_anc_init(core, anc_size); } #endif @@ -361,6 +372,8 @@ void core_load(FILE *f, Core *core) { assert(f); assert(core); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" fread(&core->mall, sizeof(u64), 1, f); fread( core->muta, sizeof(u64), 4, f); fread(&core->pnum, sizeof(u64), 1, f); @@ -371,6 +384,7 @@ void core_load(FILE *f, Core *core) { fread(&core->psli, sizeof(u64), 1, f); fread(&core->ncyc, sizeof(u64), 1, f); fread(&core->ivpt, sizeof(u64), 1, f); +#pragma GCC diagnostic pop core->iviv = calloc(SYNC_INTERVAL, sizeof(u8)); core->ivav = calloc(SYNC_INTERVAL, sizeof(u64)); @@ -380,10 +394,13 @@ void core_load(FILE *f, Core *core) { assert(core->ivav); assert(core->pvec); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" fread(core->iviv, sizeof(u8), SYNC_INTERVAL, f); fread(core->ivav, sizeof(u64), SYNC_INTERVAL, f); fread(core->pvec, sizeof(Proc), core->pcap, f); fread(core->mvec, sizeof(u8), MVEC_SIZE, f); +#pragma GCC diagnostic pop } #endif @@ -521,8 +538,12 @@ void salis_load() { core_load(f, &g_cores[i]); } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" fread(&g_steps, sizeof(u64), 1, f); fread(&g_syncs, sizeof(u64), 1, f); +#pragma GCC diagnostic pop + fclose(f); } #endif -- cgit v1.2.1