docs/gpu-architecture.md — roadmap for GPU lambda execution: Phase 1: map/reduce (CUDA thread per element) Phase 2: trampolining (recursive lambdas without stack) Phase 3: interaction combinators (Bend/HVM approach, 74K MIPS) c/jit.h — x86_64 JIT header: JitBlock, JitFunc typedef, jit_compile/jit_free API. Uses mmap for executable memory. System V AMD64 ABI calling convention. jit.c implementation in progress (x86 instruction encoding).
36 lines
1 KiB
C
36 lines
1 KiB
C
/*
|
|
* jit.h — x86_64 JIT compiler for uncommonlisp
|
|
*
|
|
* Compiles Scheme procedures to native machine code.
|
|
* Uses mmap(PROT_READ|PROT_WRITE|PROT_EXEC) for executable memory.
|
|
*
|
|
* Code outlasts authors.
|
|
*/
|
|
#ifndef JIT_H
|
|
#define JIT_H
|
|
|
|
#include "uncommonlisp.h"
|
|
|
|
/* A JIT-compiled function takes NaN-boxed Value args and returns a Value.
|
|
* System V AMD64 ABI: args in rdi, rsi, rdx, rcx, r8, r9 */
|
|
typedef Value (*JitFunc)(Value, Value, Value, Value, Value, Value);
|
|
|
|
/* Opaque handle to a JIT code block */
|
|
typedef struct JitBlock {
|
|
void *code; /* mmap'd executable memory */
|
|
size_t size; /* allocated size */
|
|
JitFunc func; /* entry point (same as code) */
|
|
const char *name; /* procedure name for debugging */
|
|
} JitBlock;
|
|
|
|
/* Try to JIT-compile a Proc. Returns NULL if the proc uses features
|
|
* we can't JIT (call/cc, macros, complex forms). */
|
|
JitBlock *jit_compile(Proc *proc);
|
|
|
|
/* Free a JIT code block */
|
|
void jit_free(JitBlock *block);
|
|
|
|
/* Global flag — enable JIT compilation */
|
|
extern bool g_jit_enabled;
|
|
|
|
#endif /* JIT_H */
|