• 検索結果がありません。

命令による例外 .1 命令による例外の種類

SH-2A、SH2A-FPU

3.7 命令による例外 .1 命令による例外の種類

例外処理を起動する命令には、表

3.8

に示すように、トラップ命令、スロット不当命令、一般不当 命令、整数除算例外、FPU例外があります。

3.8 命令による例外の種類

種類 要因となる命令 備考

トラップ命令 TRAPA

スロット不当命令 遅延分岐命令直後(遅延スロット)に配置さ れた未定義コード(含FPUモジュールスタ ンバイ時もしくはFPU非搭載品における FPU命令およびFPUに関するCPU命令お よびレジスタバンク非搭載品のレジスタバ ンク関連命令)、PCを書き換える命令、32 ビット命令、RESBANK命令、DIVS命令ま たはDIVU命令

遅延分岐命令 : JMP、JSR、BRA、BSR、

RTS、RTE、BF/S、BT/S、BSRF、BRAF レジスタバンク関連命令: RESBANK、

LDBANK、STBANK

PCを書き換える命令 : JMP、JSR、BRA、

BSR、RTS、RTE、BT、BF、TRAPA、

BF/S、BT/S、BSRF、BRAF、JSR/N、RTV/N 32ビット命令 : BAND.B、BANDNOT.B、

BCLR.B、BLD.B、BLDNOT.B、BOR.B、

BORNOT.B、BSET.B、BST.B、BXOR.B、

FMOV.S@disp12、FMOV.D@disp12、

MOV.B@disp12、MOV.W@disp12、

MOV.L@disp12、MOVI20、MOVI20S、

MOVU.B、MOVU.W

3.

例外処理

Rev.4.00 2011.02.22 3-10 R01US0031JJ0400

SH-2A、SH2A-FPU

種類 要因となる命令 備考

一般不当命令 遅延スロット以外にある未定義コード(含 FPUモジュールスタンバイ時もしくはFPU 非搭載品におけるFPU命令およびFPUに関 するCPU命令およびレジスタバンク非搭載 品のレジスタバンク関連命令)

ゼロ除算 DIVU、DIVS 整数除算例外

負の最大値÷(-1) DIVS FPU例外 IEEE754規格で定義された無効演算例外ま

たはゼロによる除算例外を引き起こす命 令、オーバフロー、アンダフローおよび不正 確例外を引き起こす可能性のある命令

FADD、FSUB、FMUL、FDIV、FMAC、

FCMP/EQ、FCMP/GT、FLOAT、FTRC、

FCNVDS、FCNVSD、FSQRT

3.7.2 トラップ命令

TRAPA

命令を実行すると、トラップ命令例外処理が開始されます。このとき、

CPU

は次のように

動作します。

1

TRAPA

命令で指定したベクタ番号に対応する例外サービスルーチン開始アドレスを、例外処

理ベクタテーブルから取り出します。

2

) ステータスレジスタ(

SR

)をスタックに退避します。

3

) プログラムカウンタ(

PC

)をスタックに退避します。退避する

PC

の値は、

TRAPA

命令で次 命令の先頭アドレスです。

4

) 例外処理ベクタテーブルから取り出したアドレスへジャンプして、プログラムの実行を開始 します。このときのジャンプは遅延分岐ではありません。

3.7.3 スロット不当命令

遅延分岐命令の直後に配置された命令のことを「遅延スロットに配置された命令」とよびます。遅 延スロットに配置された命令が未定義コードのとき、この未定義コードがデコードされるとスロット 不当命令例外処理が開始されます。また、遅延スロットに配置された命令が

PC

を書き換える命令の ときも、この

PC

を書き換える命令がデコードされるとスロット不当命令例外処理が開始されます。

さらに、FPU非搭載製品および

FPU

搭載製品で

FPU

をモジュールスタンバイ状態にしたときは、浮 動小数点命令および

FPU

に関する

CPU

命令は未定義コードとして扱われ、遅延スロットに配置され た場合、この命令がデコードされるとスロット不当命令例外処理が開始されます。

また、レジスタバンク非搭載品のレジスタバンク関連命令も未定義コードとして扱われ、遅延スロ ットに配置された場合、この命令がデコードされるとスロット不当命令例外処理が開始されます。

さらに、遅延スロットに配置された命令が

32

ビット命令、

RESBANK

命令、

DIVS

命令および

DIVU

命令のときも、この命令がデコードされるとスロット不当命令例外処理が開始されます。

スロット不当命令例外処理のとき、CPUは次のように動作します。

(1) 例外サービスルーチン開始アドレスを例外処理ベクタテーブルから取り出します。

(2) ステータスレジスタ(SR)をスタックに退避します。

(3) プログラムカウンタ(PC)をスタックに退避します。退避するPCの値は、未定義コード、

