[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: new MIPS cache ops and R4000/4400 with L2 cache



<200111261330.fAQDUIv22818@mirage.ceres.dti.ne.jp>の記事において
私は書きました。

> self で作った kernel だと全然 multi-user にたどり着けません。
> cross で作った kernel だと make build も問題ないんですが。
> どのファイルを self で作るとダメなのかも確認してみます。

いろいろ調べた結果、どうも mips/mips/locore.S が原因のようです。
locore.o を i386 上の cross で作ると動く kernel ができますが
arc 上の native な as で作るとまともに動かない kernel になります。
(link をどちらのマシンでやっても同じ)

asm のくせになにが違うのか、と調べてみると 1305行目からの

---
/*
 * Send a floating point exception signal to the current process.
 */
	li	t0, 0xFFFFFF00
	and	a1, a1, t0
---
のところが

pkgsrc の cross の as だと
---
 a04:	3c08ffff	lui	$t0,0xffff
 a08:	3508ff00	ori	$t0,$t0,0xff00
 a0c:	00a82824	and	$a1,$a1,$t0
---

in-tree の native の as だと
---
 a04:	2408ff00	li	$t0,-256
 a08:	00a82824	and	$a1,$a1,$t0
---
になってました。

これは
・native の as が吐くコードがおかしい
・コードは正しくて動かないのがおかしい
のどちらなんでしょう?

FP まわりのルーチンだし arc だけってのも変だし
そもそも thorpej-mips-cache での変更箇所でもないので
これが関係あるのかどうかよくわかりませんが…
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp