更新日: 2016 年 8 月 18 日
68060を斬る!!(第6回)
説明
MC68060 の解説記事です。月刊電脳倶楽部 117 号(1998 年 2 月号)から 139 号(1999 年 12 月号)にかけて読み物横町で不定期連載していました。転載にあたって内容の再考証は行っていません。ご了承下さい。
68060_06.txt
──────────────────────────────────── 68060を斬る!! 第6回 鎌田誠 ──────────────────────────────────── 引き続き、例外処理です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 未実装命令例外 ──────────────────────────────────── 68060 の未実装命令例外は、大きく分けて次の 8 種類があります。 ・未実装整数 ・未実装実効アドレス ・未実装 A ライン ・未実装 F ライン ・浮動小数点禁止 ・浮動小数点未実装命令 ・浮動小数点未対応データ型 ・不当命令 ●未実装整数例外 未実装整数例外はベクタ番号 61 に割り当てられており、以下の命令を実行し ようとした場合に発生します。 ・クワドワード(64 ビット)のオペランドを扱う命令(64 ビットの結 果を得る MULS/MULU および 64 ビットの被除数を使う DIVS/DIVU) ・CAS2 ・CHK2 ・CMP2 ・CAS(オペランドがミスアラインの場合) ・MOVEP 未実装整数例外の例外スタックフレームのフォーマットは 0 番で、例外スタ ックフレームの PC のフィールドには例外を発生させた命令のアドレスが入りま す。 ●未実装実効アドレス例外 未実装実効アドレス例外はベクタ番号 60 に割り当てられており、以下の命令 を実行しようとした場合に発生します。 ・任意の浮動小数点命令で、ソースオペランドが拡張精度のイミディエ イトのもの(F<op>.X #imm,FPn) ・複数の浮動小数点制御レジスタへの FMOVEM 命令で、ソースオペラン ドがイミディエイトのもの(FMOVEM.L #imm,<control-register-list>) ・浮動小数点レジスタに対する FMOVEM 命令で、動的レジスタリストを 使うもの(FMOVEM.X Dn,<ea> または FMOVEM.X <ea>,Dn) 通常、これらの命令は、未実装実効アドレス例外ハンドラに登録されたソフト ウェアエミュレーションルーチンによってエミュレートされます。しかし、これ らはいずれも例外が発生しない命令の並びに簡単に置き換えることができる命令 ですから、68060 用のプログラムを書く場合は使うべきではありません。 未実装実効アドレス例外の例外スタックフレームのフォーマットは 0 番で、 例外スタックフレームの PC のフィールドには例外を発生させた命令のアドレス が入ります。 なお、FPIAR の内容は変化しません。この例外については、浮動小数点ユニッ ト(FPU)の回でも説明します。 ●未実装 A ライン例外 未実装 A ライン例外はベクタ番号 10 に割り当てられており、命令コードの ビット 12〜15 が $A(2 進数では 1010)になっている命令(これを A ライン 命令と呼ぶ)を実行しようとした場合に発生します。 A ライン命令はユーザが命令を登録できるように Motorola が使用しないこと が保証されています。X680x0 では、SX-WINDOW がシステムコール用に A ライン 命令を使用しています。 未実装実効アドレス例外の例外スタックフレームのフォーマットは 0 番で、 例外スタックフレームの PC のフィールドには例外を発生させた A ライン命令 のアドレスが入ります。 ●浮動小数点未対応データ型例外 浮動小数点未対応データ型例外はベクタ番号 55 に割り当てられており、 68020〜68030 用のコプロセッサ 68881 がサポートしている命令で、68060 の FPU が禁止されておらず(PCR のビット 1 が 0)、68060 の FPU がサポートし ている命令で、命令に与えられたデータが 68060 の FPU がサポートしていない 型だった場合に発生します。 浮動小数点未対応データ型例外の例外スタックフレームのフォーマットは 0 番、2 番、3 番のいずれかで、例外スタックフレームの PC のフィールドには例 外を発生させた浮動小数点命令の次の命令の論理アドレスが入ります。 この例外については、浮動小数点ユニット(FPU)の回でも説明します。 ●浮動小数点未実装命令例外 浮動小数点未実装命令例外は浮動小数点禁止例外と同じベクタ番号 11 に割り 当てられており、68020〜 68030 用のコプロセッサ 68881 がサポートしている 命令で、68060 の FPU が禁止されておらず(PCR のビット 1 が 0)、68060 の FPU がサポートしていない命令を実行しようとした場合に発生します。 浮動小数点未実装命令例外の例外スタックフレームのフォーマットは 2 番で、 例外スタックフレームの PC のフィールドには例外を発生させた浮動小数点命令 の次の命令の論理アドレスが入ります。 この例外については、浮動小数点ユニット(FPU)の回でも説明します。 ●浮動小数点禁止例外 浮動小数点禁止例外は浮動小数点未実装命令例外と同じベクタ番号 11 に割り 当てられており、68020〜 68030 用のコプロセッサ 68881 がサポートしている 命令で、68060 の FPU が禁止されている(PCR のビット 1 が 1)または FPU を搭載していない 68LC060 または 68EC060 で実行しようとした場合に発生しま す。 浮動小数点禁止例外の例外スタックフレームのフォーマットは 4 番で、例外 スタックフレームの PC のフィールドには例外を発生させた浮動小数点命令の次 の命令の論理アドレスが入ります。また、命令のアドレスのフィールド (SP+12) には、エミュレーションのために、例外を発生させた浮動小数点命令の次の命令 の論理アドレスが入ります。 例外スタックフレームの実効アドレスのフィールド (SP+8) には、例外を発生 させた浮動小数点命令のソースまたはデスティネーションのオペランドの実効ア ドレスが入ります。このフィールドはオペランドがメモリだった場合にそのアド レスが格納されますが、オペランドが浮動小数点レジスタまたはデータレジスタ の場合は 0 が入ります。 アドレッシングモードが (An)+ または -(An) の命令で例外が発生した場合は An の内容が更新されずに例外処理が開始されるので、エミュレーションソフト ウェアで An を更新する必要があります。 アドレッシングモードが -(An) でオペレーションサイズが拡張精度(.X)の 命令で例外が発生したとき、例外スタックフレームの実効アドレスのフィールド には An-12 ではなくて An-4 の値が格納されています。この点が 68LC060/68EC060 と 68LC040/68EC040 の違いになっているので、エミュレーシ ョンソフトウェアを作成する場合に注意する必要があります。 ●未実装 F ライン例外 未実装 F ライン例外はベクタ番号 11 に割り当てられており、命令コードの ビット 12〜15 が $F(2 進数では 1111)になっている命令(これを F ライン 命令と呼ぶ)で、68060 がサポートしていない命令コード(PTEST など)で尚且 つ 68020〜 68030 用のコプロセッサ 68881 の命令でもないものを実行しようと した場合に発生します。 未実装 F ライン例外の例外スタックフレームのフォーマットは 0 番で、例外 スタックフレームの PC のフィールドには、実行しようとした F ライン命令の 論理アドレスが入ります。 ●不当命令例外 不当命令例外はベクタ番号 4 に割り当てられており、68060 がサポートして いない命令コードで上記のいずれの例外にも該当しないものを実行しようとした 場合に発生します。また、BKPT 命令によるブレークポイント処理の最終段階で も発生します。また、MOVEC 命令で 68060 がサポートしていない制御レジスタ 番号を指定した場合にも発生します。 68000〜68060 で、ILLEGAL 命令($4AFC)が、常に不当命令例外を発生させる 命令として定義されています。 不当命令例外の例外スタックフレームのフォーマットは 0 番で、例外スタッ クフレームの PC のフィールドには、実行しようとした不当命令の論理アドレス が入ります。 ━─────────────────────────────────── 目次 ──────────────────────────────────── 第1回(月刊 117 号) <本編> はじめに/パイプラインとは/パイプラインの利点/パイプラインの欠 点/分岐予測/分岐キャッシュを用いた分岐予測/68060 のパイプライ ン/68060 の命令フェッチパイプライン/68060 における分岐予測/ 68060 の命令実行パイプライン <68060 関連の話題> 060turbo における SIMM の効果/Motorola のホームページを覗いてみ よう/エラッタ/マスクセットの見分けかた/HAS060.X/060pcr5.x ━─────────────────────────────────── 第2回(月刊 119 号) <本編> スーパースカラ(superscalar)/ディスパッチテスト(1)/ディス パッチテスト(2)/ディスパッチテスト(3)/ディスパッチテスト (4)/ディスパッチテスト(5)/ディスパッチテスト(6) <68060 関連の話題> XL/Image/060turbo が少し速くなったゾ/mpeg2play.x <68060 の命令のスーパースカラ分類表> スーパースカラ分類の意味/整数命令/特権命令/浮動小数点命令/参 考文献 ━─────────────────────────────────── 第3回(月刊 120 号) <本編> 例外処理/割り込み/例外ハンドラ/例外処理の流れ/ダブルバスフォ ルト/例外スタックフレーム/例外ベクタテーブル <質問箱> データキャッシュが効かない場合のメモリアクセスのクロック数/デー タキャッシュの有効な利用方法/SharpenHimemPatch の副作用? <68060 関連の話題> 060turbo.sys v0.54/060turbo の ROM の不具合 ━─────────────────────────────────── 第4回(月刊 122 号) <本編> 例外スタックフレームの構造/アクセスフォルト ━─────────────────────────────────── 第5回(月刊 124 号) <本編> 分岐予測エラー/アドレスエラー/命令による例外 ──────────────────────────────────── (EOF)