更新日: 2016 年 8 月 18 日
MC68060 の命令の実行時間
説明
MC68060 の命令のスーパースカラ分類表と個々の命令の所要クロック数をまとめた資料です。月刊電脳倶楽部 119 号(1998 年 4 月号)と 123 号(1998 年 8 月号)のアセンブラ講座の資料室に収録しました。転載にあたって内容の再考証は行っていません。ご了承下さい。
補足説明
メモリアクセスに関連するウェイトが考慮されていないので、この表だけでは厳密な所要クロック数は求まりません。言い換えると、割り込みを禁止した上でキャッシュが 100%ヒットした場合のクロック数を示していると言うことができます。メモリアクセスのウェイトはときとして非常に大きくなりますが、例えば、X68030 のグラフィック VRAM の膨大な書き込みウェイトを活用している例として、k_blend.wl などが参考になるかも知れません。
mc68060t.txt
──────────────────────────────────── MC68060 の命令の実行時間 ──────────────────────────────────── ●実効アドレスの計算時間 後述の「●各命令の実行時間」で実行時間に「+ ea」が付加されているものは、 オペランドの <ea> の部分のアドレッシングモードによって命令の実行時間に実 効アドレスの計算時間を加える必要があります。 アドレッシングモード別の実効アドレスの計算時間は次の通りです。 フルフォーマットでないとき(68000 でも使えるアドレッシングのとき) ┌──────────────────────────────┐ │Dn データレジスタ直接 │ │ │ │An アドレスレジスタ直接 │ │ │ │(An) アドレスレジスタ間接 │ │ │ │(An)+ アドレスレジスタ間接ポストインクリメント付き│ │ │ │-(An) アドレスレジスタ間接プレデクリメント付き │ │ │ │(d16,An) アドレスレジスタ間接ディスプレースメント付き│ │ │ │(d8,An,Xi*SF) アドレスレジスタ間接インデックスおよび │ │ バイトディスプレースメント付き │ │ │ │(xxx).W 絶対ショート │ │ │ │(xxx).L 絶対ロング │ │ │ │(d16,PC) プログラムカウンタ・ディスプレースメント付き│ │ │ │(d8,PC,Xi*SF) プログラムカウンタ・インデックスおよび │ │ バイトディスプレースメント付き │ │ │ │#<data> イミディエイト │ └──────────────────────────────┘ ⇒ + ea = + 0 フルフォーマットのとき(メモリ間接アドレッシングを除く) ┌──────────────────────────────┐ │(bd,An,Xi*SF) アドレスレジスタ間接インデックスおよび │ │ (16または32ビット)ディスプレースメント付き │ │ │ │(bd,PC,Xi*SF) プログラムカウンタ・インデックスおよび │ │ (16または32ビット)ディスプレースメント付き │ └──────────────────────────────┘ ⇒ + ea = + 1 フルフォーマットのメモリ間接アドレッシングのとき ┌──────────────────────────────┐ │([bd,An,Xn],od) メモリ間接プレインデックスモード │ │ │ │([bd,An],Xn,od) メモリ間接ポストインデックスモード │ │ │ │([bd,PC,Xn],od) プログラムカウンタメモリ間接 │ │ プレインデックスモード │ │ │ │([bd,PC],Xn,od) プログラムカウンタメモリ間接 │ │ ポストインデックスモード │ └──────────────────────────────┘ ⇒ + ea = + 3 ●各命令の実行時間 「⇒」の右側が命令の実行時間です。 下記の命令の実行時間には、メモリアクセスの所要時間が含まれていません。 メモリアクセスの所要時間はキャッシュがヒットしたとき 0 ですが、それ以外 の場合は別途計算する必要があります。 オペレーションサイズの部分が「*」になっているものは、オペレーションサ イズが実行時間に影響しないことを意味しています。 「Rn」は、「Dn」と「An」の 2 つをまとめた表記です。 実行時間に「+ ea」が付加されているものは、前述の「実効アドレスの計算時 間」を加えることを意味しています。前述の通り、68000 でも使えるアドレッシ ングモードの場合は実効アドレスの計算時間が 0 なので、その場合は「+ ea」 を無視して構いません。 「src_ea」は「ソースオペランドの実効アドレスの計算時間」、「dst_ea」は 「デスティネーションオペランドの実効アドレスの計算時間」です。これらの実 効アドレスの計算時間は「+ ea」の場合と同じです。 命令の実行時間に「以下」が付加されているものは、命令の実行時間が最大値 であることを示しています。 ・MOVE 命令 MOVE.* Rn,<ea> MOVE.* <ea>,Dn MOVEA.* <ea>,An ⇒ 1 + ea MOVE.* #<data>,<ea> <ea> = Rn,(An),(An)+,-(An) ⇒ 1 + ea MOVE.* <src_ea>,<dst_ea> 上記以外 ⇒ 2 + src_ea + dst_ea ・MOVE16 命令 MOVE16 <src_ea>,<dst_ea> ソースオペランドのアクセスがデータキャッシュにヒットしたとき ⇒ 11 上記以外 ⇒ 18 ・標準命令 ADDA.* <ea>,An CMPA.* <ea>,An SUBA.* <ea>,An <ea> = (Ay)+,-(Ay) かつ Ay = An ⇒ 2 + ea <ea> = 上記以外 ⇒ 1 + ea ADD.* <ea>,Dn AND.* <ea>,Dn CMP.* <ea>,Dn EOR.* <ea>,Dn OR.* <ea>,Dn SUB.* <ea>,Dn ⇒ 1 + ea ADD.* Dn,<ea> AND.* Dn,<ea> CMP.* Dn,<ea> EOR.* Dn,<ea> OR.* Dn,<ea> SUB.* Dn,<ea> ⇒ 1 + ea DIVS.W <ea>,Dn DIVU.W <ea>,Dn ⇒ 22 + ea 以下 DIVS.L <ea>,Dn DIVU.L <ea>,Dn <ea> = Dn,(An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 38 + ea <ea> = 上記以外 ⇒ 39 + ea MULS.W <ea>,Dn MULU.W <ea>,Dn ⇒ 2 + ea MULS.L <ea>,Dn MULU.L <ea>,Dn <ea> = Dn,(An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 2 + ea <ea> = 上記以外 ⇒ 3 + ea ・イミディエイト命令 ADDI.* #<data>,<ea> ANDI.* #<data>,<ea> CMPI.* #<data>,<ea> EORI.* #<data>,<ea> ORI.* #<data>,<ea> SUBI.* #<data>,<ea> <ea> = Dn,(An),(An)+,-(An) ⇒ 1 <ea> = 上記以外 ⇒ 2 + ea ADDQ.* #<data>,<ea> SUBQ.* #<data>,<ea> ⇒ 1 + ea MOVEQ.L #<data>,Dn ⇒ 1 ・単一オペランド命令 CAS.* Dc,Du,<ea> <ea> = Rn,(An),(An)+,-(An),(d16,An) ⇒ 19 <ea> = 上記以外 ⇒ 20 + ea CLR.* <ea> NBCD.B <ea> NEG.* <ea> NEGX.* <ea> NOT.* <ea> Scc.B <ea> TST.* <ea> ⇒ 1 + ea TAS.B <ea> <ea> = Dn ⇒ 1 + ea <ea> = 上記以外 ⇒ 17 + ea ・シフト,ローテート命令 ASL.* #<data>,<ea> ASR.* #<data>,<ea> LSL.* #<data>,<ea> LSR.* #<data>,<ea> ROL.* #<data>,<ea> ROR.* #<data>,<ea> ROXL.* #<data>,<ea> ROXR.* #<data>,<ea> ⇒ 1 + ea ・ビット操作命令とビットフィールド命令 BCHG.* Dn,<ea> BCLR.* Dn,<ea> BSET.* Dn,<ea> BTST.* Dn,<ea> ⇒ 1 + ea BCHG.* #<data>,<ea> BCLR.* #<data>,<ea> BSET.* #<data>,<ea> BTST.* #<data>,<ea> <ea> = Dn,(An),(An)+,-(An) ⇒ 1 <ea> = 上記以外 ⇒ 2 + ea BFCHG <ea>{offset:width} BFCLR <ea>{offset:width} BFSET <ea>{offset:width} <ea> = Dn,(An),(d16,An) 4 バイトまで ⇒ 8 5 バイト ⇒ 12 <ea> = 上記以外 4 バイトまで ⇒ 9 + ea 5 バイト ⇒ 13 + ea BFEXTS <ea>{offset:width},Dn BFEXTU <ea>{offset:width},Dn BFTST <ea>{offset:width} <ea> = Dn,(An),(d16,An) 4 バイトまで ⇒ 6 5 バイト ⇒ 8 <ea> = 上記以外 4 バイトまで ⇒ 7 + ea 5 バイト ⇒ 9 + ea BFFFO <ea>{offset:width},Dn <ea> = Dn,(An),(d16,An) 4 バイトまで ⇒ 9 5 バイト ⇒ 11 <ea> = 上記以外 4 バイトまで ⇒ 10 + ea 5 バイト ⇒ 12 + ea BFINS Dn,<ea>{offset:width} <ea> = Dn,(An),(d16,An) ⇒ 6 <ea> = 上記以外 ⇒ 7 + ea ・分岐命令 Bcc.* <label> 分岐予測があって予測が正しくて分岐するとき ⇒ 0 分岐予測があって予測が正しくて分岐しないとき 分岐予測がなくて前方分岐で分岐しないとき ⇒ 1 分岐予測がなくて後方分岐で分岐するとき ⇒ 3 分岐予測があって予測が間違っていたとき 分岐予測がなくて前方分岐で分岐するとき 分岐予測がなくて後方分岐で分岐しないとき ⇒ 7 BRA.* <label> 分岐予測があるとき ⇒ 0 分岐予測がないとき ⇒ 3 BSR.* <label> 分岐予測があるとき ⇒ 1 分岐予測がないとき ⇒ 3 DBcc.W Dn,<label> 分岐予測があって予測が正しかったとき ⇒ 2 分岐予測がなくて分岐するとき ⇒ 3 分岐予測があって予測が間違っていたとき 分岐予測がなくて分岐しないとき ⇒ 8 DBRA.W Dn,<label> 分岐予測があって予測が正しかったとき ⇒ 1 分岐予測がなくて分岐するとき ⇒ 3 分岐予測があって予測が間違っていたとき 分岐予測がなくて分岐しないとき ⇒ 7 FBcc.* <label> 分岐予測があって予測が正しかったとき 分岐予測がなくて分岐しないとき ⇒ 2 分岐予測があって予測が間違っていたとき 分岐予測がなくて分岐するとき ⇒ 8 JMP <ea> <ea> = (d16,PC),(xxx).W,(xxx).L 分岐予測があるとき ⇒ 0 分岐予測がないとき ⇒ 3 <ea> = 上記以外 ⇒ 5 + ea JSR <ea> <ea> = (d16,PC),(xxx).W,(xxx).L 分岐予測があるとき ⇒ 1 分岐予測がないとき ⇒ 3 <ea> = 上記以外 ⇒ 5 + ea RTD #<data> RTS ⇒ 7 RTE ⇒ 17 RTR ⇒ 8 ・LEA,PEA,MOVEM 命令 LEA.L <ea>,An ⇒ 1 + ea PEA.L <ea> <ea> = (An),(xxx).W ⇒ 1 <ea> = 上記以外 ⇒ 2 + ea MOVEM.* <ea>,<register-list> <ea> = (An),(An)+,(d16,An),(d16,PC) ⇒ n <ea> = 上記以外 ⇒ 1 + n + ea n = 転送されるレジスタ数 MOVEM.* <register-list>,<ea> <ea> = (An),-(An),(d16,An) ⇒ n <ea> = 上記以外 ⇒ 1 + n + ea n = 転送されるレジスタ数 ・多倍精度命令 ADDX.* Dy,Dx SUBX.* Dy,Dx ABCD.B Dy,Dx SBCD.B Dy,Dx ⇒ 1 ADDX.* -(Ay),-(Ax) CMPM.* (Ay)+,(Ax)+ SUBX.* -(Ay),-(Ax) ABCD.B -(Ay),-(Ax) SBCD.B -(Ay),-(Ax) ⇒ 2 ・SR(ステータスレジスタ),MOVES,その他の命令 ANDI.W #<data>,SR EORI.W #<data>,SR ⇒ 12 MOVE.W SR,<ea> ⇒ 1 + ea MOVE.W <ea>,SR ⇒ 12 + ea ORI.W #<data>,SR ⇒ 5 + ea MOVES.* <ea>,Rn MOVES.* Rn,<ea> <ea> = (An),(An)+,-(An),(d16,An) ⇒ 1 <ea> = その他 ⇒ 2 + ea ANDI.B #<data>,CCR EORI.B #<data>,CCR EXG.L Ry,Rx EXT.* Dn EXTB.L Dn ORI.B #<data>,CCR ⇒ 1 CHK.* <ea>,Dn トラップしなかったとき ⇒ 2 + ea CINVA <caches> ⇒ 17 以下 CINVL <caches>,(An) ⇒ 18 以下 CINVP <caches>,(An) ⇒ 274 以下 CPUSHA <caches> ⇒ 5394 以下 CPUSHL <caches> ⇒ 26 以下 CPUSHP <caches>,(An) ⇒ 2838 以下 LINK.* An,#<data> ⇒ 2 LPSTOP.W #<data> ⇒ 15 MOVE.W CCR,<ea> MOVE.W <ea>,CCR ⇒ 1 + ea MOVE.L USP,An ⇒ 1 MOVE.L An,USP ⇒ 2 MOVEC.L Rc,Rn Rc = SFC,DFC,USP,VBR,PCR ⇒ 12 Rc = CACR,TC,ITTR0,ITTR1,DTTR0,DTTR1,BUSCR,URP,SRP ⇒ 15 MOVEC.L Rn,Rc Rc = SFC,DFC,USP,VBR,PCR ⇒ 11 Rc = CACR,TC,ITTR0,ITTR1,DTTR0,DTTR1,BUSCR,URP,SRP ⇒ 14 NOP ⇒ 9 PACK -(Ay),-(Ax),#<data> PACK Dy,Dx,#<data> ⇒ 2 PLPA (An) ATC がヒットしたとき ⇒ 15 ATC がミスしたとき ⇒ 28 PFLUSH (An) PFLUSHN (An) ⇒ 18 PFLUSHAN PFLUSHA ⇒ 33 RESET ⇒ 520 STOP #<data> ⇒ 8 SWAP.W Dn ⇒ 1 TRAPcc TRAPV トラップしなかったとき ⇒ 1 UNLK An ⇒ 1 UNPK -(Ay),-(Ax),#<data> UNPK Dy,Dx,#<data> ⇒ 2 ・FPU 命令 FPU 命令の実行時間に「+ fea」が付加されているものには、以下の時間を加 えます。 オペレーションサイズが .B/.W/.L のいずれか ⇒ fea = 3 オペレーションサイズが .X ⇒ fea = 2 オペレーションサイズが .D でソースオペランドがイミディエイト ⇒ fea = 1 上記以外 ⇒ fea = 0 FABS.* <ea>,FPn FDABS.* <ea>,FPn FSABS.* <ea>,FPn FCMP.* <ea>,FPn FMOVE.* <ea>,FPn FDMOVE.* <ea>,FPn FSMOVE.* <ea>,FPn FMOVE.* FPn,<ea> FNEG.* <ea>,FPn FDNEG.* <ea>,FPn FSNEG.* <ea>,FPn FTST.* <ea> <ea> = FPn ⇒ 1 <ea> = Dn ⇒ 3 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 1 + fea <ea> = 上記以外 ⇒ 2 + ea + fea FADD.* <ea>,FPn FDADD.* <ea>,FPn FSADD.* <ea>,FPn FSGLMUL.* <ea>,FPn FMUL.* <ea>,FPn FDMUL.* <ea>,FPn FSMUL.* <ea>,FPn FSUB.* <ea>,FPn FDSUB.* <ea>,FPn FSSUB.* <ea>,FPn <ea> = FPn ⇒ 3 <ea> = Dn ⇒ 5 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 3 + fea <ea> = 上記以外 ⇒ 4 + ea + fea FDIV.* <ea>,FPn FDDIV.* <ea>,FPn FSDIV.* <ea>,FPn FSGLDIV.* <ea>,FPn <ea> = FPn ⇒ 37 <ea> = Dn ⇒ 39 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 37 + fea <ea> = 上記以外 ⇒ 38 + ea + fea FMOVE.L <ea>,FPCR <ea> = Dn ⇒ 8 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 6 + fea <ea> = 上記以外 ⇒ 7 + ea + fea FMOVE.L FPCR,<ea> <ea> = Dn ⇒ 4 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 2 <ea> = 上記以外 ⇒ 3 + ea FINT.* <ea>,FPn FINTRZ.* <ea>,FPn <ea> = FPn ⇒ 3 <ea> = Dn ⇒ 4 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC),(d8,An,Xi*SF),(d8,PC,Xi*SF) ⇒ 3 + fea <ea> = 上記以外 ⇒ 4 + ea + fea FMOVEM.X <ea>,<register-list> <ea> = (An),(An)+,(d16,An),(d16,PC) ⇒ 1 + 3n <ea> = 上記以外 ⇒ 2 + 3n + ea n = 転送されるレジスタ数 FMOVEM.X <register-list>,<ea> <ea> = (An),-(An),(d16,An),(d16,PC) ⇒ 1 + 3n <ea> = 上記以外 ⇒ 2 + 3n + ea n = 転送されるレジスタ数 FSQRT.* <ea>,FPn <ea> = FPn ⇒ 68 <ea> = Dn ⇒ 70 <ea> = (An),(An)+,-(An),(d16,An),(d16,PC) ⇒ 68 + fea <ea> = 上記以外 ⇒ 69 + ea + fea FSAVE <ea> ⇒ 3 FRESTORE <ea> ⇒ 6 FMOVEM.L <ea>,<register-list> ⇒ 7 FMOVEM.L <register-list>,<ea> ⇒ 5 ・例外 リセット RSTI がネゲートされてから最初の命令が OEP に入るまで ⇒ 45 バスエラー アドレスエラー 不当命令 特権違反 トレース ライン A エミュレータ ライン F エミュレータ 未実装実効アドレス 未実装整数命令 未実装浮動小数点 TRAP ⇒ 19 TRAPV TRAPcc トラップしたとき ⇒ 19 0 による除算 ⇒ 20 + ea CHK.* <ea>,Dn トラップしたとき ⇒ 20 + ea フォーマットエラー ⇒ 23 割り込み オートベクタまたは外部ベクタの取得のウェイトが 0 と仮定する ⇒ 23 FP 比較不能時の分岐 ⇒ 21 FP 不正確な結果 FP 0 による除算 FP アンダーフロー FP オペランドエラー FP オーバーフロー FP シグナリング NAN 浮動小数点命令実行後例外が発生した場合 ⇒ 18 上記以外 ⇒ 19 FP 未実装データ型 ⇒ 19 ●スーパースカラ分類の意味 68060 の命令は、スーパースカラに関して次の 4 通りに分類されます。 ・pOEP|sOEP pOEP と sOEP のいずれでも動作し、pOEP で動作する場合に は同時に sOEP に pOEP|sOEP の命令が入ることが許されてい る命令です。単純な転送と整数演算、論理演算、シフト・ロー テート命令などがこれに分類されます。 ・pOEP-but allows-sOEP pOEP だけで動作するが、同時に sOEP に pOEP|sOEP の命令 が入ることが許されている命令です。浮動小数点命令はこれに 分類されます。 ・pOEP-until-last pOEP だけで動作する複数クロックの命令で、この命令の最 後 1 クロックに限って sOEP に pOEP|sOEP の命令が入ること が許されている命令です。メモリ-メモリ転送、イミディエイ ト、ビット操作命令などがこれに分類されます。 ・pOEP-only pOEP だけで動作し、この命令の動作中は sOEP が使えなく なる命令です。上記以外の命令がこれに分類されます。 上記の分類に従い、次の組み合わせの場合に限って 2 つの命令を同時に実行 できます。 ┌───────────┬───────────┐ │ 1 番目の命令 │ 2 番目の命令 │ ├───────────┼───────────┤ │pOEP|sOEP │pOEP|sOEP │ │ │ │ │pOEP-but allows-sOEP │pOEP|sOEP │ │ │ │ │pOEP-until-last │pOEP|sOEP │ └───────────┴───────────┘ 具体的なスーパースカラ分類は以下の通りです。 ●整数命令のスーパースカラ分類表 ┏━━━━━━━━━━━━┯━━━━━━━━━━━━┓ ┃ 命令 │ スーパースカラ分類 ┃ ┣━━━━━━━━━━━━┿━━━━━━━━━━━━┫ ┃ABCD │pOEP-only ┃ ┠────────────┼────────────┨ ┃ADD │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ADDA │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ADDI <ea>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ADDI <ea>,(Ax) │pOEP|sOEP ┃ ┃ADDI <ea>,(Ax)+ │ ┃ ┃ADDI <ea>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃ADDI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃ADDQ │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ADDX │pOEP-only ┃ ┠────────────┼────────────┨ ┃AND │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ANDI <ea>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ANDI <ea>,(Ax) │pOEP|sOEP ┃ ┃ANDI <ea>,(Ax)+ │ ┃ ┃ANDI <ea>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃ANDI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃ANDI to CCR │pOEP-only ┃ ┠────────────┼────────────┨ ┃ASL │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ASR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃Bcc │pOEP-only ┃ ┠────────────┼────────────┨ ┃BCHG Dy,<ea> │pOEP-only ┃ ┠────────────┼────────────┨ ┃BCHG #<imm>,<ea> │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃BCLR Dy,<ea> │pOEP-only ┃ ┠────────────┼────────────┨ ┃BCLR #<imm>,<ea> │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃BFCHG │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFCLR │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFEXTS │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFEXTU │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFFFO │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFINS │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFSET │pOEP-only ┃ ┠────────────┼────────────┨ ┃BFTST │pOEP-only ┃ ┠────────────┼────────────┨ ┃BKPT │pOEP-only ┃ ┠────────────┼────────────┨ ┃BRA │pOEP-only ┃ ┠────────────┼────────────┨ ┃BSET Dy,<ea> │pOEP-only ┃ ┠────────────┼────────────┨ ┃BSET #<imm>,<ea> │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃BSR │pOEP-only ┃ ┠────────────┼────────────┨ ┃BTST Dy,<ea> │pOEP-only ┃ ┠────────────┼────────────┨ ┃BTST #<imm>,<ea> │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃CAS │pOEP-only ┃ ┠────────────┼────────────┨ ┃CHK │pOEP-only ┃ ┠────────────┼────────────┨ ┃CLR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃CMP │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃CMPA │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃CMPI <ea>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃CMPI <ea>,(Ax) │pOEP|sOEP ┃ ┃CMPI <ea>,(Ax)+ │ ┃ ┃CMPI <ea>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃CMPI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃CMPM │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃DBcc │pOEP-only ┃ ┠────────────┼────────────┨ ┃DIVS.L │pOEP-only ┃ ┠────────────┼────────────┨ ┃DIVS.W │pOEP-only ┃ ┠────────────┼────────────┨ ┃DIVU.L │pOEP-only ┃ ┠────────────┼────────────┨ ┃DIVU.W │pOEP-only ┃ ┠────────────┼────────────┨ ┃EOR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃EORI <ea>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃EORI <ea>,(Ax) │pOEP|sOEP ┃ ┃EORI <ea>,(Ax)+ │ ┃ ┃EORI <ea>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃EORI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃EORI to CCR │pOEP-only ┃ ┠────────────┼────────────┨ ┃EXG │pOEP-only ┃ ┠────────────┼────────────┨ ┃EXT │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃EXTB.L │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ILLEGAL │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃JMP │pOEP-only ┃ ┠────────────┼────────────┨ ┃JSR │pOEP-only ┃ ┠────────────┼────────────┨ ┃LEA │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃LINK │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃LSL │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃LSR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MOVE <ea>,Rx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MOVE Ry,<ea> │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MOVE <mem>y,<mem>x │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃MOVE #<imm>,<mem>x │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃MOVEA │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MOVE from CCR │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVE to CCR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MOVE16 │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVEM │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVEQ │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃MULS.L │pOEP-only ┃ ┠────────────┼────────────┨ ┃MULS.W │pOEP-only ┃ ┠────────────┼────────────┨ ┃MULU.L │pOEP-only ┃ ┠────────────┼────────────┨ ┃MULU.W │pOEP-only ┃ ┠────────────┼────────────┨ ┃NBCD │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃NEG │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃NEGX │pOEP-only ┃ ┠────────────┼────────────┨ ┃NOP │pOEP-only ┃ ┠────────────┼────────────┨ ┃NOT │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃OR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ORI #<imm>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ORI #<imm>,(Ax) │pOEP|sOEP ┃ ┃ORI #<imm>,(Ax)+ │ ┃ ┃ORI #<imm>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃ORI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃ORI to CCR │pOEP-only ┃ ┠────────────┼────────────┨ ┃PACK │pOEP-only ┃ ┠────────────┼────────────┨ ┃PEA │pOEP-only ┃ ┠────────────┼────────────┨ ┃ROL │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ROR │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃ROXL │pOEP-only ┃ ┠────────────┼────────────┨ ┃ROXR │pOEP-only ┃ ┠────────────┼────────────┨ ┃RTD │pOEP-only ┃ ┠────────────┼────────────┨ ┃RTR │pOEP-only ┃ ┠────────────┼────────────┨ ┃RTS │pOEP-only ┃ ┠────────────┼────────────┨ ┃SBCD │pOEP-only ┃ ┠────────────┼────────────┨ ┃Scc │pOEP-but-allows-sOEP ┃ ┠────────────┼────────────┨ ┃SUB │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃SUBA │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃SUBI <ea>,Dx │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃SUBI <ea>,(Ax) │pOEP|sOEP ┃ ┃SUBI <ea>,(Ax)+ │ ┃ ┃SUBI <ea>,-(Ax) │ ┃ ┠────────────┼────────────┨ ┃SUBI (その他) │pOEP-until-last ┃ ┠────────────┼────────────┨ ┃SUBQ │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃SUBX │pOEP-only ┃ ┠────────────┼────────────┨ ┃SWAP │pOEP-only ┃ ┠────────────┼────────────┨ ┃TAS │pOEP-only ┃ ┠────────────┼────────────┨ ┃TRAP │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃TRAPF │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃TRAPcc (その他) │pOEP-only ┃ ┠────────────┼────────────┨ ┃TRAPV │pOEP-only ┃ ┠────────────┼────────────┨ ┃TST │pOEP|sOEP ┃ ┠────────────┼────────────┨ ┃UNLK │pOEP-only ┃ ┠────────────┼────────────┨ ┃UNPK │pOEP-only ┃ ┗━━━━━━━━━━━━┷━━━━━━━━━━━━┛ ●特権命令のスーパースカラ分類表 ┏━━━━━━━━━━━━┯━━━━━━━━━━━━┓ ┃ 命令 │ スーパースカラ分類 ┃ ┣━━━━━━━━━━━━┿━━━━━━━━━━━━┫ ┃ANDI to SR │pOEP-only ┃ ┠────────────┼────────────┨ ┃CINV │pOEP-only ┃ ┠────────────┼────────────┨ ┃CPUSH │pOEP-only ┃ ┠────────────┼────────────┨ ┃EORI to SR │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVE from SR │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVE to SR │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVE USP │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVEC │pOEP-only ┃ ┠────────────┼────────────┨ ┃MOVES │pOEP-only ┃ ┠────────────┼────────────┨ ┃ORI to SR │pOEP-only ┃ ┠────────────┼────────────┨ ┃PFLUSH │pOEP-only ┃ ┠────────────┼────────────┨ ┃PLPA │pOEP-only ┃ ┠────────────┼────────────┨ ┃RESET │pOEP-only ┃ ┠────────────┼────────────┨ ┃RTE │pOEP-only ┃ ┠────────────┼────────────┨ ┃STOP │pOEP-only ┃ ┗━━━━━━━━━━━━┷━━━━━━━━━━━━┛ ●浮動小数点命令のスーパースカラ分類表 ┏━━━━━━━━━━━━┯━━━━━━━━━━━━┓ ┃ 命令 │ スーパースカラ分類 ┃ ┣━━━━━━━━━━━━┿━━━━━━━━━━━━┫ ┃FABS │pOEP-but-allows-sOEP ┃ ┃FDABS │ ┃ ┃FSABS │ ┃ ┠────────────┼────────────┨ ┃FADD │pOEP-but-allows-sOEP ┃ ┃FDADD │ ┃ ┃FSADD │ ┃ ┠────────────┼────────────┨ ┃FBcc │pOEP-only ┃ ┠────────────┼────────────┨ ┃FCMP │pOEP-but-allows-sOEP ┃ ┠────────────┼────────────┨ ┃FDIV │pOEP-but-allows-sOEP ┃ ┃FDDIV │ ┃ ┃FSDIV │ ┃ ┃FSGLDIV │ ┃ ┠────────────┼────────────┨ ┃FINT │pOEP-but-allows-sOEP ┃ ┃FINTRZ │ ┃ ┠────────────┼────────────┨ ┃FMOVE │pOEP-but-allows-sOEP ┃ ┃FDMOVE │ ┃ ┃FSMOVE │ ┃ ┠────────────┼────────────┨ ┃FMOVE FPcr │pOEP-only ┃ ┠────────────┼────────────┨ ┃FMOVEM │pOEP-only ┃ ┠────────────┼────────────┨ ┃FMUL │pOEP-but-allows-sOEP ┃ ┃FDMUL │ ┃ ┃FSMUL │ ┃ ┃FSGLMUL │ ┃ ┠────────────┼────────────┨ ┃FNEG │pOEP-but-allows-sOEP ┃ ┃FDNEG │ ┃ ┃FSNEG │ ┃ ┠────────────┼────────────┨ ┃FNOP │pOEP-only ┃ ┠────────────┼────────────┨ ┃FSQRT │pOEP-but-allows-sOEP ┃ ┠────────────┼────────────┨ ┃FSUB │pOEP-but-allows-sOEP ┃ ┃FDSUB │ ┃ ┃FSSUB │ ┃ ┠────────────┼────────────┨ ┃FTST │pOEP-but-allows-sOEP ┃ ┗━━━━━━━━━━━━┷━━━━━━━━━━━━┛ ●パイプライン同調命令 次の命令はパイプライン同調(pipeline synchronization)を伴います。つま り、これらの命令はアドレッシングモードや直前の命令のメモリアクセスおよび そのスーパースカラ分類に関係なく、直前の命令の処理が完全に終わってから実 行されます。 ANDI to SR BKPT CAS CINV CPUSH EORI to SR HALT LPSTOP MOVE to SR MOVEC NOP ORI to SR PFLUSH PLPA RESET RTE STOP TAS ●ソフトウェアエミュレーションによって実行される命令 以下の命令は MC68060 ではソフトウェアエミュレーションによって実行され ます。これらの命令は他の命令と比較して大きな実行時間を必要とするので、速 度を要求されるプログラムでは使わないで下さい。 ・未実装整数命令 CAS.wl Dc,Du,<ea> (<ea>がミスアラインの場合) CAS2.wl Dc1:Dc2,Du1:Du2,(Rn1):(Rn2) CHK2.bwl <ea>,Rn CMP2.bwl <ea>,Rn DIVS.L <ea>,Dr:Dq DIVU.L <ea>,Dr:Dq MOVEP.wl Dx,(d,Ay) MOVEP.wl (d,Ay),Dx MULS.L <ea>,Dh:Dl MULU.L <ea>,Dh:Dl ・未実装浮動小数点命令 未実装浮動小数点単項演算命令 FACOS FASIN FATAN FATANH FCOS FCOSH FETOX FETOXM1 FGETEXP FGETMAN FLOG10 FLOG2 FLOGN FLOGNP1 FSIN FSINCOS FSINH FTAN FTANH FTENTOX FTWOTOX 未実装浮動小数点 2 項演算命令 FMOD FREM FSCALE 条件付き未実装浮動小数点命令 FDBcc FScc FTRAPcc その他の未実装浮動小数点命令 FMOVECR 未実装浮動小数点実効アドレス FMOVEM.X Dn,<ea> FMOVEM.X <ea>,Dn FMOVEM.L #<data>,#<data>,FPcr/FPcr FMOVEM.L #<data>,#<data>,#<data>,FPCR/FPSR/FPIAR F<op>.X #<data>,FPn F<op>.P #<data>,FPn 未実装浮動小数点データ型 F<op>.P (未実装浮動小数点実効アドレスを除く) F<op>.sdx (ソースオペランドが非正規化数の場合) F<op>.X (ソースオペランドが正規化不能の場合) ●参考文献 M68060 User's Manual / Motorola