push out perf/writing stuff from m_nvm
This commit is contained in:
parent
72896feb8f
commit
51c41f0766
@ -425,6 +425,25 @@ static u32 readBytes4(u8* d) {
|
||||
}
|
||||
#endif
|
||||
|
||||
static void onJIT(Body* body, u8* binEx, u64 sz) {
|
||||
#if USE_PERF
|
||||
if (!perf_map) {
|
||||
B s = m_str32(U"/tmp/perf-"); AFMT("%l.map", getpid());
|
||||
perf_map = file_open(s, "open", "wa");
|
||||
print(s); printf(": map\n");
|
||||
dec(s);
|
||||
}
|
||||
u32 bcPos = body->map[0];
|
||||
// printf("JIT %d:\n", perfid);
|
||||
// vm_printPos(body->comp, bcPos, -1);
|
||||
fprintf(perf_map, N64x" "N64x" JIT %d: BC@%u\n", (u64)binEx, sz, perfid++, bcPos);
|
||||
#endif
|
||||
#if WRITE_ASM
|
||||
write_asm(binEx, sz);
|
||||
// exit(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
typedef B JITFn(B* cStack, Scope* sc);
|
||||
static inline i32 maxi32(i32 a, i32 b) { return a>b?a:b; }
|
||||
Nvm_res m_nvm(Body* body) {
|
||||
@ -585,24 +604,9 @@ Nvm_res m_nvm(Body* body) {
|
||||
GET_ASM();
|
||||
u64 sz = ASM_SIZE;
|
||||
u8* binEx = nvm_alloc(sz);
|
||||
#if USE_PERF
|
||||
if (!perf_map) {
|
||||
B s = m_str32(U"/tmp/perf-"); AFMT("%l.map", getpid());
|
||||
perf_map = file_open(s, "open", "wa");
|
||||
print(s); printf(": map\n");
|
||||
dec(s);
|
||||
}
|
||||
u32 bcPos = body->map[0];
|
||||
// printf("JIT %d:\n", perfid);
|
||||
// vm_printPos(body->comp, bcPos, -1);
|
||||
fprintf(perf_map, N64x" "N64x" JIT %d: BC@%u\n", (u64)binEx, sz, perfid++, bcPos);
|
||||
#endif
|
||||
ASM_WRITE(binEx);
|
||||
#if WRITE_ASM
|
||||
write_asm(binEx, sz);
|
||||
// exit(0);
|
||||
#endif
|
||||
ASM_WRITE(binEx, sz);
|
||||
FREE_ASM();
|
||||
onJIT(body, binEx, sz);
|
||||
return (Nvm_res){.p = binEx, .refs = optRes.refs};
|
||||
}
|
||||
B evalJIT(Body* b, Scope* sc, u8* ptr) { // doesn't consume
|
||||
|
||||
@ -67,11 +67,11 @@ typedef u8 Reg;
|
||||
#define AADD(P,N) b_o=asm_add(b_o, P, N)
|
||||
#define ASM_SIZE (b_o->size)
|
||||
#define FREE_ASM() mm_free((Value*)b_o); TSFREE(b_r);
|
||||
#define ASM_WRITE(P) { \
|
||||
memcpy(binEx, bin, sz); \
|
||||
#define ASM_WRITE(P,SZ) { \
|
||||
memcpy(P, bin, SZ); \
|
||||
u64 relAm = TSSIZE(b_r); \
|
||||
for (u64 i = 0; i < relAm; i++) { \
|
||||
u8* ins = binEx+b_r[i]; \
|
||||
u8* ins = P+b_r[i]; \
|
||||
u32 o = readBytes4(ins); \
|
||||
u32 n = o-(u32)(u64)ins; \
|
||||
memcpy(ins, (u8[]){BYTES4(n)}, 4); \
|
||||
|
||||
Loading…
Reference in New Issue
Block a user