メモ

予想に反して、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))))
;;;