KANDO Takayuki
kando****@isit*****
2010年 8月 25日 (水) 01:47:42 JST
COINS関係者の皆様 神戸です。 いつもお世話になっております。 COINSのMips向けバックエンドでSPIMコンベンションのコードを出力すると 例えば下記のようなPrologueコードが出ます: #...from here subu $sp,88 sw $31,80($sp) sw $fp,76($sp) sw $28,72($sp) sw $16,68($sp) sw $17,64($sp) move $fp,$sp #...to here (サンプルコードとコマンドラインをZIPして添付しました。 COINSの版は1.4.4.4です。) ここで疑問なのですがこれだとせっかくフレーム・ポインタ$fpとしてレジスタ ($30)を一個割いているにも関わらず、関数のボディ部ではfp==spになってし まっています。これはあまりよろしくない状況なのではないでしょうか? 実際、パタヘネ本の下巻のSPIMの手続き呼び出し規約の解説(A.6節)では単な るコピーである現状の: move $fp,$sp ではなく: addu $fp,$sp,framesize (ここでフレームサイズは定数、上記の例なら恐らく88) とするように解説されています。 実は私、現在、Cの標準ライブラリのstdargs.hを実装しているのですが ライブラリコードからフレームサイズやフレームの開始点を知る方法が ないので大変困っています。 この無駄$fpが真のfp(フレーム・ポインタ)になってくれると大変助かるので すが、そうなりませんものでしょうか? (ただ添付のサンプルコードでは短すぎて再現していませんが、 sp==fpの現状で関数内のスタック・フレームにアクセスするコードにfpを使うも のとspを使うものが混在しているように見えるところが気になりますが…。) ご検討、よろしくお願いします。 参考文献 <パタ&ヘネ本>: コンピュータの構成と設計 -ハードウエアとソフトウエアのインタフェース 第3版 (下) デイビッド・A. パターソン and ジョン・L. ヘネシー 著 成田 光彰 訳 日経BP社(2006/3/16)刊 ISBN-13: 978-4822282677 http://amzn.to/aeSquS (手元にあるのは初版なので、3版で記述が変わっていたら申し訳ありません。) -- KANDO Takayuki (kando****@isit*****) Quoliarc Technology Solutions Ltd. -- Institute of Systems & Information Technologies/KYUSHU Fukuoka SRP Center Building 7F, c/o ISIT 2-1-22 Momochihama, Sawara-ku, Fukuoka, 814-0001, Japan TEL:092-852-3460(extension:7228)/092-852-3461(direct) FAX:092-852-3465 -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: COINS_Mips_SPIM_Prologue.zip 型: application/x-zip-compressed サイズ: 1051 バイト 説明: 無しDescargar