0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MIPSのSIMD其の七

Last updated at Posted at 2023-03-10

ZRouterのKERNCONF_MAKEOPTIONSでCONF_CFLAGSに-mdspを設定してカーネルをビルドすると起動しなくなります。

gcc 4.2.1にはdspのサポートが入っていますが、あまり安定してなかったのかもしれません。

回避策としてビルド全体の設定ではなく、dsp命令を使用するアセンブラソースコード中で以下を設定します。

.set dsp

退避復旧のコードはswitch.S同様にアセンブラで書き、dsp.Sと別ファイルにしました。

ソースのヘッダーはswitch.Sのものを入れてあります。

とりあえずビルドできてカーネルは起動するのですがinitさんが起動できません。カーネルのframeにdsp関連のレジスタを追加したことが原因のようです。

ユーザーランドのほうにもdsp関連のレジスタを追加すればよいのですが、方法がわかりません。いろいろ考えてみてFPのレジスタはありますが、使われてないので、unionにしてそこにdsp関連のレジスタを保存する事にしました。

復元はdsp命令をユーザーランドで実行するとtrapが発生して、処理されるようになりました。

KERNCONF_MAKEOPTIONSでCONF_CFLAGSでMIPS_DSP_SUPPORTを定義するとDSPサポートが有効になります。DSPを使うのはごく限られるのでZRouterのsocsではなくvendorのmkで設定するようにします。

コンテキストスイッチで保存されるケースの確認方法を考えなければいけません。

mpg123のmips dspコードを誰か書いてくれませんか?

プロトタイプで全プロセスで保存を実行して、例外で復旧するようにしてみました。DSP命令を使用したプロセスのみで保存するのが正しいですし、領域のクリアもしてません。またきが向いたら考えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?