Forums: Developers (Thread #25090)

HOS-V4 sh2 pacctx.s (2010-01-12 18:48 by tkohama #47854)

hos-v4\src\sh\sh2gcc\pacctx.s
ですが
_hospac_ena_int:
mov #0xf0, r1 /* 0x00f0 を反転させて 0xff0f を作成 */
not r1, r1
は符号拡張されて
mov #0xf0,r1 ; 0xfffffff0=>r1
not r1, r1 ; 0x0000000f=>r1
の意味あいになるのでないでしょうか?
mov #0x78,r1
shll r1
not r1,r1

_hospac_dis_int:
stc sr, r0
or #0xf0, r0 /* 全割り込みマスク */
こっちの or は符号拡張ないので、問題なし。

RE: HOS-V4 sh2 pacctx.s (2010-01-12 21:33 by ryuz #47858)

Ryuzです。いつもお世話になっております。

バグレポ有難うございます。
命令セット確認いたしましたが、確かに符号拡張が入っており、意図した動作になっておりません。

Mビットが破壊される可能性がありますので、修正したいと思います。
Reply to #47854

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:11 by hamayan #47860)

地味にこんな感じでしょうか。

_hospac_ena_int:
; mov #h'f0, r1 ; 0x00f0 を反転させて 0xff0f を作成
; not r1, r1
mov.l Without_imsk,r1
mov.l @r1,r1
stc sr, r1
and r0, r1 ; 割り込みマスク値以外を取得
mov.l L_imsk, r0
mov.l @r0, r0
or r0, r1 ; 割り込みマスクの値を設定
rts
ldc r1, sr

.ALIGN 4
L_imsk .DATA.L _hospac_sh_imsk ; 割り込みマスク
Without_imsk .DATA.L h'030f ; 割り込みマスク以外のマスク
Reply to #47858

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:22 by ryuz #47865)

Ryuzです。有難うございます。

ほぼ同じ修正を考えていましたが、マスクは h'030f がいいですかね?
手元のマニュアルだと、bit10~31は予約になってますが、後続シリーズで何か使われたりしてますか?(しばらくSH使っていなくて... 汗汗)
予約bitとはいえ、わからないものは基本マスクしておいた方がいいような気も。
あ、でも書き込みは必ず0を書けと注意書きがありますね。 h'030f が
正解かな?。
# 0の読み込みを保証してるので、どちらも同じ動作ではありますが。

hamayanさんのところ、動作確認簡単に出来たりしますでしょうか?
手元でgcc版のコンパイルは通ったのですが、引越しのドサクサでSHの動作確認環境が立ち上がっておらず。まとまった時間が取れるのが週末になってしまいそうです。

P.S.
遅くなりましたが、明けましておめでとうございます。
今年もよろしくお願いいたします。
Reply to #47860

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:29 by hamayan #47867)

_hospac_ena_int:
; mov #h'f0, r1 ; 0x00f0 を反転させて 0xff0f を作成
; not r1, r1
mov.l Without_imsk,r1
stc sr, r1
and r0, r1 ; 割り込みマスク値以外を取得
mov.l L_imsk, r0
mov.l @r0, r0
or r0, r1 ; 割り込みマスクの値を設定
rts
ldc r1, sr

.ALIGN 4
L_imsk .DATA.L _hospac_sh_imsk ; 割り込みマスク
Without_imsk .DATA.L h'030f ; 割り込みマスク以外のマスク

修正しました。
mov.l Without_imsk,r1
の下のレジスタ間接が余計でした。
HEWのシミュレーションでは上記で良さそうです。
逆にgccでの確認ができません。

0x30fにしているのは、一応ステータスレジスタに書き込む時はbit10以上は0にすると言う規則があるみたいなので。かなり微妙ですけれどね。

こちらこそ、今年もよろしくお願いいたします。
Reply to #47865

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:40 by ryuz #47868)

Ryuzです。ボケボケでした。

今押入れあさったら、あっさりインターフェース付録のSH2ボード発見したので、gcc版もhamayanさんに合わせる形でちょっと試してみますね。
Reply to #47867

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:49 by ryuz #47869)

Ryuzです。
よく考えたら、v4のサンプルはインターフェース基板じゃなかったです。orz

すいません、時間が取れ次第動作確認します。
ちなみに手元で行ったgcc版の修正は以下のとおり。
SISCのクセで変なことしちゃってましたが、RISCの場合普通にmov.lが正解ですよね。


_hospac_ena_int:
mov.l without_imask, r1
stc sr, r0
and r1, r0 /* 割り込みマスク値以外を取得 */
mov.l imsk_addr, r1
mov.l @r1, r1
or r1, r0 /* 割り込みマスクの値を設定 */
ldc r0, sr
rts
nop

.align 2
imsk_addr:
.long _hospac_sh_imsk /* 割り込みマスク */
without_imask:
.long 0x030f /* 割り込み以外のマスク */

Reply to #47868

RE: HOS-V4 sh2 pacctx.s (2010-01-14 23:06 by tkohama #47907)

ども、お手数かけました。
実は procにsh7211を移植検討中で、HOSをチラッ見してた訳です。
http://www.nilsenelektronikk.no/neproc.html
Reply to #47869

RE: HOS-V4 sh2 pacctx.s (2010-01-17 18:31 by ryuz #47950)

お世話になります。Ryuzです。

すいません数日体調崩していて。書き込みが遅れました。
本件なのですが、幾つか課題があります。

1) 現状コードでも害は無いはず
(保存不要なbitしか壊していない)
2) 予約ビットをどう扱うかはもう少し議論が必要かも
3) それを踏まえた上でそもそもマスクしない(高速になる)という解もありうる。
4) 別件だが、それよりも現状コードは多重割り込みに問題があったはず。Advance版で対応コードを実験中の状態。反映させるべきか多重割込み禁止で仕様にしてしまうか悩ましいところ。

以上、深く考察できていないのですが、こんなところです。

また復活して時間が取れたら対応します。
取り急ぎ失礼いたします。
Reply to #47907

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:52 by hamayan #47870)

すいません何度も。以下の方が良いかも。

_hospac_ena_int:
mov.w Without_imsk,r1
stc sr, r1
and r0, r1 ; 割り込みマスク値以外を取得
mov.l L_imsk, r0
mov.l @r0, r0
or r0, r1 ; 割り込みマスクの値を設定
rts
ldc r1, sr
Without_imsk .DATA.W h'0303 ; 割り込みマスク以外のマスク

.ALIGN 4
L_imsk .DATA.L _hospac_sh_imsk ; 割り込みマスク
Reply to #47867

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:15 by hamayan #47864)

あれ、なんか違うな。
御免なさい、考え直します。
Reply to #47854

RE: HOS-V4 sh2 pacctx.s (2010-01-12 22:28 by ryuz #47866)

Ryuzです。

あ、bitの桁読み間違えてました。
多分同じ勘違いをしている予感。

SRレジスタの非予約bitを0にすると
0x00000303 になるかと。
非予約bitも保存するなら
0xffffff0f かな。

Reply to #47854