pass3/asm-vec-ref
compile.scm 読んでみてはいかが、との発信あり@ReadingGauche。確かにソースは大切だよね、と言いつつ compile.scm を開く。
とりあえず
pass3/asm-vec-ref 手続きを見る。
(define (pass3/asm-vec-ref info vec k ccb renv ctx) (cond ((and (has-tag? k $CONST) (unsigned-integer-fits-insn-arg? ($const-value k))) (pass3/builtin-onearg info VEC-REFI ($const-value k) vec)) (else (pass3/builtin-twoargs info VEC-REF 0 vec k))))
いきなりココは微妙だなぁ。とりあえず確認事項をログ
has-tag? 手続き
何故か gtags の動作が微妙。定義は compile.scm で以下
;; check intermediate tag (define-macro (has-tag? iform tag) `(eqv? (vector-ref ,iform 0) ,tag))
とりあえず詳細は略。
unsigned-integer-fits-insn-arg? 手続き
これも同様に compile.scm にて定義。
(define (unsigned-integer-fits-insn-arg? obj) (and (integer? obj) (exact? obj) (<= 0 obj #x7ffff)))
限界っぽいので
そろそろ寝ます。