proper i64 formatting, move openbsd hack up

This commit is contained in:
dzaima 2021-06-06 22:14:04 +03:00
parent ebd6e1a222
commit 96f3089410
5 changed files with 26 additions and 23 deletions

View File

@ -18,7 +18,7 @@ Value* heap_curr;
void heapVerify_checkFn(Value* v) { void heapVerify_checkFn(Value* v) {
if (v->refc!=0) { if (v->refc!=0) {
#ifdef OBJ_COUNTER #ifdef OBJ_COUNTER
printf("delta %d for %s, uid %ld: ", v->refc, format_type(v->type), v->uid); printf("delta %d for %s, uid "N64d": ", v->refc, format_type(v->type), v->uid);
#else #else
printf("delta %d for %s: ", (i32)v->refc, format_type(v->type)); printf("delta %d for %s: ", (i32)v->refc, format_type(v->type));
#endif #endif

View File

@ -69,7 +69,7 @@ NOINLINE void print(B x) {
else if (x.u==bi_noVar.u) printf("(unset variable placeholder)"); else if (x.u==bi_noVar.u) printf("(unset variable placeholder)");
else if (x.u==bi_badHdr.u) printf("(bad header note)"); else if (x.u==bi_badHdr.u) printf("(bad header note)");
else if (x.u==bi_noFill.u) printf("(no fill placeholder)"); else if (x.u==bi_noFill.u) printf("(no fill placeholder)");
else printf("(todo tag %lx)", x.u>>48); else printf("(todo tag "N64x")", x.u>>48);
} }
NOINLINE void printRaw(B x) { NOINLINE void printRaw(B x) {
@ -138,17 +138,17 @@ NOINLINE B append_fmt(B s, char* p, ...) {
if (mode) { if (mode) {
assert(c=='l'||c=='i'); assert(c=='l'||c=='i');
if (c=='i') snprintf(buf, 30, mode==1? "%u" : "%x", va_arg(a, u32)); if (c=='i') snprintf(buf, 30, mode==1? "%u" : "%x", va_arg(a, u32));
else snprintf(buf, 30, mode==1? "%lu" : "%lx", va_arg(a, u64)); else snprintf(buf, 30, mode==1? N64u : N64x, va_arg(a, u64));
} else { } else {
if (c=='i') { if (c=='i') {
i32 v = va_arg(a, i32); i32 v = va_arg(a, i32);
if (v<0) AU("¯"); if (v<0) AU("¯");
snprintf(buf, 30, "%lu", (u64)(v<0?-v:v)); snprintf(buf, 30, N64u, (u64)(v<0?-v:v));
} else { assert(c=='l'); } else { assert(c=='l');
i64 v = va_arg(a, i64); i64 v = va_arg(a, i64);
if (v<0) AU("¯"); if (v<0) AU("¯");
if (v==I64_MIN) snprintf(buf, 30, "9223372036854775808"); if (v==I64_MIN) snprintf(buf, 30, "9223372036854775808");
else snprintf(buf, 30, "%lu", (u64)(v<0?-v:v)); else snprintf(buf, 30, N64u, (u64)(v<0?-v:v));
} }
} }
A8(buf); A8(buf);
@ -156,7 +156,7 @@ NOINLINE B append_fmt(B s, char* p, ...) {
} }
case 's': { case 's': {
usz v = va_arg(a, usz); usz v = va_arg(a, usz);
snprintf(buf, 30, sizeof(usz)==4? "%u" : "%lu", v); snprintf(buf, 30, sizeof(usz)==4? "%u" : N64u, v);
A8(buf); A8(buf);
break; break;
} }
@ -450,24 +450,24 @@ B bqn_merge(B x) { // consumes
NOINLINE void printAllocStats() { NOINLINE void printAllocStats() {
#ifdef ALLOC_STAT #ifdef ALLOC_STAT
printf("total ever allocated: %lu\n", talloc); printf("total ever allocated: "N64u"\n", talloc);
printf("allocated heap size: %ld\n", mm_heapAlloc); printf("allocated heap size: "N64u"\n", mm_heapAlloc);
printf("used heap size: %ld\n", mm_heapUsed()); printf("used heap size: "N64u"\n", mm_heapUsed());
ctr_a[t_harr]+= ctr_a[t_harrPartial]; ctr_a[t_harr]+= ctr_a[t_harrPartial];
ctr_a[t_harrPartial] = 0; ctr_a[t_harrPartial] = 0;
printf("ctrA←"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(""); printf("%lu", ctr_a[i]); } printf("\n"); printf("ctrA←"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(""); printf(N64u, ctr_a[i]); } printf("\n");
printf("ctrF←"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(""); printf("%lu", ctr_f[i]); } printf("\n"); printf("ctrF←"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(""); printf(N64u, ctr_f[i]); } printf("\n");
printf("names←⟨"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(","); printf("\"%s\"", format_type(i)); } printf("\n"); printf("names←⟨"); for (i64 i = 0; i < t_COUNT; i++) { if(i)printf(","); printf("\"%s\"", format_type(i)); } printf("\n");
u64 leakedCount = 0; u64 leakedCount = 0;
for (i64 i = 0; i < t_COUNT; i++) leakedCount+= ctr_a[i]-ctr_f[i]; for (i64 i = 0; i < t_COUNT; i++) leakedCount+= ctr_a[i]-ctr_f[i];
printf("leaked object count: %ld\n", leakedCount); printf("leaked object count: "N64u"\n", leakedCount);
#ifdef ALLOC_SIZES #ifdef ALLOC_SIZES
for(i64 i = 0; i < actrc; i++) { for(i64 i = 0; i < actrc; i++) {
u32* c = actrs[i]; u32* c = actrs[i];
bool any = false; bool any = false;
for (i64 j = 0; j < t_COUNT; j++) if (c[j]) any=true; for (i64 j = 0; j < t_COUNT; j++) if (c[j]) any=true;
if (any) { if (any) {
printf("%ld", i*4); printf(N64u, i*4);
for (i64 k = 0; k < t_COUNT; k++) printf("‿%u", c[k]); for (i64 k = 0; k < t_COUNT; k++) printf("‿%u", c[k]);
printf("\n"); printf("\n");
} }

11
src/h.h
View File

@ -55,12 +55,12 @@
// #define PRECOMP // execute just precompiled code at src/gen/interp // #define PRECOMP // execute just precompiled code at src/gen/interp
#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#ifdef __OpenBSD__ #ifdef __OpenBSD__
#define __wchar_t __wchar_t2 // horrible hack for BSD #define __wchar_t __wchar_t2 // horrible hack for BSD
#endif #endif
#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stddef.h> #include <stddef.h>
@ -107,6 +107,9 @@
#define LIKELY(X) __builtin_expect(X,1) #define LIKELY(X) __builtin_expect(X,1)
#define RARE(X) __builtin_expect(X,0) #define RARE(X) __builtin_expect(X,0)
#define RFLD(X,T,F) ((T*)((char*)(X) - offsetof(T,F))) // reverse-read field: `T* x = …; E v = x->f; x == RFLD(v, T, f)` #define RFLD(X,T,F) ((T*)((char*)(X) - offsetof(T,F))) // reverse-read field: `T* x = …; E v = x->f; x == RFLD(v, T, f)`
#define N64x "%"SCNx64
#define N64d "%"SCNd64
#define N64u "%"SCNu64
typedef u32 usz; typedef u32 usz;
typedef u8 ur; typedef u8 ur;
@ -114,7 +117,7 @@ typedef u8 ur;
#define UR_MAX 255 #define UR_MAX 255
#define CTR_FOR(F) #define CTR_FOR(F)
#define CTR_PRINT(N) if(N) printf(#N ": %lu\n", N); #define CTR_PRINT(N) if(N) printf(#N ": "N64u"\n", N);
#define F(N) extern u64 N; #define F(N) extern u64 N;
CTR_FOR(F) CTR_FOR(F)
#undef F #undef F

View File

@ -68,7 +68,7 @@ void gc_forceGC() {
gc_tagNew = gc_tagCurr; gc_tagNew = gc_tagCurr;
gc_tagCurr^= 0x80; gc_tagCurr^= 0x80;
#ifdef LOG_GC #ifdef LOG_GC
fprintf(stderr, "GC kept %ldB from %ld objects, freed %ldB, including directly %ldB from %ld objects; took %.3fms\n", gc_visitBytes, gc_visitCount, startAllocB-allocB, gc_freedBytes, gc_freedCount, (nsTime()-start)/1e6); fprintf(stderr, "GC kept "N64d"B from "N64d" objects, freed "N64d"B, including directly "N64d"B from "N64d" objects; took %.3fms\n", gc_visitBytes, gc_visitCount, startAllocB-allocB, gc_freedBytes, gc_freedCount, (nsTime()-start)/1e6);
#endif #endif
gc_lastAlloc = allocB; gc_lastAlloc = allocB;
#endif #endif

View File

@ -579,7 +579,7 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume
} }
#ifdef DEBUG_VM #ifdef DEBUG_VM
for(i32 i = 0; i < bcDepth; i++) printf(" "); for(i32 i = 0; i < bcDepth; i++) printf(" ");
printBC(sbc); printf("@%ld: ", BCPOS(b, sbc)); printBC(sbc); printf("@"N64d": ", BCPOS(b, sbc));
for (i32 i = 0; i < b->maxStack; i++) { if(i)printf(""); print(gStack[i]); } putchar('\n'); fflush(stdout); for (i32 i = 0; i < b->maxStack; i++) { if(i)printf(""); print(gStack[i]); } putchar('\n'); fflush(stdout);
#endif #endif
} }
@ -802,7 +802,7 @@ NOINLINE void vm_printPos(Comp* comp, i32 bcPos, i64 pos) {
if (!isNothing(src) && !isNothing(comp->indices)) { if (!isNothing(src) && !isNothing(comp->indices)) {
B inds = TI(comp->indices).getU(comp->indices, 0); usz cs = o2s(TI(inds).getU(inds,bcPos)); B inds = TI(comp->indices).getU(comp->indices, 0); usz cs = o2s(TI(inds).getU(inds,bcPos));
B inde = TI(comp->indices).getU(comp->indices, 1); usz ce = o2s(TI(inde).getU(inde,bcPos))+1; B inde = TI(comp->indices).getU(comp->indices, 1); usz ce = o2s(TI(inde).getU(inde,bcPos))+1;
int start = pos==-1? 0 : printf("%ld: ", pos); int start = pos==-1? 0 : printf(N64d": ", pos);
usz srcL = a(src)->ia; usz srcL = a(src)->ia;
BS2B srcGetU = TI(src).getU; BS2B srcGetU = TI(src).getU;
usz srcS = cs; usz srcS = cs;
@ -818,7 +818,7 @@ NOINLINE void vm_printPos(Comp* comp, i32 bcPos, i64 pos) {
putchar('\n'); putchar('\n');
// printf(" inds:%d…%d\n", cinds, cinde); // printf(" inds:%d…%d\n", cinds, cinde);
} else { } else {
if (pos!=-1) printf("%ld: ", pos); if (pos!=-1) printf(N64d": ", pos);
printf("source unknown\n"); printf("source unknown\n");
} }
} }
@ -830,7 +830,7 @@ NOINLINE void vm_pst(Env* s, Env* e) {
while (i>=0) { while (i>=0) {
Env* c = s+i; Env* c = s+i;
if (l>30 && i==l-10) { if (l>30 && i==l-10) {
printf("(%ld entries omitted)\n", l-20); printf("("N64d" entries omitted)\n", l-20);
i = 10; i = 10;
} }
Comp* comp = c->sc->body->comp; Comp* comp = c->sc->body->comp;