[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 用の機械語を吐くクロスコンパイラ、と思う。
まだぜんぜん分かっていないがこの楽しさはもっといろんな人に触ってみてほしい。
(そして私の理解が進むような文書を書いてほしい、、)