更新日: 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