comparison Changes @ 89:917947ffeb7c

power pc version
author kono
date Thu, 06 Mar 2003 23:47:42 +0900
parents 5c8553d7f984
children 07e3113c3c13
comparison
equal deleted inserted replaced
88:5c8553d7f984 89:917947ffeb7c
1918 1918
1919 できたよ。まだ、テストしてない部分はあるけど。局所変数の初期化とか。 1919 できたよ。まだ、テストしてない部分はあるけど。局所変数の初期化とか。
1920 FCONST とか。3日で出来たね。 1920 FCONST とか。3日で出来たね。
1921 1921
1922 (gcc の方をやった方がいいかなぁ...) 1922 (gcc の方をやった方がいいかなぁ...)
1923 goto.c が通らなくなってるな。
1924
1925 Thu Mar 6 14:00:13 JST 2003
1926
1927 PowerPCのnon-lazy pointerって、テーブルに入っていてそれを読
1928 み込む形式なのね。いったん、レジスタに読み込んだら、それを再
1929 利用する形が良いらしい。ということは、code_gvar にキャッシュ
1930 を作らないといけない。しかも RLU ですか? (めんどくさ〜)
1931 でも、そうしないと、
1932 i = i+1;
1933 なんてのでも、ひどい目にあってしまう。
1934
1935 local variable も最初に move mutilple register で大半は
1936 レジスタに読み込んじゃうみたいね。pointer で参照されると
1937 困るんでしょうけど。まぁ、31個もあれば、そういうことを
1938 してもあまり問題ないのかも知れないけど。
1939
1940 creg を破壊しない実装にすれば、少しはましになるんじゃない?
1941 (IA32では、それは難しいけど)
1942
1943 Thu Mar 6 20:50:24 JST 2003
1944
1945 やっぱり、使った分だけregisterを保存するようなコードに
1946 なるみたい。one path で、それをするためには、
1947 .align 2
1948 _main0__:
1949 lwz r5,2136(r1)
1950 addi r1,r1,2128
1951 lmw r23,-36(r1)
1952 mtlr r5
1953 blr
1954 .align 2
1955 .globl _main0
1956 _main0:
1957 mflr r2
1958 stmw r30,-8(r1)
1959 stw r2,8(r1)
1960 li r11,0
1961 stwu r1,-480(r1)
1962 li r2,100
1963 mtctr r2
1964 mr r30,r3
1965 addi r0,r1,64
1966 mr r9,r0
1967 b _main0__;
1968 とかいう感じにするしかないね。
1969
1970 あと引数は、レジスタに積むようになっているみたいだけど... r3 から?
1971
1972 mflr r31
1973 li r0,7
1974 stw r0,56(r1)
1975
1976 だから8個まではレジスタに積むみたいね。
1977 r3-r10 だね。
1978
1979 構造体もregisterにコピーされるのか。そして、向う側で受取の
1980 コピーを行うわけだね。先頭にreturn structへのポインタがあるのも
1981 同じ。
1982
1983 (うう、memcpyしまくりだ...)
1984
1985 浮動小数点もレジスタ渡し見たい。f1から。(なるほど)
1986
1987 saveFPってのを呼び出して、 f24-f31をsaveするらしい。
1988 (31-24)*8 数合わないな?
1989
1990 pointer のことを考えると、レジスタだとまずいものもある
1991 わけだけど。アドレスを取られてからで間に合うんじゃない?
1992 配列などは、もともとだめだし。場所と値(?)は確保するとして。
1993
1994 そうか、逆に、r3-r10 は引数でなければ壊しても良いわけか。
1995 (それでr9とか良く使われているわけか...)
1996 ということは足りなくなったら、引数をセーブすれば良いわけね。
1997 (ってことは、LVAR かつ REGISTER っていう状況があるんじゃん...
1998 まぁ、そうだけどさ...)
1999 これは get_register がめんどくさそ。
2000
2001 どうも、r11-r12 あたりは自由に使っているらしい。
2002
2003 引数を作っている途中で関数呼出しするときは、どうするの?
2004 r30などに移動するのか?
2005
2006 なんか知らんけど、in file call name と out file call name が
2007 違うみたいね。(sigh...) こんなのなんとかなるのかなぁ。
2008 全部、stub にしておいて、.set で書き換えるという手もあるけど。
2009
2010 (さすがに一日ではできないか...)