PCを書き換える命令、32ビット命令、RESBANK命令、DIVS命令、またはDIVU命令の直前

にある遅延分岐命令の飛び先アドレスです。

(4) 例外処理ベクタテーブルから取り出したアドレスへジャンプして、プログラムの実行を開始 します。このときのジャンプは遅延分岐ではありません。

3.

例外処理

Rev.4.00 2011.02.22 3-11 R01US0031JJ0400 SH-2A、SH2A-FPU

3.7.4 一般不当命令

遅延分岐命令の直後(遅延スロット)以外に配置された未定義コードをデコードすると、一般不当 命令例外処理が開始されます。また、

FPU

非搭載製品および

FPU

搭載製品で

FPU

をモジュールスタ ンバイ状態にしたときは、浮動小数点命令および

FPU

に関する

CPU

命令は未定義コードとして扱わ れ、遅延分岐命令の直後(遅延スロット)以外に配置された場合、この命令がデコードされると一般 不当命令例外処理が開始されます。

また、レジスタバンク非搭載品のレジスタバンク関連命令も未定義コードとして扱われ、遅延分岐 命令の直後(遅延スロット)以外に配置された場合、この命令がデコードされると一般不当命令例外 処理が開始されます。

一般不当命令例外処理時、

CPU

はスロット不当命令例外処理と同じ手順で動作します。ただし、

退避する

PC

の値は、スロット不当命令例外処理と異なり、この未定義コードの先頭アドレスになり ます。

3.7.5 整数除算例外

整数除算命令がゼロによる除算を実行した場合、または整数除算の結果がオーバフローしたとき、

整数除算例外が発生します。ゼロによる除算例外の要因となる命令は、DIVUと

DIVS

です。オーバ フロー例外の要因となる命令は

DIVS

のみで、負の最大値を-1で除算する場合にのみ発生します。整 数除算例外が発生すると

CPU

は次のように動作します。

(1) 発生した整数除算例外に対応する例外サービスルーチン開始アドレスを、例外処理ベクタテ ーブルから取り出します。

(2) ステータスレジスタ(SR)をスタックに退避します。

(3) プログラムカウンタ(PC)をスタックに退避します。退避するPCの値は、例外を発生した整 数除算命令の先頭アドレスです。

(4) 例外処理ベクタテーブルから取り出したアドレスへジャンプして、プログラムの実行を開始 します。このときのジャンプは遅延分岐ではありません。

3.7.6 FPU 例外

浮動小数点ステータスレジスタ(

FPSCR

)の

FPU

例外イネーブルフィールド(

Enable

)中の

V

Z

O

U

または

I

ビットがセットされているとき、

FPU

例外処理が発生します。これは浮動小数点演算

命令が

IEEE754

規格で定義された無効演算例外、ゼロによる除算例外、オーバフロー(可能性のある

命令)、アンダフロー(可能性のある命令)および不正確例外(可能性のある命令)を引き起こした ことを示します。

FPU

例外処理の発生要因となる浮動小数点演算命令には以下があります。

FADD

FSUB

FMUL

FDIV

FMAC

FCMP/EQ

FCMP/GT

FLOAT

FTRC

FCNVDS

FCNVSD

FSQRT

該当する

FPU

例外イネーブルビット(

Enable

)がセットされているときのみ、

FPU

例外処理が発 生します。

FPU

が浮動小数点演算による例外要因を検出すると、

FPU

の動作は中断されて

CPU

FPU

例外処理の発生を通知します。

CPU

は例外処理を開始すると次のように動作します。

1

) 発生した

FPU

例外処理に対応する例外サービスルーチン開始アドレスを例外処理ベクタテー ブルから取り出します。

2

) ステータスレジスタ(

SR

)をスタックに退避します。

3

) プログラムカウンタ(

PC

)をスタックに退避します。退避する

PC

の値は最後に実行した命令 の次の命令の先頭アドレスです。

4

) 例外処理ベクタテーブルから取り出したアドレスへジャンプして、プログラムの実行を開始 します。このときのジャンプは遅延分岐ではありません。

FPSCR

の例外フラグフィールド(

Flag

)は、

FPU

例外処理が受け付けられたか否かにかかわらず常

3.

例外処理

Rev.4.00 2011.02.22 3-12 R01US0031JJ0400

SH-2A、SH2A-FPU

に更新され、ユーザが明示的に命令でクリアするまでセットされたままです。

FPSCRの要因フィール

ド(Cause)は浮動小数点演算命令が実行されるごとに変化します。

また、FPSCRレジスタのFPU例外イネーブルフィールド(Enable)中のVビットがセットされ、か つFPSCRのQISビットがセットされているとき、

qNaNもしくは±∞を浮動小数点演算命令のソースに

入力するとFPU例外処理が発生します。

関連したドキュメント