FRK-SH2A (4) 割り込み2010年04月29日 22時15分45秒

KPIT GNUSH v1001 Windows Tool Chain で作成したプロジェクトは、 どうも割り込みの部分に不具合がありそうなので、その部分を見てみる。
2FE6     _INT_CMT MOV.L     R14,@-R15
FF0B              FMOV.S    FR0,@-R15
FF1B              FMOV.S    FR1,@-R15
FF2B              FMOV.S    FR2,@-R15
FF3B              FMOV.S    FR3,@-R15
FF4B              FMOV.S    FR4,@-R15
FF5B              FMOV.S    FR5,@-R15
FF6B              FMOV.S    FR6,@-R15
FF7B              FMOV.S    FR7,@-R15
FF8B              FMOV.S    FR8,@-R15
FF9B              FMOV.S    FR9,@-R15
FFAB              FMOV.S    FR10,@-R15
FFBB              FMOV.S    FR11,@-R15
4F02              STS.L     MACH,@-R15
4F12              STS.L     MACL,@-R15
4F52              STS.L     FPUL,@-R15
4F62              STS.L     FPSCR,@-R15
2F06              MOV.L     R0,@-R15
2F16              MOV.L     R1,@-R15
2F26              MOV.L     R2,@-R15
2F36              MOV.L     R3,@-R15
2F46              MOV.L     R4,@-R15
2F56              MOV.L     R5,@-R15
2F66              MOV.L     R6,@-R15
2F76              MOV.L     R7,@-R15
4F22              STS.L     PR,@-R15
6EF3              MOV       R15,R14
D111              MOV.L     @(H'0044:8,PC),R1
D211              MOV.L     @(H'0044:8,PC),R2
4266              LDS.L     @R2+,FPSCR
72FC              ADD       #H'FC,R2
414B              JSR/N     @R1
6FE3              MOV       R14,R15
4F26              LDS.L     @R15+,PR
67F6              MOV.L     @R15+,R7
66F6              MOV.L     @R15+,R6
65F6              MOV.L     @R15+,R5
64F6              MOV.L     @R15+,R4
63F6              MOV.L     @R15+,R3
62F6              MOV.L     @R15+,R2
61F6              MOV.L     @R15+,R1
60F6              MOV.L     @R15+,R0
4F66              LDS.L     @R15+,FPSCR
4F56              LDS.L     @R15+,FPUL
4F16              LDS.L     @R15+,MACL
4F06              LDS.L     @R15+,MACH
FBF9              FMOV.S    @R15+,FR11
FAF9              FMOV.S    @R15+,FR10
F9F9              FMOV.S    @R15+,FR9
F8F9              FMOV.S    @R15+,FR8
F7F9              FMOV.S    @R15+,FR7
F6F9              FMOV.S    @R15+,FR6
F5F9              FMOV.S    @R15+,FR5
F4F9              FMOV.S    @R15+,FR4
F3F9              FMOV.S    @R15+,FR3
F2F9              FMOV.S    @R15+,FR2
F1F9              FMOV.S    @R15+,FR1
F0F9              FMOV.S    @R15+,FR0
6EF6              MOV.L     @R15+,R14
002B              RTE       
0009              NOP       
0009              NOP       
1C00              MOV.L     R0,@(H'00:4,R12)
1126              MOV.L     R2,@(H'18:4,R1)
1C08              MOV.L     R0,@(H'20:4,R12)
000C              MOV.B     @(R0,R0),R0
長い!
それでは Renesas shc のコードと比べてみよう。
             _INT_CMT_CMI0:                   ; function: INT_CMT_CMI0
D28A                   MOV.L       L243+2,R2  ; _int_cmt_cmi0
424B                   JSR/N       @R2
005B                   RESBANK
002B                   RTE
0009                   NOP
これは!
もう驚くしかない。
レジスタ・バンクを使えばこんなに簡素になるということか?

驚いたところで解決にはならないので、対策を考える。
当然 Renesas shc のコードと同じように RESBANK を使うことにする。

コンパイルして実行!

何の問題もない。

とりあえず RESBANK を使えば問題なさそうだ。
これは、sh7262 (sh2a) だけの問題なのか?
それにしても RESBANK を使わない場合、割り込みで暴走するのはコンパイラのバグなのだろうか?
そのうち調べてみよう。


環境: (HEW Version 4.07.01.004) + (KPIT GNUSH v1001 Windows Tool Chain (ELF)) + (FRK-SH2A)

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このブログのタイトルは?(syslab と記入してください)

コメント:

トラックバック

このエントリのトラックバックURL: http://syslab.asablo.jp/blog/2010/04/27/5047735/tb