[Coins-compiler-users-j] -b mips-spim 下の$fpの扱いについて

Back to archive index

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 



Coins-compiler-users-j メーリングリストの案内
Back to archive index