FRK-SH2A (4) 割り込み ― 2010年04月29日 22時15分45秒
KPIT GNUSH v1001 Windows Tool Chain で作成したプロジェクトは、
どうも割り込みの部分に不具合がありそうなので、その部分を見てみる。
それでは Renesas shc のコードと比べてみよう。
もう驚くしかない。
レジスタ・バンクを使えばこんなに簡素になるということか?
驚いたところで解決にはならないので、対策を考える。
当然 Renesas shc のコードと同じように RESBANK を使うことにする。
コンパイルして実行!
何の問題もない。
とりあえず RESBANK を使えば問題なさそうだ。
これは、sh7262 (sh2a) だけの問題なのか?
それにしても RESBANK を使わない場合、割り込みで暴走するのはコンパイラのバグなのだろうか?
そのうち調べてみよう。
環境: (HEW Version 4.07.01.004) + (KPIT GNUSH v1001 Windows Tool Chain (ELF)) + (FRK-SH2A)
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)
最近のコメント