cgen: jolt-IR -> C for numeric-leaf fns (jolt-ihdp) (#145)
First slice of the native-codegen tier. A new standalone module, src/jolt/ cgen.janet, that translates a numeric-leaf fn (numeric in/out, body uses only native-op arithmetic + loop/recur/if/let/do) to a Janet native C module: params unboxed to C doubles at entry, loop/recur lowered to a while loop, reboxed at return. compile-fn runs cc and loads the .so via the native builtin, returning a cfunction; it returns nil for non-candidates or when the toolchain is absent. count-point compiles and matches the bytecode fn across the mandelbrot grid (test/integration/cgen-test.janet, which skips the behavioral leg where cc/janet.h are missing). Nothing wires this into the default compile path yet — detecting hot fns and installing the C version onto the var cell is the next step. See docs/foundational-runtime-lever1-native-codegen.md for the ceiling (native-C ~18-22x faster than bytecode, edges out JVM) and the leaf-first rule. Co-authored-by: Yogthos <yogthos@gmail.com>
This commit is contained in:
parent
a2ce6bb5f6
commit
19e8ee906a
3 changed files with 329 additions and 0 deletions
15
spike/native/dump-ir.janet
Normal file
15
spike/native/dump-ir.janet
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# Dump the analyzed IR (not emitted Janet) for count-point, so the C emitter can
|
||||
# be written against the real node shapes. jolt-ihdp.
|
||||
(import ../../src/jolt/api :as api)
|
||||
(import ../../src/jolt/backend :as backend)
|
||||
(import ../../src/jolt/reader :as reader)
|
||||
|
||||
(def ctx (api/init-cached {:compile? true}))
|
||||
(put (ctx :env) :direct-linking? true)
|
||||
(put (ctx :env) :inline? true)
|
||||
(api/eval-string ctx "(ns mandelbrot)")
|
||||
|
||||
(def src "(defn count-point [cr ci cap] (loop [i 0 zr 0.0 zi 0.0] (if (or (>= i cap) (> (+ (* zr zr) (* zi zi)) 4.0)) i (recur (inc i) (+ (- (* zr zr) (* zi zi)) cr) (+ (* 2.0 (* zr zi)) ci)))))")
|
||||
|
||||
(def ir (backend/analyze-form ctx (reader/parse-string src)))
|
||||
(printf "%P" ir)
|
||||
Loading…
Add table
Add a link
Reference in a new issue