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)))

限界っぽいので

そろそろ寝ます。