[Common Lisp] Movitz 構成

実行環境の sbcl から、Common Lisp の disassemble を実行すると、PPC機械語が見れる。

CL-USER> (disassemble 'cons)
; 101FC550:       .ENTRY CONS(SE1 SE2)                        ; (FUNCTION
                                                              ;  # *)
;       68:       3A7FFFD7         ADDI $CODE,$LIP,-41
;       6C:       3A0F0020         ADDI $CSP,$CFP,32
(略)
;       E8:       4E800020         BLR
;       EC:       00000000         BYTE #X00, #X00, #X00, #X00

同様に、movitz-disassemble を実行すると、muerte (x86 上で動くCL runtime?)の関数の機械語が見れる。

CL-USER> (movitz::movitz-disassemble 'muerte::cons)
;; Movitz Disassembly of cons:
;;  0 Constants.
   0:  FF 57 B7        (call (edi -73)) ; <Global slot assert-2args>
   3:                    => Entry-point for 2 arguments <=
   3:    entry%2op     
   3:  64 62 67 3B     ((fs-override) bound (edi 59) esp) ; <Global slot stack-bottom>
   7:  55              (pushl ebp)
   8:  8B EC           (movl esp ebp)
  10:  56              (pushl esi)
  11:  64 FF 57 CF     ((fs-override) call (edi -49)) ; <Global slot fast-cons>
  15:  F8              (clc)
  16:  C9              (leave)
  17:  8B 75 FC        (movl (ebp -4) esi)
  20:  C3              (ret)
NIL

movitz のコンパイラは、(任意の)Common Lisp 上で動作し、x86 用の機械語を吐くクロスコンパイラ、と思う。
まだぜんぜん分かっていないがこの楽しさはもっといろんな人に触ってみてほしい。
(そして私の理解が進むような文書を書いてほしい、、)