メモ
予想に反して、primitive をランタイムにうつしたほうがコンパイラが単純になった‥
そういうものなのだろうか。
;; 現在の car, cdr の定義 ;;; (car (define-function ,opts i32 @prim_car ((i32 %arg1)) (assign %intptr (sub (i32 %arg1 1)) ; -1 %ptr (inttoptr (i32 %intptr) i32*) %car (load (i32* %ptr))) (ret (i32 %car)))) (cdr (define-function ,opts i32 @prim_cdr ((i32 %arg1)) (assign %cdr_intptr (add (i32 3 %arg1)) ; +3 %cdrptr (inttoptr (i32 %cdr_intptr) i32*) %cdr (load (i32* %cdrptr))) (ret (i32 %cdr)))) ;;;