Kazuki Ohta
mover****@hct*****
2005年 12月 21日 (水) 13:29:30 JST
太田です。 r2678にて全アクセサの再実装を終えました。SCM_SAL_C_POINTER_VALUE 等から見れば下層の構成は無視出来ていますが、SCM_SET_CAR_VAL等が 結構複雑化してしまいました。 現在の実装では、予めothers->carにstoreする値のalignmentを設定しておき ます(SCM_OTHERS_CAR_VAL_ALIGNMENT_*)。alignmentが0x1の時(つまり SCM_ALIGNMENT_NOALIGN)の場合は、SCM_OTHERS_CAR_VAL等で特殊 な処理を行います。その処理というのは、valのLSBをcdrのvalue領域のLSBに 保存するという処理です。cdrにアクセスする時はフラグをみて、そのLSBをスキップ するので、使う側からはこういった複雑な処理を気にせずに使用する事ができます。 continuation opaqueのalignmentが気になるなといった場合でも、NOALIGNに 設定すれば、自動的にCDRにLSBを保存してくれます。 とまぁこんな感じです。 > > Pointerについては、alignedなポインタが入ってくるとは限らないので、LSB > > だけを cdr の一部に退避させる必要があります。(carのLSBはGC bitに使 > > われています) > > これも同様。「LSBだけをcarに…」ではなく、「carのvalue幅から溢れ > た分をcdrのvalueに格納」とすれば下層の構成を無視できます。 ------------------------------------------------- Kazuki Ohta : mover****@hct***** -------------------------------------------------