Ximo16A ユーザーズマニュアル 2013.12.20 版 表紙 (C) 2009-2013 New Japan Radio Co., Ltd. Preliminary Ximo16A Preliminary 更新履歴 ドラフト初版 ......................................... 2009.07.03 改訂 1 版 ............................................. 2010.01.25 改訂 2 版 ............................................. 2013.12.20 ii 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 1 はじめに ..................................................................................................1 2 アーキテクチャ概要 ................................................................................2 2.1 構成 ......................................................................................................................2 2.1.1 アドレス空間 ................................................................................................2 2.1.2 バス ...............................................................................................................2 2.2 コアレジスタ........................................................................................................3 2.2.1 ステータスレジスタとコンディションコードレジスタ................................5 2.2.2 pm レジスタ..................................................................................................7 2.3 レジスタバンク ....................................................................................................8 3 メモリ構成 ..............................................................................................8 3.1 メモリマップの概要 .............................................................................................8 3.2 メモリ上のデータ配置 .........................................................................................9 3.3 メモリ上の命令語の配置......................................................................................9 4 アドレッシングモード ..........................................................................10 4.1 コアレジスタ ( 直接アドレッシング ) ................................................................ 10 4.2 メモリ................................................................................................................. 10 4.2.1 ポインタレジスタ間接アドレッシング ....................................................... 10 4.2.2 ポインタレジスタ相対アドレッシング ....................................................... 11 4.2.3 絶対アドレッシング.................................................................................... 11 4.3 ポインタレジスタの自動更新機能 .....................................................................11 4.3.1 オペランドサイズによる更新 .....................................................................11 4.3.2 m0/m1 レジスタによる更新........................................................................11 5 例外処理 ................................................................................................12 5.1 リセット ............................................................................................................. 12 5.2 割込み................................................................................................................. 13 5.2.1 通常の割込み処理 ....................................................................................... 13 5.2.2 割込みの優先度 ...........................................................................................13 5.2.3 割込みからの復帰 ....................................................................................... 13 5.3 高速割込み ......................................................................................................... 13 5.3.1 高速割込みの処理 ....................................................................................... 14 5.3.2 コア内部スタックと高速割込みからの復帰................................................ 14 5.3.3 ネストした高速割込み ................................................................................ 14 5.4 ソフトウェアによる割込み / 例外 ...................................................................... 14 5.4.1 trap 命令...................................................................................................... 14 5.4.2 debug 命令 ..................................................................................................14 5.5 デバッグ例外...................................................................................................... 15 5.6 エラー例外 ......................................................................................................... 15 5.6.1 未定義命令例外 ...........................................................................................15 5.6.2 バスエラー例外 ...........................................................................................15 5.6.3 COP タイムアウト例外............................................................................... 15 5.6.4 多重のエラー例外 ....................................................................................... 15 6 データ演算モデル .................................................................................16 6.1 データ形式 ......................................................................................................... 16 6.1.1 符号無し数 ..................................................................................................16 6.1.2 符号付き数 ..................................................................................................16 6.1.3 固定小数点型 ..............................................................................................16 6.2 レジスタ上のデータ形式.................................................................................... 16 6.3 飽和処理と丸め処理 ...........................................................................................17 6.3.1 飽和処理...................................................................................................... 17 6.3.2 丸め処理...................................................................................................... 18 7 命令セット概要 .....................................................................................19 7.1 命令オプコードの割り当て ................................................................................ 19 7.2 コアレジスタエンコード表 ................................................................................ 19 7.3 表記 .................................................................................................................... 20 7.3.1 命令一覧の表記 ...........................................................................................20 7.3.2 動作説明中の表記 ....................................................................................... 20 7.3.3 コンディションコード動作の表記 ..............................................................21 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. iii 頁 Ximo16A Preliminary 8 命令一覧 ................................................................................................22 8.1 ロード命令 ......................................................................................................... 22 8.2 ストア命令 ......................................................................................................... 22 8.3 スタック操作命令...............................................................................................22 8.4 即値ロード命令 ..................................................................................................22 8.5 レジスタ間転送命令 ...........................................................................................22 8.6 加算命令 ............................................................................................................. 23 8.7 減算命令 ............................................................................................................. 23 8.8 比較命令 ............................................................................................................. 23 8.9 乗算命令 ............................................................................................................. 24 8.10 その他の算術命令............................................................................................. 24 8.11 論理演算命令.................................................................................................... 24 8.12 ビット操作命令 ................................................................................................ 24 8.13 シフト命令 ....................................................................................................... 24 8.14 プログラムフロー制御命令 / 特殊命令 ............................................................. 25 9 ロード命令 ............................................................................................26 10 ストア命令 ..........................................................................................38 11 スタック操作命令 ...............................................................................51 12 即値ロード命令 ...................................................................................61 13 レジスタ間転送命令 ............................................................................66 14 加算命令 ..............................................................................................81 15 減算命令 ............................................................................................102 16 比較命令 ............................................................................................123 17 乗算命令 ............................................................................................128 18 その他の算術命令 .............................................................................136 19 論理演算命令 .....................................................................................154 20 ビット操作命令 .................................................................................162 21 シフト命令 ........................................................................................170 22 プログラムフロー制御命令 / 特殊命令 ..............................................200 23 並列転送命令の形式について ...........................................................221 23.1 並列実行可能なロード命令 ............................................................................221 23.2 並列実行可能なストア命令 ............................................................................221 23.3 並列転送時の制限事項 ...................................................................................222 24 命令エンコード一覧 ..........................................................................223 24.1 16 ビット長命令 .............................................................................................223 24.1.1 プログラムフロー制御命令.....................................................................223 24.1.2 ロード命令 ( 間接アドレッシング ).........................................................226 24.1.3 ロード命令 (fp レジスタ相対 ) ................................................................227 24.1.4 ストア命令 ( 間接アドレッシング ).........................................................228 24.1.5 ストア命令 (fp レジスタ相対 ) ................................................................230 24.1.6 スタック操作命令 ...................................................................................231 24.1.7 ペリフェラルアクセス ............................................................................232 24.1.8 16 ビットデータレジスタ演算 ................................................................233 24.1.9 32 ビットデータレジスタ演算 ................................................................237 24.1.10 ポインタレジスタ演算 ..........................................................................240 24.1.11 型変換付きデータ転送 ..........................................................................241 24.1.12 回転操作命令 ........................................................................................242 24.1.13 即値シフト命令 (16 ビットワード ) ......................................................243 24.1.14 即値シフト命令 (32 ビットロングワード ) ...........................................244 24.1.15 ビット操作命令 .....................................................................................245 24.1.16 16 ビットデータレジスタ短即値演算 ...................................................246 24.1.17 32 ビットデータレジスタ短即値演算 ...................................................246 24.1.18 ポインタレジスタ短即値演算 ...............................................................247 24.1.19 短即値ロード ........................................................................................248 24.1.20 レジスタ間データ転送 ..........................................................................248 24.1.21 プログラムフロー制御命令 ( ショートオフセットによる条件付分岐 ).249 iv 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 24.2 32 ビット長命令 1 ..........................................................................................250 24.2.1 ロード命令 ( 相対アドレス ) ...................................................................250 24.2.2 ロード命令 ( 絶対アドレス ) ...................................................................251 24.2.3 ストア命令 ( 相対アドレス ) ...................................................................252 24.2.4 ストア命令 ( 絶対アドレス ) ...................................................................253 24.2.5 即値ロード ..............................................................................................254 24.2.6 即値演算..................................................................................................254 24.2.7 プログラムフロー制御 ............................................................................256 24.2.8 条件付データ転送 ...................................................................................257 24.2.9 I/O 操作命令 ............................................................................................258 24.2.10 スタックフレーム構築 ..........................................................................259 24.2.11 内部スタックレジスタアクセス............................................................259 24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 ).........................................260 24.3.1 16 ビットデータレジスタ演算命令.........................................................260 24.3.2 32 ビットデータレジスタ演算命令.........................................................261 24.3.3 乗算命令..................................................................................................261 24.3.4 アキュームレータ - データレジスタ算術演算命令 .................................263 24.3.5 シフト命令 ..............................................................................................264 24.3.6 即値シフト命令.......................................................................................265 24.3.7 アキュームレータ間演算命令 .................................................................266 24.3.8 アキュームレータレジスタ - データレジスタ間転送命令.......................269 24.3.9 no operation( 並列転送実行用 )...............................................................271 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. v頁 Ximo16A 1 Preliminary はじめに この文章は制御用途向けデジタルシグナルプロセッサ ximo16 のアーキテクチャ、及びアセンブラ言 語について説明します。 1頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 2 2.1 Ximo16A アーキテクチャ概要 構成 図 2-1 にコアのブロック図を示します。コアはフロー制御ユニット、命令デコードユニット、デー タアドレス生成ユニット、データ演算ユニットの 4 つの部分から構成されます。 フロー制御ユニットでは 2 つゼロオーバーヘッドループ機構、及び分岐予測器によるプログラムフ ロー制御が行なわれます。 命令デコードユニットでは、命令キューによるの可変長命令の整列、命令デコード、分岐命令によ るプログラムフロー制御などが行なわれます。 データアドレス生成ユニットは、ポインタ演算用に 2 つの 16 ビットアドレス演算器を持っていま す。この演算器は有効アドレス計算及びポインタレジスタ自動更新のために用いられます。命令毎に 最大 2 つのアドレス生成と2つポインタレジスタの更新を行なうことが可能です。ポインタレジスタ の自動更新ではポストインクリメント / デクリメント、リングバッファ用のモジュロアドレッシング、 FFT 用のビットリバースアドレッシングをサポートしています。 データ演算ユニットでは、演算器として、1 つの 40 ビット ALU、1 つの 40 ビットバレルシフタ、1 つの 16 ビット乗算器を持っています。 40 ビット ALU では 16/32/40 ビットの算術論理演算を行ないます。40 ビットバレルシフタでは最大 40 ビットデータの+ 16 ∼− 16 ビットシフトが行なえます。40 ビット長の演算では 2 本の 40 ビット アキュームレータレジスタによって演算結果を保持することができます。16 ビット乗算器は 16 ビッ ト × 16 ビットの乗算を 1 サイクルで行い 32 ビットの乗算結果を得ることができます。ALU と乗算器 は、命令によって同時に使用することができます。1 命令内で加減算と乗算を並列に実行することで 1 システムクロック毎に 1 回の積和演算を実行することが可能です。 2.1.1 アドレス空間 アドレス空間は 16 ビットで、ワード長が 16 ビットです。よって 64KWord の空間を持ちます。デー タアドレス / プログラムアドレスとも同じ論理空間内に存在します。 データメモリとして扱う場合、16 ビットワードまたは 32 ビットロングワードとしてアクセスでき ます。32 ビットロングワードとしてアクセスする場合、データは偶数アドレスに整列されている必要 があります。 2.1.2 バス コアは統一された 1 つの論理空間を持ちますが、ハーバード型のアーキテクチャで構成されており、 プログラムバスとデータバスは分離されています。 プログラムバスは 1 サイクルあたり 64 ビット分の命令語をメモリより読み込みます。読み込まれた 命令語は命令キューによって整列されます。 データバスはリード / ライト共通の 32 ビットバスが 1 つと、リード専用の 32 ビットバスが 1 つあ ります。命令によって、2 つのデータバスは同時に使用することができます。 ・32 ビット リード / ライト共通データバス (X バス ) ・32 ビット リードデータバス (Y バス ) ・64 ビット プログラムバス (P バス ) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 2頁 Ximo16A Preliminary 図 2-1: コアブロック図 16 フロー制御ユニット 命令デコードユニット c1 s1 e1 c0 s0 e0 pc m1 m0 sp l1 n1 l0 n0 fp p5 p4 p3 p2 p1 p0 Program Address Gen. 64 Instruction Queue Instruction Decoder 2.2 d14 d13 d11 d9 d7 d5 d3 d1 d12 d10 d8 d6 d4 d2 d0 Program Data Bus データアドレス生成ユニット Data Address Gen. 1 Data Address Gen. 0 16 16 データ演算ユニット d15 Program Address Bus 32 Barrel Shifter 40-bit ALU 40 Data Address Bus X Data Address Bus Y Write Data Bus X 16x16 MPY 32 32 a1 a0 32 32 Read Data Bus X Read Data Bus Y コアレジスタ レジスタユーザモデルを図 2-2 を示します。 コアのレジスタは 16 本の 16 ビットデータレジスタと 8 本の 16 ビットポインタレジスタを中心に 構成されています。 このほかに、40 ビットのアキュームレータレジスタ 2 本、データアドレス生成の設定レジスタ 3 本 x2 セット、ハードウェアループ設定レジスタ 3 本 x2 セットなどから成ります。 3頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 図 2-2: レジスタモデル a1i[7:0] a1i[7:0] d15[15:0] d7h[15:0] d14[15:0] d7l[15:0] d15.14[31:0] d13[15:0] d6h[15:0] d12[15:0] d6l[15:0] d13.12[31:0] d11[15:0] d5h[15:0] d10[15:0] d5l[15:0] d11.10[31:0] d9[15:0] d4h[15:0] d8[15:0] d4l[15:0] d9.8[31:0] d7[15:0] d3h[15:0] d6[15:0] d3l[15:0] d7.6[31:0] d5[15:0] d2h[15:0] d4[15:0] d2l[15:0] d5.4[31:0] d3[15:0] d1h[15:0] d2[15:0] d1l[15:0] d3.2[31:0] d1[15:0] d0h[15:0] d0[15:0] d0l[15:0] d1.0[31:0] a1h[15:0] a1h[15:0] a1l[15:0] a1l[15:0] a1[39:0] a0i[7:0] a0i[7:0] a0h[15:0] a0h[15:0] a0l[15:0] a0l[15:0] a0[39:0] sp[15:0] m1[15:0] m1[15:0] c1[15:0] fp[15:0] fp[15:0] l1[15:0] l1[15:0] s1[15:0] p5[15:0] p5[15:0] n1[15:0] b1[15:0] e1[15:0] p3[15:0] p3[15:0] m0[15:0] m0[15:0] c0[15:0] p2[15:0] p2[15:0] l0[15:0] l0[15:0] s0[15:0] p1[15:0] p1[15:0] n0[15:0] b0[15:0] e0[15:0] pc[15:0] st[15:0] pm[15:0] spc[15:0] sst[15:0] sc1[15:0] p4[15:0] p4[15:0] p0[15:0] p0[15:0] ss1[15:0] se1[15:0] sc0[15:0] ss0[15:0] se0[15:0] 表 1:レジスタの種類 種類 機能 リセット時 汎用データレジスタ d0 - d15 d1.0 - d15.14 d0 から d15 までの 16 ビット、16 本のレジスタを表します。 通常は 16 ビットレジスタとして使用されますが、命令によって 32 ビッ ト、8 本のレジスタとして使用できます。 不定 アキュームレータレジスタ a0 a0i/a0h/a0l a1 a1i/a1h/a1l 2 本の 40 ビットレジスタ a0/a1 を表します。アキュームレータレジス タは 8 ビットの a0i/a1i、16 ビットの a0h/a1h、16 ビットの a0l/a1l、 と 3 つの部位に分解してアクセスすることができます。 a0i/a1i を読み出す場合は、最上位ビットであるビット 7 から符号拡張 した値が得られます。これら上位の 8 ビットは積和演算などの累加算に よるオーバーフローを保持するために用いられます。 不定 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 4頁 Ximo16A Preliminary 表 1:レジスタの種類 種類 機能 リセット時 p0/p1/p2/p3/p4/p5/fp/sp の 8 本の 16 ビットレジスタを表します。こ れらのレジスタはアドレス空間を指示するためのポインタレジスタとし て用いられます。 sp はスタックトップを指示するためのポインタとして使用されます。 fp はスタックフレームを指示するためのポインタとして、一部の命令 で特殊な操作、アドレッシングがサポートされています。 p0-5/fp: 不定 ステータスレジスタ st cc st レジスタを表します。ALU/ シフト演算での各コンディションコード ビット、割込みレベルを表すビットなどから成ります。 cc レジスタはコンディションコードレジスタで、st レジスタの下位 8 ビットのみを指します。このシンボルでアクセスする場合、上位 8 ビッ トの読み出し / 書きこみはできません。 0xC000 動作モードレジスタ pm pm レジスタを表します。予測分岐やストアバッファの設定ビットなど から成ります。 0x0000 プログラムカウンタレジスタ pc 実行するプログラムのアドレスを指示します。プログラムフロー制御命 令によって操作されます。 不定 ループカウンタレジスタ c0/c1 2 本の 16 ビットレジスタ c0/c1 を表します。ハードウェアループ動作 でのループ回数カウンタとして使用されます。 0x0000 ループスタートレジスタ s0/s1 2 本の 16 ビットレジスタ s0/s1 を表します。ハードウェアループ動作 でのループ上限アドレスを指示するレジスタとして使用されます。 不定 ループエンドレジスタ e0/e1 2 本の 16 ビットレジスタ e0/e1 を表します。ハードウェアループ動作 でのループ下限アドレスを指示するレジスタとして使用されます。 不定 ポインタモデファイレジスタ m0/m1 2 本の 16 ビットレジスタ m0/m1 を表します。通常はポインタレジスタ の自動更新でのステップ値として使用されます。 不定 バッファサイズレジスタ l0/l1 2 本の 16 ビットレジスタ l0/l1 を表します。データアドレス生成ユ ニットの動作モード設定や循環バッファアドレッシング時のバッファサ イズ値として使用されます。 0x0000 バッファアドレスレジスタ n0/n1 2 本の 16 ビットレジスタ n1/n0 を表します。循環バッファアドレッシ ング時のバッファの先頭アドレスとして使用されます。 不定 pc 内部スタックレジスタ spc 高速割込み時に pc レジスタの値がコピーされます。 不定 st 内部スタックレジスタ sst 高速割込み時に st レジスタの値がコピーされます。 不定 c0/c1 内部スタックレジスタ sc0/sc1 高速割込み時に c0/c1 レジスタの値がコピーされます。 不定 s0/s1 内部スタックレジスタ ss0/ss1 高速割込み時に s0/s1 レジスタの値がコピーされます。 不定 e0/e1 内部スタックレジスタ se0/se1 高速割込み時に e0/e1 レジスタの値がコピーされます。 不定 ポインタレジスタ p0 - p5/fp/sp 2.2.1 sp: 0xFFDF ステータスレジスタとコンディションコードレジスタ ステータスレジスタ st は 16 ビット幅のレジスタで、ビット 7 からビット 0 は演算のコンディショ ンコードレジスタ cc で構成されています。このほかに割込みステータスビット、レジスタバンクビッ トなどがあります。 表 2:st レジスタのビット割り当て ビット位置 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 シンボル I1 I0 FI EE - - - B U E S F N V Z C 5頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 表 3:st レジスタ内のビット ビット 説明 リセット後の値 C 加算命令の場合、キャリーが発生するとセットされ、そうでない場合クリアされます。減算 / 比較 命令の場合ボローが発生するとセットされ、そうでない場合クリアされます。 演算の結果がゼロの場合にセットされ、そうでない場合にクリアされます。 演算の結果、オーバーフローが発生するとセットされ、そうでない場合にクリアされます。 演算結果の最上位ビットがコピーされます。 演算の結果、オーバーフローが発生するとセットされます。ユーザーが明示的にクリアしない限り クリアされないスティッキービットです。 演算の結果、飽和処理が行なわれた場合にセットされます。ユーザーが明示的にクリアしない限り クリアされないスティッキービットです。 アキュームレータをディスティネーションとする演算の結果、アキュームレータのビット 39 から ビット 31 までが全て 1 または全て 0 で無い場合にセットされ、そうでない場合にクリアされます。 これは 40 ビットアキュームレータの値を 2 の補数とした場合、アキュームレータの拡張ワード部分 に有意なデータが存在しているかどうかを指示します。 コンディションコピー命令 ccp によってセットまたはクリアされます。 レジスタバンクの現在選択されているバンクを表します。 エラー例外の発生を表すステータスビットです。 エラー例外を受け付けるとセットされます。詳細は「5.6 エラー例外」を参照して下さい。 高速割込みのステータスを表すビットです。 高速割込みを受け付けるとセットされます。詳細は「5.3 高速割込み」を参照して下さい。 コアの割込みマスクレベルとして使用されます。 コアの割込みマスクレベルとして使用されます。 0 Z V N F S E U B EE FI I0 I1 2.2.1.1 0 0 0 0 0 0 0 0 0 0 1 1 コンディションコードレジスタ コンディションコードレジスタ cc は st レジスタの下位 8 ビットで構成されます。このレジスタには ALU/ シフタによる演算のコンディションが格納されます。 一部の命令はシンボル cc によってこのレジスタのみにアクセスすることが可能です。 2.2.1.2 コンディションコード 条件付きブランチ / ジャンプ命令、条件付きレジスタ間転送命令、コンディションコピー命令では以 下のコンディションコードを使用できます。 表 4:コンディションコード一覧 シンボ ル condition フィールド 真の条件 zc zs gt ge lt le ugt ule uge/cc ult/cs vc vs nc ns al fc fs sc ss ec es uc us b_00000 b_00001 b_00010 b_00011 b_00100 b_00101 b_00110 b_00111 b_01000 b_01001 b_01010 b_01011 b_01100 b_01101 b_01111 b_10000 b_10001 b_10010 b_10011 b_10100 b_10101 b_10110 b_10111 Z clear 等しく無い != Z set 等しい == signed greater than 大きい ( 符号有り ) > signed greater than or eqaul 大きい又は等しい ( 符号有り ) >= signed less than 小さい ( 符号有り ) < signed less than or equal 小さい又は等しい ( 符号有り ) <= unsigned greater than 大きい ( 符号無し ) > unsigned less than or equal 小さい又は等しい ( 符号無し ) <= unsigned greater than or equal (C clear) 大きい又は等しい ( 符号無し ) >= unsigned less than (C set) 小さい ( 符号無し ) < V clear オーバーフロー無し V set オーバーフロー有り N clear 正又はゼロ >=0 N set 負 < 0 always 条件無し ( 常に真 ) F clear スティッキーオーバーフロー無し F set スティッキーオーバーフロー有り S clear 飽和演算無し S set 飽和演算有り E clear 拡張アキュームレータ不使用 E set 拡張アキュームレータ使用 U clear U ビットクリア U set U ビットセット 2013.12.20 版 意味 (C) 2009-2013 New Japan Radio Co., Ltd. 比較命令後 の意味 ビットの状態 Z=0 Z=1 N=V and Z=0 N=V N!=V N!=V or Z=1 C=0 and Z=0 C=1 or Z=1 C=0 C=1 V=0 V=1 N=0 N=1 F=0 F=1 S=0 S=1 E=0 E=1 U=0 U=1 6頁 Ximo16A Preliminary pm レジスタ 2.2.2 pm(Processor Mode)レジスタはコア全体の動作モードを切り替える設定ビットから構成されていま す。分岐予測機能の on/off、ストアバッファの on/off、丸めモードの切り替えビットなどからなります。 表 5:pm レジスタのビット割り当て ビット位置 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 シンボル - - - - - - - - - - - RM - - BPEN SBEN 0 表 6:pm レジスタ内のビット ビット 説明 リセット後の値 SBEN ストアバッファの設定ビットです。 0: ストアバッファオフ 1: ストアバッファオン 分岐予測器の設定ビットです。 0: 分岐予測オフ ( 全エントリ無効 ) 1: 分岐予測オン rnd 命令での丸めモードを選択します。 0:四捨五入 1: 偶数丸め 0 BPEN RM 2.2.2.1 0 0 SBEN ビット コアはストアバッファと呼ばれるメモリへの書き込みデータ用一時バッファを持っており、SBEN ビットをセットするとストアバッファの動作を有効にします。 ストアバッファはメモリへの遅延書き込みを実現することでバス競合によるコアのパイプラインス トールを軽減することが可能です。ストアバッファを有効にしている場合、データメモリ空間へのア クセスは命令の実行順と異なる場合があります。 たとえば以下のような命令手続きを実行するとき、 mov.w (0x1000), d0 mov.w d0, (0x1001) ストアバッファが有効な場合、アドレス 0x1000 への書き込みは一度ストアバッファに保持され、ア ドレス 0x1001 からの読み出しが先に処理されます。コアのパイプラインはストールしません。 ストアバッファが無効な場合、アドレス 0x1000 への書き込み終了を待ってからアドレス 0x1001 か らの読み出しが実行され、その間コアはストールします。この動作は読み書きする相手がメモリであ る場合、ユーザが特に意識する必要はありません。しかし IO 領域にマップされるペリフェラルに対す るアクセスを行なう場合、バスアクセスの順序が意味を持つことがあるため注意が必要です。 以下のケースでは SBEN ビットの状態に関わらずストアバッファを含む書き込みトランザクション が全て処理された後に実行されることが保障されます。 ・同じアドレスに対する Write After Read ・movp.w 命令によるリードアクセス ・メモリオペランドに対するビット操作命令 2.2.2.2 BPEN ビット コアは分岐先アドレスを最大 16 個保持することができる分岐予測器をもっており、BPEN ビットを セットすると分岐予測器の動作が有効になります。 分岐予測器はフルアソシエイティブ型の 16 エントリ分岐先アドレスキャッシュと各エントリに対す る 2 ビットの分岐方向履歴バッファから構成されています。コアは bra/jmp/call 命令のいずれかを実行 する場合に分岐予測器に対してエントリの作成 ( すでにエントリが存在する場合は、分岐履歴バッファ の更新 ) を行います。 エントリの作成 / 破棄は FIFO 方式で行なわれ、エントリに無い分岐命令が現れると最も古いエント リが捨てられます。 エントリに存在する分岐命令を実行する場合、分岐方向履歴に基づきプリフェッチの段階で投機的 7頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A に分岐が実行され、プリフェッチの方向が変化します。その予測がヒットしている場合は、bra/jmp/ call 命令は最速 1 システムクロックで実行可能です。予測がヒットしなかった場合には、分岐動作が再 実行されるため命令の実行結果に差はありません。 但しプログラムに対して自己書き換えを行なった場合には、分岐先アドレスキャッシュに存在する 有効エントリと実際のプログラムの同期性が破壊されます。その結果、暴走を引き起こす危険性があ ります。こういった操作を行なう場合は一度 BPEN ビットをクリアして全エントリを破棄し、プログ ラムメモリと分岐先アドレスキャッシュとの同期性を確保する必要があります。 2.2.2.3 RM ビット 詳細は「6.3.2 丸め処理」を参照して下さい。 2.3 レジスタバンク コアレジスタの一部はレジスタのバンクをもっています。バンク化されているレジスタは d0 - d15 / a0, a1 / p0 - p5, fp / m0, m1 / l0, l1 / n0, n1 レジスタで、それぞれ 1 つのバンクを持ちます。リセット 直後はバンク 0 の常態にあります。st レジスタ内の B ビットにコアレジスタの現在使用されているバ ンクの状態が表示されます。 B ビットの値を直接書き換えることで、どちらのバンクのレジスタにもアクセスすることが可能で す。ただしバンク 1(B=1) は高速割込みのサービスルーチンにおけるコンテキストとして使用すること を前提としています。このため高速割込みの受付時には B ビットは自動的に 1 にセットされ、レジス タのバンクはバンク 1 の方向へ切り替わります。 3 3.1 メモリ構成 メモリマップの概要 64K のワードアドレスの内、アドレス 0x0000 から 0x00FF までは IO 領域がマップされます。また アドレス 0xFFE0 から 0xFFFF がベクタテーブルとなります。 メモリは図 3-1 のようにデータ RAM 及びプログラム RAM がアドレス空間内にマップされます。こ の例では 0x4000 から 0x5FFF までがデータメモリ、0x8000 から 0xBFFF までがプログラムメモリと なります。これらの配置はデバイスのインテグレーションにより異なります。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 8頁 Ximo16A Preliminary 図 3-1: メモリマップ例 0x0000 IO (256) 0x00FF 0x4000 DATA RAM (8K) 0x5FFF 0x8000 PROGRAM RAM (16K) 0xBFFF 0xFFE0 0xFFFF 3.2 VECTOR TABLE (32) メモリ上のデータ配置 メモリ上のデータは 16 ビットワードと 32 ビットロングワードがあります。16 ビットワードデータ の配置はリトルエンディアンです。32 ビットロングワードデータは、必ず偶数アドレス境界からアク セスする必要があります。 図 3-2: メモリ上のデータ配置 X+1 15 31 X ワード1 0 15 ロングワード 奇数番地 3.3 ワード0 0 0 X番地 X+2番地 偶数番地 メモリ上の命令語の配置 命令語には 1 ワード命令 (16 ビット長命令 ) と 2 ワード命令 (32 ビット長命令 ) があります。2 ワー ド命令に対する偶数アドレス境界へのアライメントは必要ありません。命令は下図のように配置され ます。 9頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 図 3-3: メモリ上の命令配置 15 0 1ワード命令 W1 15 0 15 0 W1 W2 Y+1 Y 2ワード命令 16-bit命令1 16-bit命令0 Y番地 32-bit命令2 W2 32-bit命令2 W1 Y+2番地 32-bit命令4 W1 16-bit命令3 Y+4番地 32-bit命令4 W2 Y+6番地 アドレッシングモード 4 コアレジスタ ( 直接アドレッシング ) 4.1 コアレジスタを命令中のオペランドとする場合は、レジスタ名を使用します。表 1「レジスタの種 類」のレジスタを参照して下さい。 メモリ 4.2 命令中のオペランドでメモリ上のデータを表す場合、( ) を使用します。 ポインタレジスタ間接アドレッシング 4.2.1 ポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシングを指示する命 令フィールドは次のように割り当てられます。 bit 15 14 13 12 11 10 9 8 7 6 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 AddressingMode には次の修飾を使用できます。 アドレッシングモー ド (AddressingMode フィールド ) シンボル 有効アドレス ポインタ自動更新 b_000 b_001 b_010 b_011 b_100 b_101 b_110 b_111 (Preg) Preg [reserved] (Preg+) Preg (Preg-) Preg (Preg+,m0) Preg (Preg-,m0) Preg (Preg+,m1) Preg (Preg-,m1) Preg [reserved] Post Increment Post Decrement Post Increment Post Decrement Post Increment Post Decrement by by by by by by Operand Size Operand Size m0 register m0 register m1 register m1 register ※「8 命令一覧」などでの表記「(Preg)」は、これらのアドレッシングモードを代表して表してい 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 10 頁 Ximo16A Preliminary ます。実際には上表のアドレッシングを全て使用することができます。 このモードでは Preg の値が有効アドレスとして使用されます。またアドレッシングの修飾によって 使用したポインタの値を更新することができます。(Preg+),(Preg-) 修飾では 16 ビットワードアクセス の場合、+1 または -1 され、32 ビットロングワードアクセスの場合、+2 または -2 されます。 m0/m1 によるインクリメント / デクリメントでは m0 または m1 にセットされている値が更新値と して使用されます。またこのモードでは l レジスタ、n レジスタの設定によって特殊なポインタ更新が 可能です。この機能については「4.3 ポインタレジスタの自動更新機能」を参照して下さい。 4.2.2 ポインタレジスタ相対アドレッシング ポインタレジスタ Preg に対する相対アドレッシングが使用できます。 アドレッシングモード シンボル 有効アドレス 16-bit offset (IMM16,Preg) Preg+IMM16 short offset (fp のみ ) (-IMM6,fp) fp-IMM6 ポインタ自動更新 - このモードでは使用するポインタレジスタにオフセット値を加算した値が有効アドレスとして使用 されます。ポインタレジスタの値は変更されません。 6 ビットのショートオフセット付きのアドレッシングは fp レジスタに対してのみ使用することがで きます。6 ビットのオフセット値 IMM6 は、7 ビットの符号付き数の負の値から、MSB を省いた形式 で表現されます。よって 0x3F で -1、0x00 で -64 を表します。 4.2.3 絶対アドレッシング 命令中の即値フィールドが有効アドレスとなります。 アドレッシングモード シンボル 有効アドレス ポインタ自動更新 absolute absolute (peripheral) (IMM16) (IMM8) IMM16 IMM8 - 4.3 ポインタレジスタの自動更新機能 4.3.1 オペランドサイズによる更新 (Preg+) または (Preg-) のアドレッシングモードでは、命令によって定まるオペランドサイズ分がポ インタレジスタからインクリメントまたはデクリメントされます。16 ビットワードアクセスならば +1 または -1、32 ビットロングワードアクセスならば +2 または -2 がポインタレジスタに加えられます。 4.3.2 m0/m1 レジスタによる更新 アドレッシングモード、(Preg+, m0),(Preg-, m0),(Preg+, m1), (Preg-, m1) では、インクリメント、デ クリメントのステップ値に m0 又は m1 レジスタの値が選択されます。このモードでは l0/l1 レジスタ、 n0/n1 レジスタの設定によって特殊な機能を持ったポインタの更新が可能です。 m0/l0/n0 および m1/l1/n1 レジスタは暗黙の組として動作し、m0 レジスタによる更新では、l0/n0 レ ジスタによる設定が、m1 レジスタによる更新では l1/n1 レジスタによる設定が有効になります。 4.3.2.1 リニア更新アドレッシング このアドレッシングモードではポインタレジスタに対して、m レジスタの値が、加算または減算さ れます。このモードを選択するには対応する l レジスタの値を 0x0000 に設定します。n レジスタの値 は、このモードの動作に影響を与えません。 11 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 4.3.2.2 Ximo16A モジュロアドレッシング このアドレッシングモードでは l レジスタ及び n レジスタで指定したアドレスの範囲内でポインタ値 がラップアラウンドします。 l レジスタでバッファのサイズを、n レジスタでバッファの先頭アドレスを、m レジスタで更新のス テップ値を設定します。 このモードを選択するには、l レジスタを 0x0001 ∼ 0x8000 の範囲に設定します。また m レジスタ の値は l レジスタで設定したバッファサイズより大きな値を取ることは出来ません。ポインタレジスタ の更新は次のアルゴリズムによって決定されます。 1. インクリメント (Preg+, m0),(Preg+, m1) 場合 (Preg_old + m) >= ( n + l ) の場合、Preg は Preg_new = (Preg_old + m) - l それ以外では Preg_new = Preg_old + m となります。 2. デクリメント (Preg-, m0), (Preg-,m1) の場合 (Preg_old - m) < n の場合、Preg は Preg_new = (Preg_old - m) + l それ以外では Preg_new = Preg_old - m となります。 4.3.2.3 ビットリバースアドレッシング このアドレッシングモードでは FFT 演算で使用されるビットリバース加算によるポインタレジスタ の更新を行ないます。このモードを選択するには l レジスタの値を 0xFFFF に設定します。n レジスタ の値は、このモードの動作に影響を与えません。 このモードではポインタレジスタと m レジスタのビットの並びを反転させてから加算又は減算し、 その結果のビットの並びを、再び反転させてからポインタレジスタの新しい値とします。 p0 を 0xF000、m0 を 0x0008、l0 を 0xFFFF として (p0+,m0) による更新を行なう場合、p0 の値は 次のように変化します。 0xF000 → 0xF008 → 0xF004 → 0xF00C → 0xF002 → 0xF00A → 0xF006 → このモードでは m の値に 2 の累乗の値を取るとき、有意な動作をします。 5 例外処理 コアはリセット、割込み要求、エラー状態などの例外要因が検出された場合に、通常とは異なるプ ログラムフローを発生させることで、例外要因に対して処理を行なうことが出来ます。この処理を例 外処理と呼びます。 例外処理を行なうルーチンの先頭アドレスはメモリ空間内のベクタテーブルによって設定され、各 例外要因の発生により、ベクタテーブルに設定されたアドレスへジャンプします。 ベクタテーブルの詳細については、SIM(System Integration Module) 及びデバイスのインテグレー ションに関する仕様を参照して下さい。 5.1 リセット リセット信号により、コア内のレジスタは初期値がセットされ、コアは割込み禁止状態になります。 また分岐予測、ストアバッファの機能もオフになります。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 12 頁 Ximo16A Preliminary リセット信号が解除されるとメモリ上の割込みベクタテーブルに設定されたリセットベクタのアド レスへジャンプします。 5.2 割込み 5.2.1 通常の割込み処理 ベクタテーブルは割込み要因の種類ごとのベクタアドレスを持ち、各種の割込みサービスルーチン の先頭アドレスとして使用されます。 コアが割込み許可状態のとき、割込みコントローラから割込み要求が発生すると割込み処理が開始 されます。 遷移動作として、割込みが発生した時点のプログラムカウンタ pc の値とステータスレジスタ st の値 が、sp レジスタの指すデータメモリのスタックにプッシュされます。また st レジスタ内の割込みマス クビット I1,I0 は受け付けた割込みのレベルによって新しい値が設定されます。その後、ベクタテーブ ルで定められた割込みサービスルーチンへジャンプします。 5.2.2 割込みの優先度 割込みには優先度のレベルがあり、割込みコントローラの設定によって各割込み要因に対して、独 立した割込みレベルを設定することが可能です。割込みレベルは、優先度の高い順に、NMI、レベル 2、レベル 1、レベル 0 があります。 コアは、st レジスタ内の割込みマスクビット I1,I0 によって許可される割込みのレベルが設定されま す。割込みレベルと I1,I0 ビットの対応は表 7 のようになります。また NMI を除く割込みでは、割込み 受付時に I1,I0 ビットが、受け付けた割込みのレベルよりも 1 つ高い値に設定され、自動的に同じレベ ルの割込みがマスクされます。その対応は表 8 のようになります。 NMI では I1,I0 ビットともに 1 がセットされます。この割込みを I1,I0 ビットの値によってマスクす ることは出来ません。 表 7:I1,I0 ビットと割込みレベル 割込みが許可されるレベル 割込みがマスクされるレベル NMI NMI,2 NMI,2,1 NMI,2,1,0 2,1,0 1,0 0 - st レジスタ I1 I0 1 1 0 0 1 0 1 0 表 8:割込み受付後の I1,I0 ビット 受け付けた割込みレベル NMI 2 1 0 5.2.3 st レジスタ ( 割込み受付後 ) I1 I0 1 1 1 0 1 1 0 1 割込みからの復帰 割込み処理から復帰するには rti 命令を使用します。rti 命令は sp レジスタの指すデータメモリのス タックトップから st レジスタと pc レジスタを復帰し、割込み処理前のルーチンへ戻ります。 5.3 高速割込み コアは割込み発生から割込みサービスルーチンの実行開始までに必要とされる時間を短縮するため に、高速割込みの機能を持っています。高速割込みは、SIM(System Integration Module) に高速割込み として扱う割込みリソースと、その割込みベクタアドレスを設定することで利用可能になります。 13 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 5.3.1 Ximo16A 高速割込みの処理 コアが割込み許可状態のとき、高速割込み要求が発生すると、高速割込みの処理が開始されます。 高速割込では、遷移動作として pc, st, c0, c1, s0, s1, e0, e1 レジスタがコア内部スタック spc, sst, sc0, sc1, ss0, ss1, se0, se1 レジスタへコピーされます。 そして st レジスタ内の高速割込みステータスビット FI とレジスタバンク切り替えビット B とが 1 に セットされます。割込みマスクビット I1,I0 は高速割込みに割り当てられた割込みの優先度によって設 定されます。その後コアは SIM(System Integration Module) に設定されたベクタアドレスへジャンプし ます。 この一連の動作は高速割込み受付時にハードウェアの動作で行なわれます。高速割込みを受け付け た時点で、pc、st、及びハードウェアループに関連するレジスタは内部スタックへコピーされ、また データレジスタ、ポインタレジスタはバンクが切り替わります。このためサービスルーチンにおいて は、ほとんどのコアリソースに対して退避 / 復帰を行なう必要がありません。 5.3.2 コア内部スタックと高速割込みからの復帰 高速割込み受付時にコアレジスタを保存するために、pc, st, c0, c1, s0, s1, e0, e1 に対して、それぞ れ深さ 1 の内部スタック用レジスタ spc, sst, sc0, sc1, ss0, ss1, se0, se1 があります。高速割込み発生 時には、対応するレジスタの値がコピーされます。 高速割込みからの復帰には rtf 命令を使用します。rtf 命令が実行された場合、これらの内部スタック からコアレジスタを復帰し、割込み前のルーチンへ戻ります。 内部スタックレジスタに直接アクセスできる命令として movst.w 命令が用意されています。 5.3.3 ネストした高速割込み 基本的にネストした高速割込みを行なうことは出来ません。 st レジスタ内の FI ビットがセットされている状態で高速割込み要求が発生し、その割込みの優先度 がコアの割込みマスクレベルよりも高い場合、この割込みはスプリアス割込みとして処理されます。高 速割込みは発生しません。 5.4 ソフトウェアによる割込み / 例外 5.4.1 trap 命令 trap 命令はソフトウェア割込みを発生させる命令です。この命令が実行されると、trap 命令の次の 命令のアドレスとステータスレジスタが、sp レジスタの指すデータメモリのスタックにプッシュされ ます。 またこの命令は NMI と同じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 がセットされま す。その後、ベクタテーブルで定められたサービスルーチンへジャンプします。 復帰するには rti 命令を用います。rti 命令実行後、trap 命令の次の命令から実行が再開されます。 5.4.2 debug 命令 debug 命令はデバッグ例外を発生させる命令です。ソフトウェアでブレイクポイントを設定する場 合に使用します。 この命令が実行されると、遷移動作として、debug 命令のある番地とステータスレジスタが、sp レ ジスタの指すデータメモリのスタックにプッシュされます。またこの命令は NMI と同じ優先度で処理 され、st レジスタ内の I1,I0 ビットには 1 がセットされます。その後ベクタテーブルで定められたサー ビスルーチンへジャンプします。 復帰するには rti 命令を用います。ただし、debug 命令では戻り番地として debug 命令のある番地が スタックされますので、そのまま rti 命令を実行すると再びブレイクポイントのトラップが発生します。 debug 命令を本来の命令に書き換えてから復帰を行なう必要があります。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 14 頁 Ximo16A 5.5 Preliminary デバッグ例外 コアのデバッグモードがソフトウェアデバッグモードであり、かつデバッグユニットに設定したブ レイク条件が成立した場合に発生します。 遷移動作として、ブレイク条件が成立した時点のプログラムカウンタ pc の値とステータスレジスタ st の値が、sp レジスタの指すデータメモリのスタックにプッシュされます。デバッグ例外は NMI と同 じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 がセットされます。その後、ベクタテーブル で定められたサービスルーチンへジャンプします。この例外のベクタは debug 命令で使用されるベク タと同じものです。 デバッグユニットの詳細は DBG16 モジュールを参照して下さい。 5.6 エラー例外 エラー例外には、未定義命令例外、バスエラー例外、COP タイムアウト例外があります。これらの 例外が発生すると NMI の割込みとして処理され、ベクタテーブルで設定されたエラーベクタアドレス へジャンプします。 遷移動作として、戻り番地とステータスレジスタが、sp レジスタの指すデータメモリのスタックに プッシュされます。エラー例外は NMI と同じ優先度で処理され、st レジスタ内の I1,I0 ビットには 1 が セットされます。またエラー例外の発生を表す st レジスタ内のビット EE が 1 にセットされます。そ の後、ベクタテーブルで定められたサービスルーチンへジャンプします。 エラー要因は SIM(System Integration Module) の SIMEXCP レジスタに表示され、サービスルーチン から参照することで発生したエラーの要因を知ることができます。 5.6.1 未定義命令例外 未定義のオプコードを持つ命令が実行されようとした場合に発生します。この例外では戻り番地と して未定義命令のある番地がスタックに保存されます。 5.6.2 バスエラー例外 プログラムメモリ、またはデータメモリへのアクセスで不正な番地、不正なアライメントのアクセ ス、バスのタイムアウトがあった場合に発生します。 プログラムメモリへのアクセスで発生したバスエラー例外は、エラーが発生した命令の先頭番地が 戻り番地としてスタックに保存されます。 データメモリのアクセスで発生したバスエラーでは、エラーを引き起こした命令のアドレスと、戻 り番地としてスタックされるアドレスとの間に同期性は保証されません。バスエラー発生後、数命令 後の実行番地が戻り番地としてスタックに保存されます。 5.6.3 COP タイムアウト例外 SIM(System Integration Module) が持つ COP(Watch Dog Timer 機能 ) は、そのタイムアウトを割込 み要因として使うことができます。COP のタイムアウト割込みはエラー例外として処理されます。 5.6.4 多重のエラー例外 st レジスタのエラー例外ステータスビット EE が 1 の状態で新たなエラー例外が発生した場合、コ アは多重エラーの発生と判断します。多重エラーが検出された場合、コアは外部に対してリセット要 求を出し、動作を停止します。復帰はリセットによって行なわれます。 15 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A データ演算モデル 6 6.1 データ形式 6.1.1 符号無し数 符号無し数は全て正の値として扱われます。16 ビットワードの場合、0x0000 が最小値で 0xFFFF が 最大値です。 6.1.2 符号付き数 符号付き数は 2 の補数表現の数として扱われます。16 ビットワードの場合、0x8000 が最小値で 0x7FFF が最大値です。 6.1.3 固定小数点型 6.1.3.1 1.15 符号付き固定小数 16 ビットワードの符号付き数の最上位 1 ビットを整数部、残りの 15 ビットを小数部として扱うデー タ形式です。 10 進の小数として表現する場合、次の範囲と精度を持ちます。 最小値 : -1.0 (0x8000) 最大値 : 0.999969482421875 (0x7FFF) 1LSB の精度 : 0.000030517578125 (0x0001) 6.1.3.2 1.31 符号付き固定小数 32 ビットロングワードの符号付き数の最上位 1 ビットを整数部、残りの 31 ビットを小数部として 扱うデータ形式です。 10 進の小数として表現する場合、次の範囲と精度を持ちます。 最小値 : -1.0 (0x8000 0000) 最大値 : 0.9999999995343387126922607421875 (0x7FFF FFFF) 1LSB の精度 : 0.0000000004656612873077392578125 (0x0000 0001) 6.1.3.3 9.31 符号付き固定小数 40 ビット拡張ロングワードの符号付き数の上位 9 ビットを整数部、残りの 31 ビットを小数部とし て扱うデータ形式です。 10 進の小数として表現する場合、次の範囲と精度を持ちます。 最小値 : -256.0 (0x80 0000 0000) 最大値 : 255.9999999995343387126922607421875 (0x7F FFFF FFFF) 1LSB の精度 : 0.0000000004656612873077392578125 (0x00 0000 0001) 6.2 レジスタ上のデータ形式 コアレジスタ上では 16 ビットワード、32 ビットロングワード、40 ビット拡張ロングワードを扱う ことができます。40 ビット拡張ロングワードはアキュームレータレジスタのみで操作することが可能 で、ロングワードを上位に 8 ビット拡張したものになります。拡張ロングワードとそれ以外のデータ 型で演算を行なう命令では、図 6-1 に示すようにデータ形式が変換されます。この変換はアキューム レータに対する演算が固定小数点型で行なわれることを前提としています。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 16 頁 Ximo16A Preliminary 図 6-1: レジスタ上のデータ形式 15 0 16-bitワード 31 0 32 31 0 32-bitロングワード 39 40-bit拡張ロングワード アキュームレータに対する算術演算時 32 31 39 ゼロ又は 符号拡張 16-bitワード 16 15 0 ゼロ詰め 32 31 39 ゼロ又は 符号拡張 32-bitロングワード S 39 0 S 32 31 0 40-bit拡張ロングワード 6.3 飽和処理と丸め処理 6.3.1 飽和処理 オーバーフローに対する誤差の軽減として演算時、またはデータ転送時に飽和処理を行なうことが 可能です。 6.3.1.1 演算時の飽和処理 加減算または左シフトにおいて、演算結果にオーバーフローが発生することがあります。ここでは、 本来正の結果が得られるはずの演算で負の結果となる場合を正のオーバーフロー、負の結果が得られ るはずの演算で正の結果となる場合を負のオーバーフローと呼びます。 たとえば、16 ビットワードの 2 の補数で表現できる正の最大数 0x7FFF に 1 を加算する場合、結果 は 0x8000 となり、オーバーフローを起こします。 正のオーバーフローでは表現できる正の最大値、負のオーバーフローでは表現できる負の最小値に 演算結果を制限することでオーバーフローによる誤差を抑えることができ、この操作を飽和処理と呼 びます。 16 ビットワードをディスティネーションとする場合、正のオーバーフローでは 0x7FFF、負のオー バーフローでは 0x8000 へ制限されます。 32ビットロングワードをディスティネーションとする場合、正のオーバーフローでは0x7FFF FFFF、 負のオーバーフローでは 0x8000 0000 へ制限されます。 40 ビット拡張ロングワードをディスティネーションとする場合、正のオーバーフローでは 0x7F FFFF FFFF、負のオーバーフローでは 0x80 0000 0000 へ制限されます。 飽和処理が可能な命令には、飽和処理オプションを持つ算術命令、算術左シフト命令、アキューム レータを対象とした算術命令などがあります。 6.3.1.2 データ転送時の飽和処理 アキュームレータレジスタは 40 ビットの拡張ロングワードを格納することができるため、データレ ジスタや、メモリ上のデータオペランドよりも大きな値を保持することができます。40 ビット拡張ロ ングワードの上位 8 ビットに意味のあるデータが存在する場合、上位ビットを切り捨てて 16 ビット ワードや 32 ビットワードへデータを転送すると大きな誤差を生じます。 こうしたケースでも拡張ロングワードの値に飽和処理を適用し、データ転送に伴う誤差を最小限に おさえることができます。 たとえば a0 レジスタの値が 0xFE 7431 2350 であった場合、この内容をロングワードレジスタ d1.0 へ転送を行なうと、飽和処理の有無で以下ように結果が変化します。 17 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A d1.0 = 0x8000 0000 ( 飽和有り , 負の最小値へ制限される。) d1.0 = 0x7431 2350 ( 飽和無し , 上位ビットが切り捨てられ、正の値になる。) データ転送に伴う飽和処理の有無は命令のオプションで明示的に指示します。 6.3.2 丸め処理 値の丸め ( 四捨五入 ) を行なう算術命令として rnd.l 命令及び rnd 命令があります。 丸めを行なう対象オペランドの下位ワードがちょうど 0.5(0x8000) の時、四捨五入を行なうと切り上 げのみが発生し、計算結果に切り上げ方向への偏りが生じます。 この偏りを防ぐために rnd 命令に対して偶数丸めモードを設定することが可能です。このモードは pm レジスタ内の RM ビットに 1 をセットすることで設定されます。 偶数丸めモードでは対象オペランドの下位ワードが 0x8000 であった場合、上位ワードが必ず偶数に なる方向へ丸めを行ないます。すなわち、上位ワードの最下位ビットが 0 であった場合には下位ワー ドは切り捨てられます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 18 頁 Ximo16A Preliminary 命令セット概要 7 命令は 16 ビット長の命令と 32 ビット長の命令がサポートされます。16 ビット長の命令は一般的に よく使用される単純な命令に割り当てられています。32 ビット長命令では複雑な指示が必要な命令、 大きな即値パラメータが必要な命令などに割り当てられています。 演算命令とロード命令 / ストア命令は分離されており、演算命令のソース、ディスティネーションは 必ずコアレジスタ又は命令の即値フィールドから得られます。 特定の 32 ビット長命令ではロード命令 / ストア命令との並列発行が可能です。32 ビット長命令と 16 ビット長のロード命令かストア命令 2 つを組み合わせた、並列転送命令付きの 64 ビット長複合命 令として 1 クロックで処理することが可能です。並列転送命令の形式については「23 並列転送命令の 形式について」を参照して下さい。 命令オプコードの割り当て 7.1 表 9 に命令のビット 15 からビット 12 へのオプコード割り当てを示します。 表 9:命令オプコード bit15:12 の主な割り当て bit13:12 7.2 bit15:14 00 01 10 11 00 プログラムフロー制御 特殊命令 ロード / ストア 1 ロード / ストア 2 スタック操作 ロード / ストア 3 スタックフレーム相対 01 16 ビット演算命令 32 ビット演算命令 短即値付き演算命 令 短即値付き命令 レジスタ間転送命令 10 分岐命令 - - - 11 32 ビット長命令 1 32 ビット長命令 2 32 ビット長演算命令 ( 並列転送可能 ) - コアレジスタエンコード表 コアレジスタのエンコード表を表 10 に示します。命令フィールド中のレジスタのナンバー / グルー プの指定にはこの値が用いられます。 表 10:コアレジスタエンコード表 Register Group 0 Dreg16_Even 1 Dreg16_Odd 2 Preg 3 DAG_Reg 4 ACC_Reg 5 Loop_Reg 6 Sys_Reg 7 Dreg32 8 Stack_Reg ※ Register Number 0 1 2 d0 d2 d4 d1 d3 d5 p0 p1 p2 m0 l0 n0 a0l a0h a0i c0 s0 e0 st cc pm d1.0 d3.2 d5.4 sc0 ss0 se0 3 d6 d7 p3 d7.6 spc 4 d8 d9 p4 m1 a1l c1 d9.8 sc1 5 d10 d11 p5 l1 a1h s1 d11.10 ss1 6 d12 d13 fp n1 a1i e1 d13.12 se1 7 d14 d15 sp d15.14 sst ※ Stack_Reg に直接アクセスする命令は movst.w 命令のみです。 通常は高速割込み、及び高速割込みからの復帰命令 (rtf 命令 ) が スタックとして使用します。 19 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 7.3 Ximo16A 表記 ここでは各命令の説明で使用するオペランドや操作の略記について定めます。 7.3.1 命令一覧の表記 EA 7.3.2 有効アドレス、及びアドレッシングモードを表します。 IMMbit bit で表されるビット幅を持つ即値を表します。 Dreg16 d0 - d15 までの 16 ビットデータレジスタを表します。 Dreg32 d1.0 - d15.14 までの 32 ビットデータレジスタを表します。 Preg p0 - p5/fp/sp のポインタレジスタを表します。 A a0/a1 のアキュームレータレジスタを表します。 Creg c0/c1 レジスタを表します。 Sreg s0/s1 レジスタを表します。 Ereg e0/e1 レジスタを表します。 (...) メモリ空間へのアドレッシングを表します。 <...> 命令で使用するオプションを表します。 動作説明中の表記 = 右辺から左辺への値の代入を表します。 + 加算を表します。 - 減算を表します。 論理否定を表します。 & 論理和を表します。 ¦ 論理積を表します。 ^ 排他的論理和を表します。 << 左シフトを表します。 >> 右シフトを表します。 == 右辺値と左辺値の比較を表します。 等しい場合、真を、等しくない場合、偽を返します。 MEM[EA] アドレス EA の 16 ビットワードのメモリデータを表します。 LONG_MEM[EA] アドレス EA の 32 ビットロングワードのメモリデータを表します。 Dreg16s ソースとなる 16 ビットデータレジスタを表します。 Dreg16d ディスティネーションとなる 16 ビットデータレジスタを表します。 Dreg32s ソースとなる 32 ビットデータレジスタを表します。 Dreg32d ディスティネーションとなる 32 ビットデータレジスタを表します。 As ソースとなるアキュームレータレジスタを表します。 Ad ディスティネーションとなるアキュームレータレジスタを表します。 Pregs ソースとなるポインタレジスタを表します。 Pregd ディスティネーションとなるポインタレジスタを表します。 Pointer ポインタレジスタが間接アドレッシング用のポインタとして使用される場合に、その ポインタレジスタを表します。 Reg[B] Reg で示されるレジスタの B ビット目を表します。 Reg[MSB:LSB] Reg で示されるレジスタの MSBit から LSBit までの部分を表します。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 20 頁 Ximo16A 7.3.3 21 頁 Preliminary コンディションコード動作の表記 - 値が変化しないビットを表します。 0 命令によって常にクリアされるビットを表します。 1 命令によって常にセットされるビットを表します。 ↑↓ 命令によってセットまたはクリアされるビットを表します。 ↑ 命令によってセットされるビットを表します。 ( クリアはされません。) (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 命令一覧 8 8.1 ロード命令 mov.w Dreg16, (EA) mov.l Dreg32, (EA) mov.w Preg, (EA) mov.w A, (Preg), <s/u> mov.l A, (Preg), <s/u> movp.w d0, (IMM8) 8.2 ストア命令 mov.w (EA), Dreg16 mov.l (EA), Dreg32 mov.w (EA), Preg mov.w (Preg), A, <s/u> mov.l (Preg), A, <s/u> movp.w (IMM8), d0 8.3 スタック操作命令 pop.w Reg push.w Reg pop.l Dreg32 push.l Dreg32 popm.w Reg pushm.w Reg lnk IMM16 ulnk alsp 8.4 即値ロード命令 movi.w Reg, IMM16 movsi.w Dreg16, IMM5 movsi.w Preg, IMM5 movsi.l Dreg32d, IMM5 8.5 レジスタ間転送命令 mov.w Reg, Reg mov.l Dreg32, Dreg32 cmov.w Dreg16, Dreg16, <condition> cmov.l Dreg32, Dreg32, <condition> movs Dreg32, Dreg16 movz Dreg32, Dreg16 mov.w Dreg16, A, <s/u> mov.l Dreg32, A, <s/u> mov.w A, Dreg16, <s/u> mov.l A, Dreg32, <s/u> 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 22 頁 Ximo16A Preliminary mov A, A movst.w d0, Stack_Reg 8.6 movst.w Stack_Reg, d0 加算命令 add.w Dreg16, Dreg16 add.l Dreg32, Dreg32 adc.w Dreg16, Dreg16 add.w Dreg16, Dreg16, Dreg16, <ns/sa> add.l Dreg32, Dreg32, Dreg32, <ns/sa> add.w Preg, Preg adsi.w Dreg16, IMM4 adsi.w Preg, IMM4 adsi.l Dreg32, IMM4 addi.w Dreg16, IMM16 addi.w Preg, IMM16 add A, Dreg16, <s/u> add A, Dreg32, <s/u> add A, A adl A, A 8.7 減算命令 sub.w Dreg16, Dreg16 sub.l Dreg32, Dreg32 sbc.w Dreg16, Dreg16 sub.w Dreg16, Dreg16, Dreg16, <ns/sa> sub.l Dreg32, Dreg32, Dreg32, <ns/sa> sub.w Preg, Preg sbsi.w Dreg16, IMM4 sbsi.w Preg, IMM4 sbsi.l Dreg32, IMM4 subi.w Dreg16, IMM16 subi.w Preg, IMM16 sub A, Dreg16, <s/u> sub A, Dreg32, <s/u> sub A, A sbl A, A 8.8 比較命令 cmp.w Dreg16, Dreg16 cmpi.w Dreg16, IMM16 cmp.l Dreg32, Dreg32 cmp A, A 23 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 8.9 Ximo16A 乗算命令 mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> 8.10 その他の算術命令 neg.w Dreg16, Dreg16, <ns/sa> neg.l Dreg32, Dreg32, <ns/sa> neg A, A abs.w Dreg16, Dreg16 abs.l Dreg32, Dreg32 abs A, A rnd.l Dreg32d, Dreg32s rnd A, A div Dreg32d, Dreg32s sat A, A clr A 8.11 論理演算命令 and.w Dreg16, Dreg16 andi.w Dreg16, IMM16 or.w Dreg16, Dreg16 ori.w Dreg16, IMM16 eor.w Dreg16, Dreg16 eori.w Dreg16, IMM16 com.w Dreg16, Dreg16 8.12 ビット操作命令 bset Dreg16, IMM4 bset (IMM16), IMM4 bclr Dreg16, IMM4 bclr (IMM16), IMM4 btgl Dreg16, IMM4 btst Dreg16, IMM4 8.13 btst (IMM16), IMM4 シフト命令 asl.w Dreg16, Dreg16 asr.w Dreg16, Dreg16 asli.w Dreg16, IMM4 asri.w Dreg16, IMM4 asl.l Dreg32, Dreg32 asr.l Dreg32, Dreg32 asli.l Dreg32, IMM4 asri.l Dreg32, IMM4 asl A, Dreg32 asr A, Dreg32 asli A, IMM4 asri A, IMM4 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 24 頁 Ximo16A Preliminary lsl.w Dreg16, Dreg16 lsr.w Dreg16, Dreg16 lsli.w Dreg16, IMM4 lsri.w Dreg16, IMM4 lsl.l Dreg32, Dreg32 lsr.l Dreg32, Dreg32 lsli.l Dreg32, IMM4 lsri.l Dreg32, IMM4 lsl A, Dreg32 lsr A, Dreg32 lsli A, IMM4 lsri A, IMM4 rol.w Dreg16 ror.w Dreg16 8.14 プログラムフロー制御命令 / 特殊命令 nop dnop jmp Preg jmp IMM16, <condition> call Preg call IMM16 bra IMM7, <condition> loop Creg, IMM16 loopi Creg, IMM16, IMM8 ret rti rtf ftrap trap debug sleep ccp <condition> lea (Preg) 25 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 9 Ximo16A ロード命令 mov.w Dreg16, (EA) mov.l Dreg32, (EA) mov.w Preg, (EA) mov.w A, (Preg), <s/u> mov.l A, (Preg), <s/u> movp.w d0, (IMM8) 概要 : この章ではロード命令について説明します。ロード命令ではメモリ上のデータをコアレジス タへ転送することができます。16 ビットワードデータレジスタ、32 ビットロングワードデータ レジスタ、ポインタレジスタ、アキュームレータレジスタをディスティネーションに取ることが できます。アキュームレータに対しては符号拡張、ゼロ拡張を選択できます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 26 頁 Ximo16A Preliminary mov.w Dreg16, (EA) Load 16-bit data register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 0 10 0 9 Dreg 16d Even /Odd 8 7 6 Dreg16d (Destination Dreg16#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Dreg16d (Destination Dreg16#) 2 1 Pointer Preg# 0 シンタックス : mov.w Dreg16d, (Pointer) mov.w Dreg16d, (Pointer+) mov.w Dreg16d, (Pointer-) mov.w Dreg16d, (Pointer+,m0) mov.w Dreg16d, (Pointer-,m0) mov.w Dreg16d, (Pointer+,m1) mov.w Dreg16d, (Pointer-,m1) 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 Dreg 16d Even /Odd IMM16 シンタックス : mov.w Dreg16d, (IMM16,Pointer) 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 0 10 0 9 8 7 6 5 Dreg IMM6(-64 to -1) 16d Even /Odd 4 3 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : mov.w Dreg16d, (-IMM6,fp) 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 0 6 Dreg 16d Even /Odd 5 4 3 Dreg16d (Destination Dreg16#) 2 X 1 X 0 X IMM16 シンタックス : mov.w Dreg16d, (IMM16) 27 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A オペランド : Dreg16d Pointer IMM16 IMM6 d0 - d15 p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : Dreg16d = MEM[EA] 説明 : それぞれのアドレッシングモードで示される有効アドレスから 16 ビットワードのメモリオ ペランドを読み込み、Dreg16d へ格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w d0, (p0) before after d0 p0 MEM[0x1000] 0x0000 0x1000 0x5555 d0 p0 MEM[0x1000] 0x0000 0x1000 0x5555 d0 p0 MEM[0x1000] 0x5555 0x1000 0x5555 例 2: mov.w d0, (p0+) before after d0 p0 MEM[0x1000] 0x5555 0x1001 0x5555 アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。 例 3: mov.w d0, (0x100,p0) before after d0 p0 MEM[0x1100] 0x0000 0x1000 0x5555 d0 p0 MEM[0x1100] 0x5555 0x1000 0x5555 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 例 4: mov.w d0, (0x1000) before d0 MEM[0x1100] after 0x0000 0x5555 d0 MEM[0x1000] 0x5555 0x5555 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 28 頁 Ximo16A Preliminary mov.l Dreg32, (EA) Load 32-bit data register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 0 10 1 9 0 8 7 6 Dreg32d (Destination Dreg32#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Dreg32d (Destination Dreg32#) 2 1 Pointer Preg# 0 シンタックス : mov.l Dreg32d, (Pointer) mov.l Dreg32d, (Pointer+) mov.l Dreg32d, (Pointer-) mov.l Dreg32d, (Pointer+,m0) mov.l Dreg32d, (Pointer-,m0) mov.l Dreg32d, (Pointer+,m1) mov.l Dreg32d, (Pointer-,m1) 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 7 1 6 0 IMM16 シンタックス : mov.l Dreg32d, (IMM16,Pointer) 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 0 10 1 9 0 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : mov.l Dreg32d, (-IMM6,fp) 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 1 6 0 5 4 3 Dreg32d (Destination Dreg32#) 2 X 1 X 0 X IMM16 シンタックス : mov.l Dreg32d, (IMM16) 29 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A オペランド : Dreg32d Pointer IMM16 IMM6 d1.0 - d15.14 p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : Dreg32d = LONG_MEM[EA] 説明 : それぞれのアドレッシングモードで示される有効アドレスから 32 ビットロングワードのメ モリオペランドを読み込み、Dreg32d へ格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接 + 後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.l d1.0, (p0) before d1.0 p0 MEM[0x1000] MEM[0x1001] after 0x00000000 0x1000 0x5555 0x4444 d1.0 p0 MEM[0x1000] MEM[0x1001] 0x00000000 0x1000 0x5555 0x4444 d1.0 p0 MEM[0x1000] MEM[0x1001] 0x44445555 0x1000 0x5555 0x4444 例 2: mov.l d1.0, (p0+) before d1.0 p0 MEM[0x1000] MEM[0x1001] after 0x44445555 0x1002 0x5555 0x4444 アドレス 0x1000 からロードした後に p0 がインクリメント (+2) されます。 例 3: mov.l d1.0, (0x100,p0) before d1.0 p0 MEM[0x1100] MEM[0x1101] after 0x00000000 0x1000 0x5555 0x4444 d1.0 p0 MEM[0x1100] MEM[0x1101] 0x44445555 0x1000 0x5555 0x4444 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 例 4: mov.l d1.0, (0x1000) before d1.0 MEM[0x1100] MEM[0x1101] 2013.12.20 版 after 0x00000000 0x5555 0x4444 d1.0 MEM[0x1000] MEM[0x1101] 0x44445555 0x5555 0x4444 (C) 2009-2013 New Japan Radio Co., Ltd. 30 頁 Ximo16A Preliminary 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 31 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.w Preg, (EA) Load pointer register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 0 10 1 9 1 8 7 6 Pregd (Destination Preg#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Pregd (Destination Preg#) 2 1 Pointer Preg# 0 シンタックス : mov.w Pregd, (Pointer) mov.w Pregd, (Pointer+) mov.w Pregd, (Pointer-) mov.w Pregd, (Pointer+,m0) mov.w Pregd, (Pointer-,m0) mov.w Pregd, (Pointer+,m1) mov.w Pregd, (Pointer-,m1) 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 7 1 6 1 IMM16 シンタックス : mov.w Pregd, (IMM16,Pointer) 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 0 10 1 9 1 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 0 Pregd (Destination Preg#) シンタックス : mov.w Pregd, (-IMM6,fp) 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 1 6 1 5 4 3 Pregd (Destination Preg#) 2 X 1 X 0 X IMM16 シンタックス : mov.w Pregd, (IMM16) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 32 頁 Ximo16A Preliminary オペランド : Pregd Pointer IMM16 IMM6 p0 - p5/fp/sp p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : Pregd = MEM[EA] 説明 : それぞれのアドレッシングモードで示される有効アドレスから 16 ビットワードのメモリオ ペランドを読み込み、Preg へ格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w p0, (p0) before after p0 MEM[0x1000] 0x1000 0x5555 p0 MEM[0x1000] 0x0000 0x1000 0x5555 p1 p0 MEM[0x1000] 0x5555 0x5555 例 2: mov.w p1, (p0+) before after p1 p0 MEM[0x1000] 0x5555 0x1001 0x5555 アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。 例3 mov.w p1, (0x100,p0) before after p1 p0 MEM[0x1100] 0x0000 0x1000 0x5555 p1 p0 MEM[0x1100] 0x5555 0x1000 0x5555 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 例 4: mov.w p1, (0x1000) before p1 MEM[0x1100] after 0x0000 0x5555 p1 MEM[0x1000] 0x5555 0x5555 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 この命令で 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新版を用いてポインタの 33 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 自動更新を行なう場合、Pregs と Pointer に同じレジスタを取ることは出来ません。 例 : × mov.w p4, (p4-) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 34 頁 Ximo16A Preliminary mov.w A, (Preg), <s/u> Load accumulator (word operand) bit 15 0 14 0 13 1 12 0 11 0 10 0 9 0 8 0 7 s/u s:0 u:1 6 5 4 3 Ad Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 シンタックス : mov.w Ad, (Pointer), <s/u> mov.w Ad, (Pointer+), <s/u> mov.w Ad, (Pointer-), <s/u> mov.w Ad, (Pointer+,m0), <s/u> mov.w Ad, (Pointer-,m0), <s/u> mov.w Ad, (Pointer+,m1), <s/u> mov.w Ad, (Pointer-,m1), <s/u> オペランド : Ad Pointer a0/a1 p0 - p5/fp/sp オペレーション : Ad = MEM[EA] << 16 説明 : Pointer が示すアドレスから 16 ビットワードのメモリオペランドを読み込み、16 ビット左シ フトして Ad へ格納します。<s/u> オプションでメモリオペランドを符号拡張するか、ゼロ拡張 するか選択します。 ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って ポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例: mov.w a0, (p0+), s before a0 p0 MEM[0x2020] after 0x0000000001 0x2020 0xFC76 a0 p0 MEM[0x2020] 0xFFFC760000 0x2021 0xFC76 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 35 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.l A, (Preg), <s/u> Load accumulator (long word operand) bit 15 0 14 0 13 1 12 0 11 0 10 0 9 0 8 1 7 s/u s:0 u:1 6 5 4 3 Ad Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 シンタックス : mov.l Ad, (Pointer), <s/u> mov.l Ad, (Pointer+), <s/u> mov.l Ad, (Pointer-), <s/u> mov.l Ad, (Pointer+,m0), <s/u> mov.l Ad, (Pointer-,m0), <s/u> mov.l Ad, (Pointer+,m1), <s/u> mov.l Ad, (Pointer-,m1), <s/u> オペランド : Ad Pointer a0/a1 p0 - p5/fp/sp オペレーション : Ad = LONG_MEM[EA] 説明 : Pointer が示すアドレスから 32 ビットロングワードのメモリオペランドを読み込み、Ad へ格 納します。<s/u> オプションでメモリオペランドを符号拡張するか、ゼロ拡張するか選択します。 ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って ポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例: mov.l a0, (p0+), s before a0 p0 MEM[0x2020] MEM[0x2021] after 0x0100010001 0x2020 0xFC76 0x0123 a0 p0 MEM[0x2020] MEM[0x2021] 0x000123FC76 0x2022 0xFC76 0x0123 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 36 頁 Ximo16A Preliminary movp.w d0, (IMM8) Load from peripherals bit 15 0 14 0 13 1 12 0 11 0 10 1 9 0 8 X 7 6 IMM8 5 4 3 2 1 0 シンタックス : movp.w d0, (IMM8) オペランド : IMM8 0 - 255 オペレーション : d0 = MEM[IMM8] 説明 : アドレス 0 ∼ 255 のメモリオペランドを d0 レジスタへ格納します。I/O 領域アクセスに用い る命令です。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ 0 C: 常にクリアされます。 Z: ロードされるデータがゼロの場合にセットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: ロードされるデータの最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: movp.w d0, (0x30) before d0 MEM[0x0030] st after 0x0000 0xFC76 0x0000 d0 MEM[0x0030] st 0xFC76 0xFC76 0x0008 N=1 補足: この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。 37 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 10 ストア命令 mov.w (EA), Dreg16 mov.l (EA), Dreg32 mov.w (EA), Preg mov.w (Preg), A, <s/u> mov.l (Preg), A, <s/u> movp.w (IMM8), d0 概要 : この章ではストア命令について説明します。ストア命令ではコアレジスタの内容をメモリへ 転送します。16 ビットワードデータレジスタ、32 ビットロングワードデータレジスタ、ポイン タレジスタ、アキュームレータレジスタをソースに取ることができます。アキュームレータに対 しては飽和処理を選択することができます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 38 頁 Ximo16A Preliminary mov.w (EA), Dreg16 Store 16-bit data register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 1 10 0 9 Dreg 16s Even /Odd 8 7 6 Dreg16s (Source Dreg16#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Dreg16s (Source Dreg16#) 2 1 Pointer Preg# 0 シンタックス : mov.w (Pointer), Dreg16s mov.w (Pointer+), Dreg16s mov.w (Pointer-), Dreg16s mov.w (Pointer+,m0), Dreg16s mov.w (Pointer-,m0), Dreg16s mov.w (Pointer+,m1), Dreg16s mov.w (Pointer-,m1), Dreg16s 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 0 6 Dreg 16s Even /Odd IMM16 シンタックス : mov.w (IMM16,Pointer), Dreg16s 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 1 10 0 9 8 7 6 5 Dreg IMM6(-64 to -1) 16s Even /Odd 4 3 2 1 0 Dreg16s (Source Dreg16#) シンタックス : mov.w (-IMM6,fp), Dreg16s 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 0 6 Dreg 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 X 1 X 0 X IMM16 シンタックス : mov.w (IMM16), Dreg16s 39 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A オペランド : Dreg16s Pointer IMM16 IMM6 d0 - d15 p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : MEM[EA] = Dreg16d 説明 : Dreg16s の内容を、それぞれのアドレッシングモードで示される 16 ビットメモリオペラン ドへ格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w (p0), d0 before after d0 p0 MEM[0x1000] 0x5555 0x1000 0x0000 d0 p0 MEM[0x1000] 0x5555 0x1000 0x0000 d0 p0 MEM[0x1000] 0x5555 0x1000 0x5555 例 2: mov.w (p0+), d0 before after d0 p0 MEM[0x1000] 0x5555 0x1001 0x5555 アドレス 0x1000 へストアした後に p0 がインクリメント (+1) されます。 例 3: mov.w (0x100,p0), d0 before after d0 p0 MEM[0x1100] 0x5555 0x1000 0x0000 d0 p0 MEM[0x1100] 0x5555 0x1000 0x5555 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 例 4: mov.w (0x1000), d0 before d0 MEM[0x1100] after 0x5555 0x0000 d0 MEM[0x1000] 0x5555 0x5555 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 40 頁 Ximo16A Preliminary mov.l (EA), Dreg32 Store 32-bit data register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 1 10 1 9 0 8 7 6 Dreg32s (Source Dreg32#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 Pointer Preg# 0 シンタックス : mov.l (Pointer), Dreg32s mov.l (Pointer+), Dreg32s mov.l (Pointer-), Dreg32s mov.l (Pointer+,m0), Dreg32s mov.l (Pointer-,m0), Dreg32s mov.l (Pointer+,m1), Dreg32s mov.l (Pointer-,m1), Dreg32s 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 1 6 0 IMM16 シンタックス : mov.l (IMM16,Pointer), Dreg32s 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 1 10 1 9 0 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 0 Dreg32s (Source Dreg32#) シンタックス : mov.l (-IMM6,fp), Dreg32s 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 X 1 X 0 X IMM16 シンタックス : mov.l (IMM16), Dreg32s 41 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A オペランド : Dreg32s Pointer IMM16 IMM6 d1.0 - d15.14 p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : LONG_MEM[EA] = Dreg32s 説明 : Dreg32s の内容を、それぞれのアドレッシングモードで示される 32 ビットロングワードの メモリオペランドへ格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.l d1.0, (p0) before d1.0 p0 MEM[0x1000] MEM[0x1001] after 0x44445555 0x1000 0x0000 0x0000 d1.0 p0 MEM[0x1000] MEM[0x1001] 0x44445555 0x1000 0x0000 0x0000 d1.0 p0 MEM[0x1000] MEM[0x1001] 0x44445555 0x1000 0x5555 0x4444 例 2: mov.l d1.0, (p0+) before d1.0 p0 MEM[0x1000] MEM[0x1001] after 0x44445555 0x1002 0x5555 0x4444 アドレス 0x1000 からロードした後に p0 がインクリメント (+2) されます。 例 3: mov.l d1.0, (0x100,p0) before d1.0 p0 MEM[0x1100] MEM[0x1101] after 0x44445555 0x1000 0x0000 0x0000 d1.0 p0 MEM[0x1100] MEM[0x1101] 0x44445555 0x1000 0x5555 0x4444 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 42 頁 Ximo16A Preliminary mov.w (EA), Preg Store pointer register EA は以下に示すアドレッシングモードを代表しています。 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新 bit 15 0 14 0 13 0 12 1 11 1 10 1 9 1 8 7 Pregs (Source Preg#) 6 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 6 1 5 4 3 Pregs (Source Dreg32#) 2 1 Pointer Preg# 0 3 2 1 Pregs (Source Preg#) 0 3 2 X 0 X シンタックス : mov.w (Pointer), Pregs mov.w (Pointer+), Pregs mov.w (Pointer-), Pregs mov.w (Pointer+,m0), Pregs mov.w (Pointer-,m0), Pregs mov.w (Pointer+,m1), Pregs mov.w (Pointer-,m1), Pregs 2. オフセット付きポインタレジスタ間接 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 1 IMM16 シンタックス : mov.w (IMM16,Pointer), Pregs 3. 6 ビットオフセット付きフレームポインタレジスタ間接 bit 15 0 14 0 13 1 12 1 11 1 10 1 9 1 8 7 6 5 IMM6(-64 to -1) 4 シンタックス : mov.w (-IMM6,fp), Pregs 4. 絶対アドレス bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 1 6 1 5 4 Pregs (Source Preg#) 1 X IMM16 シンタックス : mov.w (IMM16), Pregs 43 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A オペランド : Pregs Pointer IMM16 IMM6 p0 - p5/fp/sp p0 - p5/fp/sp 0x0000 - 0xFFFF -64 - -1 (0x00 - 0x3F) オペレーション : MEM[EA] = Pregs 説明 : Pregs の内容を、それぞれのアドレッシングモードで示される 16 ビットメモリオペランドへ 格納します。 ポインタレジスタの自動更新 (1. ポインタレジスタ間接+後更新 ) ではアドレッシングモード の指示に従ってポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w (p1), p0 before after p0 p1 MEM[0x1000] 0x5555 0x1000 0x0000 p0 p1 MEM[0x1000] 0x1000 0x0000 p1 MEM[0x1000] 0x5555 0x1000 0x5555 例 2: mov.w (p0+), p0 before after p0 MEM[0x1000] 0x1001 0x1000 アドレス 0x1000 からロードした後に p0 がインクリメント (+1) されます。 例 3: mov.w p1, (0x100,p0) before after p1 p0 MEM[0x1100] 0x5555 0x1000 0x0000 p1 p0 MEM[0x1100] 0x5555 0x1000 0x5555 有効アドレスは p0 に displacement である 0x100 を加算した 0x1100 になります。 例 4: mov.w p1, (0x1000) before p1 MEM[0x1100] after 0x5555 0x0000 p1 MEM[0x1000] 0x5555 0x5555 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 この命令で 1. ポインタレジスタ間接 / ポインタレジスタ間接 + 後更新版を用いてポインタの 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 44 頁 Ximo16A Preliminary 自動更新を行いながら、そのポインタレジスタをストアする場合、ストアされる値は自動更新前 の値です。 45 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.w (Preg), A, <s/u> Store accumulator (word operand) bit 15 0 14 0 13 1 12 0 11 1 10 0 9 0 8 0 7 s/u s:0 u:1 6 5 4 3 As Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 シンタックス : mov.w (Pointer), As, <s/u> mov.w (Pointer+), As, <s/u> mov.w (Pointer-), As, <s/u> mov.w (Pointer+,m0), As, <s/u> mov.w (Pointer-,m0), As, <s/u> mov.w (Pointer+,m1), As, <s/u> mov.w (Pointer-,m1), As, <s/u> オペランド : As Pointer a0/a1 p0 - p5/fp/sp オペレーション : MEM[EA] = As[31:16] 説明 : アキュームレータ As のビット 31 から 16 を Pointer が示す 16 ビットメモリオペランドへ格 納します。s オプションが指示される場合、As の値に対して飽和処理が行なわれます。As の値 は変化しません。 ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って ポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w (p0+), a0, u before a0 p0 MEM[0x2020] after 0xFC76543210 0x2020 0x0000 a0 p0 MEM[0x2020] 0xFC76543210 0x2021 0x7654 例 1: mov.w (p0+), a0, s before a0 p0 MEM[0x2020] after 0xFC76543210 0x2020 0x0000 a0 p0 MEM[0x2020] 0xFC76543210 0x2021 0x8000 0xFC 7654 は 0x8000 へ制限されます。 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 46 頁 Ximo16A Preliminary 飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処 理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 47 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.l (Preg), A, <s/u> Store accumulator (long word operand) bit 15 0 14 0 13 1 12 0 11 1 10 0 9 0 8 1 7 s/u s:0 u:1 6 5 4 3 As Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 シンタックス : mov.l (Pointer), As, <s/u> mov.l (Pointer+), As, <s/u> mov.l (Pointer-), As, <s/u> mov.l (Pointer+,m0), As, <s/u> mov.l (Pointer-,m0), As, <s/u> mov.l (Pointer+,m1), As, <s/u> mov.l (Pointer-,m1), As, <s/u> オペランド : As Pointer a0/a1 p0 - p5/fp/sp オペレーション : LONG_MEM[EA] = Ad[31:0] 説明 : アキュームレータ As のビット 31 から 0 を Pointer が示す 32 ビットロングワードのメモリ オペランドへ格納します。s オプションが指示される場合、As の値に対して飽和処理が行なわ れます。As の値は変化しません。 ポインタレジスタの自動更新が指定されている場合、アドレッシングモードの指示に従って ポインタレジスタの値が更新されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.l (p0+), a0, u before a0 p0 MEM[0x2020] MEM[0x2021] after 0xFC76543210 0x2020 0x0000 0x0000 a0 p0 MEM[0x2020] MEM[0x2021] 0xFC76543210 0x2022 0x3210 0x7654 例 1: mov.l (p0+), a0, s before a0 p0 MEM[0x2020] MEM[0x2021] after 0xFC76543210 0x2020 0x0001 0x0000 a0 p0 MEM[0x2020] MEM[0x2021] 0xFC76543210 0x2021 0x0000 0x8000 0xFC 7654 3210 は 0x8000 0000 へ制限されます。 補足: 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 48 頁 Ximo16A Preliminary アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 49 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A movp.w (IMM8), d0 Store to peripherals bit 15 0 14 0 13 1 12 0 11 1 10 1 9 0 8 X 7 6 IMM8 5 4 3 2 1 0 シンタックス : movp.w (IMM8), d0 オペランド : IMM8 0 - 255 オペレーション : MEM[IMM8] = d0 説明 : d0 レジスタの内容をアドレス 0 ∼ 255 のメモリオペランドへ格納します。I/O 領域アクセス に用いる命令です。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movp.w (0x30), d0 before d0 MEM[0x0030] after 0x0000 0xFC76 d0 MEM[0x0030] 0xFC76 0xFC76 補足: この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 50 頁 Ximo16A Preliminary 11 スタック操作命令 pop.w Reg push.w Reg pop.l Dreg32 push.l Dreg32 popm.w Reg pushm.w Reg lnk IMM16 ulnk alsp 概要 : この章ではスタック操作命令について説明します。スタックトップを指示するスタックポイ ンタには sp レジスタが使用されます。スタックの成長方向は下位アドレス方向で、スタックへ のプッシュ時は sp をプリデクリメントします。スタックへのレジスタの保存及び復帰のための、 push/pop 命令があります。 関数呼び出しに伴うスタック領域の操作では、スタックフレーム用のポインタとして fp レジ スタの使用を前提としています。これらをサポートするために link/unlink 命令が用意されていま す。 51 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A pop.w Reg Pop register bit 15 0 14 0 13 1 12 0 11 0 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : pop.w Regd オペランド : Regd d0 - d15 p0 - p5/fp a0i/a0h/a0l/a1i/a1h/a1l m0/m1/l0/l1/n0/n1 c0/c1/s0/s1/e0/e1 st/pm/cc オペレーション : Regd = MEM[sp] sp = sp + 1 説明 : sp レジスタの指すアドレスからメモリオペランドを読み出し、Regd へ格納します。sp はそ の後でインクリメント (+1) されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例: pop.w a0h before a0 sp MEM[0x0122] after 0x0000000000 0x0122 0xAAAA a0 sp MEM[0x0122] 0x00AAAA0000 0x0123 0xAAAA 補足 : sp レジスタ自身を pop することはできません。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 52 頁 Ximo16A Preliminary pop.l Dreg32 Pop 32-bit data register bit 15 0 14 0 13 1 12 0 11 0 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : pop.l Dreg32d オペランド : Dreg32d d1.0 - d15.14 オペレーション : Dreg32d = LONG_MEM[sp] sp = sp + 2 説明 : sp レジスタの指すアドレスから 32 ビットロングワードのメモリオペランドを読み出し、 Dreg32d へ格納します。sp はその後でインクリメント (+2) されます。 コンディションコード : U - E - S - F - N - V - Z - C - 例: pop.l d5.4 before d5.4 sp MEM[0x0122] MEM[0x0123] after 0x00000000 0x0122 0x1234 0x5678 d5.4 sp MEM[0x0122] MEM[0x0123] 0x56781234 0x0124 0x1234 0x5678 補足 : 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 53 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A popm.w Reg Pop multiple register bit 15 0 14 0 13 1 12 0 11 0 10 0 9 1 8 1 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : popm.w Regd オペランド : Regd d0 - d15 p0 - p5 説明 : Dreg16 版では d15 レジスタから指定されたレジスタまでを、連続して pop します。 Preg 版では p5 レジスタから指定されたレジスタまでを、連続して pop します。 例 1: popm.w d13 この命令は以下の手続きと同じ結果が得られます。 pop.w d15 pop.w d14 pop.w d13 例 2: popm.w p3 この命令は以下の手続きと同じ結果が得られます。 pop.w p5 pop.w p4 pop.w p3 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 54 頁 Ximo16A Preliminary push.w Reg push register bit 15 0 14 0 13 1 12 0 11 1 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : push.w Regs オペランド : Regs d0 - d15 p0 - p5/fp a0i/a0h/a0l/a1i/a1h/a1l m0/m1/l0/l1/n0/n1 c0/c1/s0/s1/e0/e1 st/pm/cc オペレーション : sp = sp - 1 MEM[sp] = Regs 説明 : sp レジスタをデクリメント (-1) し、そのアドレスの示すメモリに Regs の内容を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: push.w d0 before d0 sp MEM[0x0122] after 0x2222 0x0123 0x0000 d0 sp 0x2222 0x0122 0x2222 補足 : sp レジスタ自身を push することはできません。 55 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A push.l Dreg32 push 32-bit data register bit 15 0 14 0 13 1 12 0 11 1 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : push.l Dreg32s オペランド : Dreg32s d1.0 - d15.14 オペレーション : sp = sp - 2 LONG_MEM[sp] = Dreg32s 説明 : sp レジスタをデクリメント (-2) し、そのアドレスの示すロングワードのメモリに Dreg32s の 内容を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: push.l d1.0 before d1.0 sp MEM[0x0120] MEM[0x0121] after 0x22221111 0x0122 0x0000 0x0000 d1.0 sp MEM[0x0120] MEM[0x0121] 0x22221111 0x0120 0x1111 0x2222 補足 : 32 ビットロングワードのメモリアクセスは偶数アドレス境界から行なわなければなりませ ん。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 56 頁 Ximo16A Preliminary pushm.w Reg Push multiple register bit 15 0 14 0 13 1 12 0 11 1 10 0 9 1 8 1 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 シンタックス : pushm.w Regs オペランド : Regs d0 - d15 p0 - p5 説明 : Dreg16 版では指定されたレジスタから d15 レジスタまでを、連続して push します。 Preg 版では指定されたレジスタから p5 レジスタまでを、連続して push します。 例 1: pushm.w d13 この命令は以下の手続きと同じ結果が得られます。 push.w d13 push.w d14 push.w d15 例 2: pushm.w p3 この命令は以下の手続きと同じ結果が得られます。 pushm.w p3 pushm.w p4 pushm.w p5 57 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lnk IMM16 Link bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 0 4 X 3 X 2 X 1 X 0 X シンタックス : lnk オペランド : IMM16 0x0000 - 0xFFFF オペレーション : sp = sp - 1 MEM[sp] = fp fp = sp sp = sp - IMM16 説明 : fp レジスタをスタックに push します。このときのスタックトップのアドレスを fp に格納し、 その後 sp レジスタから IMM16 を減算します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: lnk 0xFF before after sp fp MEM[0x03FF] 0x0400 0x0501 0x0000 sp fp MEM[0x03FF] 0x0300 0x03FF 0x0501 補足 : 関数呼び出しにおけるローカル変数領域の構築を行ないます。 次の手続きと同じ結果が得られます。 push.w fp mov.w fp, sp subi.w sp, IMM16 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 58 頁 Ximo16A Preliminary ulnk Unlink bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 1 0 0 オペランド : - - オペレーション : sp = fp fp = MEM[sp] sp = sp + 1 説明 : fp の内容を sp に格納した後、pop.w fp を実行します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: ulnk before sp fp MEM[0x03FF] after 0x0300 0x03FF 0x0501 sp fp MEM[0x03FF] 0x4000 0x0501 0x0501 補足 : lnk 命令によって構築したスタック領域を破棄します。 次の手続きと同じ結果が得られます。 mov.w sp, fp pop.w fp 59 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A alsp Align stack pointer bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 1 0 1 オペランド : - - オペレーション : sp_new = (sp_old - 1) & 0xFFFE MEM[sp_new] = sp_old 説明 : sp から 1 を減算したのち、最下位ビットを 0 にします。その後、変更前の sp の値を、新し い sp が指すアドレスへストアします。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: alsp before sp MEM[0x0200] after 0x0201 0x0000 sp 0x0200 0x0000 sp 0x0200 0x0201 例 2: alsp before sp MEM[0x01FE] after 0x01FE 0x0200 補足 : スタックトップを強制的に偶数アドレスに整列します。次の命令を実行することで alsp 命令 実行前のスタックトップに戻ることができます。 mov.w sp, (sp) 割込みハンドラの開始時などではスタックトップの境界を偶数アドレスに保証することは困 難です。割込みハンドラでスタックトップの偶数アドレス境界を保証する必要がある場合には次 のように実装してください。 _INTERRUPT_HANDLER_: alsp .... -- start interrupt handler .... .... mov.w sp, (sp) rti 2013.12.20 版 -- return from handler (C) 2009-2013 New Japan Radio Co., Ltd. 60 頁 Ximo16A Preliminary 12 即値ロード命令 movi.w Reg, IMM16 movsi.w Dreg16, IMM5 movsi.w Preg, IMM5 movsi.l Dreg32d, IMM5 概要 : この章では即値ロード命令について説明します。即値ロード命令は命令中に埋め込まれた即 値フィールドの値をコアレジスタへ転送します。 61 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A movi.w Reg, IMM16 Load immediate to register bit 15 1 14 1 13 0 12 0 11 0 10 1 9 0 8 X 7 X 6 X 5 4 3 Destination Register Group# 2 1 0 Regd (Destination Register#) IMM16 シンタックス : movi.w Regd, IMM16 オペランド : Regd d0 - d15 p0 - p5/fp/sp m0/m1/l0/l1/n0/n1 a0i/a0h/a0l/a1i/a1h/a1l c0/c1/s0/s1/e0/e1 st/cc/pm 0x0000 - 0xFFFF IMM16 オペレーション : Regd = IMM16 説明 : Regd へ即値 IMM16 を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movi.w d0, 0x5555 before d0 after 0x0000 d0 0x5555 補足: 8 ビットレジスタ a0i/a1i/cc をディスティネーションとする場合、16 ビット即値の上位 8 ビッ トは無視されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 62 頁 Ximo16A Preliminary movsi.w Dreg16, IMM5 Load short immediate to 16-bit data register bit 15 0 14 1 13 1 12 0 11 1 10 0 9 0 8 7 6 5 IMM5(-16 to 15) 4 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : movsi.w Dreg16d, IMM5 オペランド : Dreg16d IMM5 d0 - d15 -16 - 15 オペレーション : Dreg16d = IMM5 説明 : Dreg16d へ即値 IMM5 を符号拡張して格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movsi.w d0, -7 before d0 after 0x0000 d0 0xFFF9 補足: IMM5 は符号付き数として扱われます。 63 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A movsi.w Preg, IMM5 Load short immediate to pointer register bit 15 0 14 1 13 1 12 0 11 1 10 0 9 1 8 7 6 5 IMM5(-16 to 15) 4 3 1 2 1 0 Pregd (Destination Preg#) シンタックス : movsi.w Preg, IMM5 オペランド : Dreg16d IMM5 p0 - p5/fp/sp -16 - 15 オペレーション : Pregd = IMM5 説明 : Pregd へ即値 IMM5 を符号拡張して格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movsi.w p0, -7 before p0 after 0x0000 p0 0xFFF9 補足: IMM5 は符号付き数として扱われます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 64 頁 Ximo16A Preliminary movsi.l Dreg32d, IMM5 Load short immediate to 32-bit data register bit 15 0 14 1 13 1 12 0 11 1 10 0 9 1 8 7 6 5 IMM5(-16 to 15) 4 3 0 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : movsi.l Dreg32d, IMM5 オペランド : Dreg32d IMM5 d1.0 - d15.14 -16 - 15 オペレーション : Dreg32d = IMM5 説明 : Dreg32d へ即値 IMM5 を符号拡張して格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movsi.l d1.0, -7 before d1.0 after 0x00000000 d1.0 0xFFFFFFF9 補足: IMM5 は符号付き数として扱われます。 65 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 13 レジスタ間転送命令 mov.w Reg, Reg mov.l Dreg32, Dreg32 cmov.w Dreg16, Dreg16, <condition> cmov.l Dreg32, Dreg32, <condition> movs Dreg32, Dreg16 movz Dreg32, Dreg16 mov.w Dreg16, A, <s/u> mov.l Dreg32, A, <s/u> mov.w A, Dreg16, <s/u> mov.l A, Dreg32, <s/u> mov A, A movst.w d0, Stack_Reg movst.w Stack_Reg, d0 概要 : この章ではレジスタ間転送命令について説明します。レジスタ間転送命令はコアレジスタの 間でデータを転送します。アキュームレータレジスタ a0/a1 を対象とする転送では符号拡張 / ゼ ロ拡張 / 飽和処理などが選択できます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 66 頁 Ximo16A Preliminary mov.w Reg, Reg Move register bit 15 0 14 1 13 1 12 1 11 10 9 Source Register Group# 8 7 6 Destination Register Group# 5 4 3 Regs (Source Register#) 2 1 0 Regd (Destination Register#) シンタックス : mov.w Regd, Regs オペランド : 転送命令が取れるレジスタの組み合わせには次のものがあります。 1. Regd d0 - d15 p0 - p5/fp/sp m0/m1/l0/l1/n0/n1 d0 - d15 p0 - p5/fp/sp m0/m1/l0/l1/n0/n1 Regs 2. Regd a0i/a0h/a0l/a1i/a1h/a1l c0/c1/s0/s1/e0/e1 st/cc/pm d0 - d15 Regs 3. Regd Regs d0 - d15 a0i/a0h/a0l/a1i/a1h/a1l c0/c1/s0/s1/e0/e1 st/cc/pm オペレーション : Regd = Regs 説明 : Regs の内容を Regd に格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.w d0, a0h before d0 a0h 67 頁 after 0x0000 0x0123 d0 a0h 0x0123 0x0123 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 例 2: mov.w d10, a1i before d10 a1i after 0x0000 0xC0 d10 a1i 0xFFC0 0xC0 補足: 8 ビットレジスタ a0i/a1i をソースとする場合はビット 7 から符号拡張した値がディスティ ネーションに書き込まれます。 a0i/a1i をディスティネーションとする場合、ソースの上位 8 ビットは無視されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 68 頁 Ximo16A Preliminary mov.l Dreg32, Dreg32 Move 32-bit data register bit 15 0 14 1 13 1 12 1 11 10 9 Dreg32:111 8 7 6 Dreg32:111 5 4 3 Regs (Source Register#) 2 1 0 Regd (Destination Register#) シンタックス : mov.l Dreg32d, Dreg32d オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32s 説明 : Dreg32s の内容を Dreg32d に格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例 1: mov.l d1.0, d3.2 before d1.0 d3.2 69 頁 after 0x00000000 0x01234567 d1.0 d3.2 0x01234567 0x01234567 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A cmov.w Dreg16, Dreg16, <condition> Conditional move 16-bit data register bit 15 1 X 14 1 X 13 0 X 12 1 X 11 10 0 0 Dreg X 16s Even /Odd 9 8 7 0 0 0 Dreg16s (Source Dreg16#) 6 1 X 5 0 X 4 3 conditon X Dreg 16d Even /Odd 2 1 0 Dreg16d (Destintaion Dreg16#) シンタックス : cmov.w Dreg16d, Dreg16s, <condition> オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : If (condition == true) then Dreg16d = Dreg16s Endif 説明 : condition フィールドにより指示された条件が成り立っている場合に、Dreg16s の内容を Dreg16d へ格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: cmov.w d1, d0, ns before d0 d1 st 2013.12.20 版 after 0x1111 0x0000 0x0008 N=1 d0 d1 st 0x1111 0x1111 0x0008 (C) 2009-2013 New Japan Radio Co., Ltd. 70 頁 Ximo16A Preliminary cmov.l Dreg32, Dreg32, <condition> Conditional move 32-bit data register bit 15 1 X 14 1 X 13 0 X 12 1 X 11 0 X 10 0 X 9 8 7 0 0 0 Dreg32s (Source Dreg32#) 6 1 X 5 1 X 4 3 2 1 0 conditon X X Dreg32d (Destintaion Dreg32#) シンタックス : cmov.l Dreg32d, Dreg32s, <condition> オペランド : Dreg16d Dreg16s d1.0 - d14.15 d1.0 - d14.15 オペレーション : If (condition == true) then Dreg32d = Dreg32s Endif 説明 : condition フィールドにより指示された条件が成り立っている場合に、Dreg32s の内容を Dreg32d へ格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: cmov.l d1.0, d3.2, ns before d1.0 d3.2 st 71 頁 after 0x11112222 0x00000000 0x0008 N=1 d1.0 d3.2 st 0x11112222 0x11112222 0x0008 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A movs Dreg32, Dreg16 Move register with sign extend bit 15 0 14 1 13 0 12 1 11 0 10 1 9 0 8 0 7 6 Dreg X 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : movs Dreg32d, Dreg16s オペランド : Dreg32d Dreg16s d1.0 - d15.14 d0 - d15 オペレーション : Dreg32d = sign_extend(Dreg16s) 説明 : Dreg16s の最上位ビットを符号ビットとして符号拡張し、Dreg32d に格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movs d3.2, d0 before d0 d3.2 2013.12.20 版 after 0xA987 0x01234567 d0 d3.2 0xA987 0xFFFFA987 (C) 2009-2013 New Japan Radio Co., Ltd. 72 頁 Ximo16A Preliminary movz Dreg32, Dreg16 Move register with zero extend bit 15 0 14 1 13 0 12 1 11 0 10 1 9 0 8 1 7 6 Dreg X 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : movz Dreg32d, Dreg16s オペランド : Dreg32d Dreg16s d1.0 - d15.14 d0 - d15 オペレーション : Dreg32d = zero_extend(Dreg16s) 説明 : Dreg16s をゼロ拡張して、Dreg32d に格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movz d3.2, d0 before d0 d3.2 73 頁 after 0xA987 0x01234567 d0 d3.2 0xA987 0x0000A987 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.w Dreg16, A, <s/u> Move accumulator to 16-bit data register bit 15 1 X 14 1 s/u s:0 u:1 13 12 1 0 As X a0:0 a1:1 11 P X 10 0 X 9 1 X 8 0 X 7 0 X 6 0 X 5 0 X 4 0 X 3 X Dreg 16d Even /Odd 2 1 0 X X X Dreg16d (Destination Dreg16#) シンタックス : mov.w Dreg16d, As, <s/u> オペランド : Dreg16d As d0 - d15 a0/a1 オペレーション : Dreg16d = As[31:16] 説明 : アキュームレータ As のビット 31 から 16 を Dreg16d へ格納します。s オプションが指示さ れる場合、As の値に対して飽和処理が行なわれます。As の値は変化しません。 コンディションコード : U - E - S ↑ F - N - V - Z - C - S: 飽和処理が行なわれた場合にセットされます。 例 1: mov.w d0, a0, u before d0 a0 st after 0x0000 0xFC76543210 0x0000 d0 a0 st 0x7654 0xFC76543210 0x0000 例 2: mov.w d0, a0, s before d0 a0 st after 0x0000 0xFC76543210 0x0000 d0 a0 st 0x8000 0xFC76543210 0x0020 S=1 0xFC 7654 は 0x8000 へ制限されます。 補足 : 飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処 理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 74 頁 Ximo16A Preliminary mov.l Dreg32, A, <s/u> Move accumulator to 32-bit data register bit 15 1 X 14 1 s/u s:0 u:1 13 12 1 0 As X a0:0 a1:1 11 P X 10 0 X 9 1 X 8 0 X 7 0 X 6 0 X 5 0 X 4 1 X 3 X X 2 1 0 X X X Dreg32d (Destination Dreg32#) シンタックス : mov.l Dreg32d, As, <s/u> オペランド : Dreg32d As d1.0 - d15.14 a0/a1 オペレーション : Dreg32d = As[31:0] 説明 : アキュームレータ As のビット 31 から 0 を Dreg32d へ格納します。s オプションが指示され る場合、As の値に対して飽和処理が行なわれます。As の値は変化しません。 コンディションコード : U - E - S ↑ F - N - V - Z - C - S: 飽和処理が行なわれた場合にセットされます。 例 1: mov.l d1.0, a0, u before d1.0 a0 st after 0x00000000 0xFC76543210 0x0000 d1.0 a0 st 0x76543210 0xFC76543210 0x0000 例 2: mov.w d0, a0, s before d1.0 a0 st after 0x00000000 0xFC76543210 0x0000 d1.0 a0 st 0x80000000 0xFC76543210 0x0020 S=1 0xFC 7654 3210 は 0x8000 0000 へ制限されます。 補足 : 飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 75 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov.w A, Dreg16, <s/u> Move 16-bit data register to accumulator bit 15 1 14 1 13 1 12 0 11 P Ad X a0:0 a1:1 Dreg s/u X 16s s:0 Even u:1 /Odd 10 0 9 1 8 0 7 0 6 0 5 1 4 0 3 X X X X X X X X X 2 1 0 Dreg16s (Source Dreg16#) X X X シンタックス : mov.w Ad, Dreg16s, <s/u> オペランド : Ad Dreg16s a0/a1 d0 - d15 オペレーション : Ad = Dreg16s << 16 説明 : Dreg16s の値を 16 ビット左シフトし、Ad へ格納します。<s/u> オプションで Dreg16s を符 号拡張するか、ゼロ拡張するか選択します。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ 0 C: 常にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: mov.w a0, d0, s before a0 d0 st after 0x0000000001 0xFC76 0x0000 a0 d0 st 0xFFFC760000 0xFC76 0x0008 N=1 例 2: mov.w a0, d0, u before a0 d0 st after 0x0000000001 0xFC76 0x0000 a0 d0 st 0x00FC760000 0xFC76 0x0040 E=1 補足 : この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 76 頁 Ximo16A Preliminary mov.l A, Dreg32, <s/u> Move 32-bit data register to accumulator bit 15 1 14 1 13 1 12 0 Ad X a0:0 a1:1 s/u X s:0 u:1 X 11 P 10 0 9 1 8 0 7 0 6 0 5 1 4 1 3 X X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : mov.l Ad, Dreg32s, <s/u> オペランド : Ad Dreg32s a0/a1 d1.0 - d15.14 オペレーション : Ad = Dreg16s 説明 : Dreg32s の値を、Ad へ格納します。<s/u> オプションで Dreg16s を符号拡張するか、ゼロ拡 張するか選択します。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ 0 C: 常にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: mov.w a0, d1.0, s before a0 d1.0 st after 0x0000000001 0xFC765432 0x0000 a0 d1.0 st 0xFFFC765432 0xFC76 0x0008 N=1 例 2: mov.w a0, d1.0, u before a0 d1.0 st after 0x0000000001 0xFC765432 0x0000 a0 d1.0 st 0x00FC765432 0xFC765432 0x0040 E=1 補足 : この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 77 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A mov A, A Move accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 1 X 4 0 X 3 0 X 2 X X 1 X X 0 X X シンタックス : mov Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = As 説明 : As の値を Ad へ格納します。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ 0 C: 常にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: mov a1, a0 before a0 a1 st after 0x038100C510 0x0000000000 0x0000 a0 a1 st 0x038100C510 0x038100C510 0x0040 E=1 補足 : この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 78 頁 Ximo16A Preliminary movst.w d0, Stack_Reg Move stack register to d0 register bit 15 1 X 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 1 4 0 3 X X X X X X X X X X X X X 2 1 0 Stack_Reg (Source Stack_Reg#) X X X シンタックス : movst.w d0, Stack_Reg オペランド : Stack_Reg sc0/ss0/se0/spc/sc1/ss1/se1/sst オペレーション : d0 = Stack_Reg 説明 : Stack_Reg フィールドで指示される内部スタックレジスタの値を d0 レジスタに格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movst.w d0, spc before spc d0 after 0x0123 0x0000 spc d0 0x0123 0x0123 補足 : 内部スタックレジスタを直接読み出すための命令です。通常内部スタックレジスタは、高速 割込み時にコアのコンテキストを保存するために利用され、rtf 命令によって読み出されます。こ の命令は内部スタック状態のデバッグを目的とした命令です。 79 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A movst.w Stack_Reg, d0 Move d0 register to stack register bit 15 1 X 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 1 4 1 3 X X X X X X X X X X X X X 2 1 0 Stack_Reg (Destintaion Stack_Reg#) X X X シンタックス : movst.w Stack_Reg, d0 オペランド : Stack_Reg sc0/ss0/se0/spc/sc1/ss1/se1/sst オペレーション : Stack_Reg = d0 説明 : d0 レジスタの値を Stack_Reg フィールドで指示される内部スタックレジスタに格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: movst.w sc0, d0 before d0 sc0 after 0x0123 0x0000 d0 sc0 0x0123 0x0123 補足 : 内部スタックレジスタに直接書き込むための命令です。通常内部スタックレジスタは、高速 割込み時にコアのコンテキストを保存するために利用され、rtf 命令によって読み出されます。こ の命令は内部スタック状態のデバッグを目的とした命令です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 80 頁 Ximo16A Preliminary 14 加算命令 add.w Dreg16, Dreg16 add.l Dreg32, Dreg32 adc.w Dreg16, Dreg16 add.w Dreg16, Dreg16, Dreg16, <ns/sa> add.l Dreg32, Dreg32, Dreg32, <ns/sa> add.w Preg, Preg adsi.w Dreg16, IMM4 adsi.w Preg, IMM4 adsi.l Dreg32, IMM4 addi.w Dreg16, IMM16 addi.w Preg, IMM16 add A, Dreg16, <s/u> add A, Dreg32, <s/u> add A, A adl A, A 概要 : この章では加算命令について説明します。加算命令にはいくつかの版があり、データレジス タ / ポインタレジスタ / アキュームレータレジスタにおいて加算を行なうことができます。 81 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A add.w Dreg16, Dreg16 Add 16-bit data register bit 15 0 14 1 13 0 12 0 11 0 10 0 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : add.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d + Dreg16s 説明 : Dreg16d と Dreg16s を加算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: add.w d1, d5 before d1 d5 st 2013.12.20 版 after 0x5521 0xC50E 0x0000 d1 d5 st 0x1A2F 0xC50E 0x0001 C=1 (C) 2009-2013 New Japan Radio Co., Ltd. 82 頁 Ximo16A Preliminary adc.w Dreg16, Dreg16 Add 16-bit data register with carry bit 15 0 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : adc.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d + Dreg16s + C 説明 : Dreg16d と Dreg16s とキャリービットとを加算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: adc.w d3, d2 before d2 d3 st 83 頁 after 0x1234 0x5ABC 0x0001 C=1 d2 d3 st 0x1234 0x6CF1 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A add.w Dreg16, Dreg16, Dreg16, <ns/sa> Add 16-bit data register (with saturate) bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 0 6 0 5 0 4 0 Dreg16s1 (Source1 Dreg16#) 3 ns:0 sa:1 Dreg 16d Even /Odd 2 X 1 X 0 X Dreg16d (Destination Dreg16#) シンタックス : add.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa> オペランド : Dreg16d Dreg16s0 Dreg16s1 d0 - d15 d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16s0 + Dreg16s1 説明 : Dreg16s0 と Dreg16s1 を加算し、Dreg16d へ結果を格納します。<ns/sa> オプションによっ て演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合、セットされます。 例 1: add.w d0, d1, d2, ns before after d2 d1 d0 st 0x7050 0x3F01 0x0000 0x0000 d2 d1 d0 st 0x7050 0x3F01 0x0000 0x0000 d2 d1 d0 st 0x7050 0x3F01 0xAF51 0x001C F=1,N=1,V=1 例 2: add.w d0, d1, d2, sa before d2 d1 d0 st after 0x7050 0x3F01 0x7FFF 0x003C S=1,F=1,N=1,V=1 0x7050 + 0x3F01 として演算され、結果は 0x7FFF へ飽和されます。C,Z,V,N,F ビットの動作 は飽和処理による影響を受けません。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 84 頁 Ximo16A Preliminary 補足 : 飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処 理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 85 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A add.w Preg, Preg Add pointer register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 7 0 6 0 5 4 Pregs (Source Preg#) 3 2 1 0 Pregd (Destination Pregd#) シンタックス : add.w Pregd, Pregs オペランド : Pregs Pregd p0 - p5/fp/sp p0 - p5/fp/sp オペレーション : Pregd = Pregd + Pregs 説明 : Pregd と Pregs を加算し、Pregd へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: add.w p4, p5 before p4 p5 2013.12.20 版 after 0x1100 0x0500 p4 p5 0x1600 0x0500 (C) 2009-2013 New Japan Radio Co., Ltd. 86 頁 Ximo16A Preliminary add.l Dreg32, Dreg32 Add 32-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : add.l Dreg32d, Dreg32s オペランド : Dreg16d Dreg16s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d + Dreg32s 説明 : Dreg32d と Dreg32s を加算し、Dreg32d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: add.l d5.4, d1.0 before d1.0 d5.4 st 87 頁 after 0x5521F051 0xC50E3200 0x0000 d1.0 d5.4 st 0x1A302251 0xC50E3200 0x0001 C=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A add.l Dreg32, Dreg32, Dreg32, <ns/sa> Add 32-bit data register (with saturate ) bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X X X Dreg32s0 (Source0 Dreg32#) 7 0 6 0 5 1 4 0 Dreg32s1 (Source1 Dreg32#) 3 2 1 0 ns:0 X X X sa:1 X Dreg32d (Destination Dreg32#) シンタックス : add.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa> オペランド : Dreg32d Dreg32s0 Dreg32s1 d1.0 - d15.14 d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32s0 + Dreg32s1 説明 : Dreg32s0 と Dreg32s1 を加算し、Dreg32d へ結果を格納します。<ns/sa> オプションによっ て演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合、セットされます。 例 1: add.l d5.4, d3.2, d1.0, ns before d1.0 d3.2 d5.4 st after 0x7050C0AD 0x3F0185E0 0x00000000 0x0000 d1.0 d3.2 d5.4 st 0x7050C0AD 0x3F0185E0 0xAF52468D 0x001C F=1,N=1,V=1 例 2: add.l d5.4, d3.2, d1.0, sa before d1.0 d3.2 d5.4 st after 0x7050C0AD 0x3F0185E0 0x00000000 0x0000 d1.0 d3.2 d5.4 st 0x7050C0AD 0x3F0185E0 0x7FFFFFFF 0x003C S=1,F=1,N=1,V=1 0x7050 C0AD + 0x3F01 85E0 として演算され、結果は 0x7FFF FFFF へ飽和されます。 C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 88 頁 Ximo16A Preliminary 補足 : 飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 89 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A adsi.w Dreg16, IMM4 Add short immediate to 16-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 1 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : adsi.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d + IMM4 説明 : Dreg16d と IMM4 を加算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: adsi.w d5, 3 before d5 st 2013.12.20 版 after 0x5521 0x0000 d5 st 0x5524 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 90 頁 Ximo16A Preliminary adsi.w Preg, IMM4 Add short immediate to pointer register bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 1 2 1 0 Pregd (Destination Preg#) シンタックス : adsi.w Preg, IMM4 オペランド : Preg IMM4 p0 - p5/fp/sp 0 - 15 オペレーション : Preg = Preg + IMM4 説明 : Preg と IMM4 を加算し、Preg へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: adsi.w p0, 2 before p0 91 頁 after 0x0050 p1 0x0052 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A adsi.l Dreg32, IMM4 Add short immediate to 32-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 0 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : adsi.l Dreg32d, IMM4 オペランド : Dreg16d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d + IMM4 説明 : Dreg32d と IMM4 を加算し、Dreg32d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: adsi.l d5.4, 3 before d5.4 st 2013.12.20 版 after 0x5521F021 0x0000 d5.4 st 0x5521F024 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 92 頁 Ximo16A Preliminary addi.w Dreg16, IMM16 Add immediate to 16-bit data register bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 0 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : addi.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d = Dreg16d + IMM16 説明 : Dreg16d と IMM16 を加算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: addi.w d5, 500 before d5 st 93 頁 after 0x5521 0x0000 d5 st 0x5715 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A addi.w Preg, IMM16 Add immediate to pointer register bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 1 6 0 5 0 4 0 3 X 2 1 0 Pregd (Destination Preg#) IMM16 シンタックス : addi.w Preg, IMM16 オペランド : Preg IMM16 p0 - p5/fp/sp 0 - 65535 オペレーション : Pregd = Pregd + IMM16 説明 : Pregd と IMM16 を加算し、Pregd へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: addi.w p5, 500 before p5 2013.12.20 版 after 0x5521 p5 0x5715 (C) 2009-2013 New Japan Radio Co., Ltd. 94 頁 Ximo16A Preliminary add A, Dreg16, <s/u> Add 16-bit data register to accumulator bit 15 1 14 1 13 1 12 0 11 P Ad X a0:0 a1:1 Dreg s/u X 16s s:0 Even u:1 /Odd 10 0 9 0 8 1 7 0 6 0 5 0 4 0 3 0 X X X X X X X X 2 1 0 Dreg16s (Source Dreg16#) X X X シンタックス : add Ad, Dreg16s, <s/u> オペランド : Ad Dreg16s a0/a1 d0 - d15 オペレーション : Ad = Ad + (Dreg16s<<16) 説明 : Dreg16s を 16 ビット左シフトし、40 ビットのアキュームレータ Ad へ加算します。<s/u> オ プションで Dreg16s を符号拡張するか、ゼロ拡張するか選択します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: add a0, d13, s before a0 d13 st after 0x0070325110 0xF052 0x0000 a0 d13 st 0x0060845110 0xF052 0x0001 C=1 0x00 7032 5110 + 0xFF F052 0000 として演算されます。 例 2: add a0, d13, u before a0 d13 st after 0x0070325110 0xF052 0x0000 a0 d13 st 0x0160845110 0xF052 0x0040 E=1 0x00 7032 5110 + 0x00 F052 0000 として演算されます。 95 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 例 3: add a0, d13, s before a0 d13 st after 0x7FF0325110 0x5052 0x0000 a0 d13 st 0x7FFFFFFFFF 0x5052 0x007C V=1,N=1,F=1,S=1,E=1 0x7F F032 5110 + 0x00 5052 0000 として演算され、結果は 0x7F FFFF FFFF へ飽和されま す。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : Ad と Dreg16s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。 s オプションでは符号付きの値として Dreg16s を扱い、演算結果は最小で 0x80 0000 0000、 最大で 0x7F FFFF FFFF の間に制限されます。 u オプションでは符号無しの値として Dreg16s を扱います。演算結果に対する飽和処理は行 なわれません。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 96 頁 Ximo16A Preliminary add A, Dreg32, <s/u> Add 32-bit data register to accumulator bit 15 1 14 1 13 1 12 0 Ad X a0:0 a1:1 s/u X s:0 u:1 X 11 P 10 0 9 0 8 1 7 0 6 0 5 0 4 1 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : add Ad, Dreg32s, <s/u> オペランド : Ad Dreg16s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad + Dreg32s 説明 : Dreg32s を 40 ビットのアキュームレータ Ad へ加算します。<s/u> オプションで Dreg32s を 符号拡張するか、ゼロ拡張するか選択します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: add a0, d13.12, s before a0 d13.12 st after 0x0070325110 0xF052C001 0x0000 a0 d13.12 st 0x0060851111 0xF052C001 0x0001 C=1 0x00 7032 5110 + 0xFF F052 C001 として演算されます。 例 2: add a0, d13.12, u before a0 d13.12 st after 0x0070325110 0xF052C001 0x0000 a0 d13.12 st 0x0160851111 0xF052C001 0x0040 E=1 0x00 7032 5110 + 0x00 F052 C001 として演算されます。 97 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 例 3: add a0, d13.12, s before a0 d13.12 st after 0x7FF0325110 0x5052C001 0x0000 a0 d13.12 st 0x7FFFFFFFFF 0x5052C001 0x007C V=1,N=1,F=1,S=1,E=1 0x7F F032 5110 + 0x00 5052 C001 として演算され、結果は 0x7F FFFF FFFF へ飽和されま す。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : Ad と Dreg32s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。 s オプションでは符号付きの値として Dreg32s を扱い、演算結果は最小で 0x80 0000 0000、 最大で 0x7F FFFF FFFF の間に制限されます。 u オプションでは符号無しの値として Dreg32s を扱います。演算結果に対する飽和処理は行 なわれません。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 98 頁 Ximo16A Preliminary add A, A Add accumulator to accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 0 X 3 0 X 2 X X 1 X X 0 X X シンタックス : add Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = Ad + As 説明 : As と Ad を加算し、結果を Ad に格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: add a0, a1 before a0 a1 st after 0x0510A150E3 0x1F0534C175 0x0000 a0 a1 st 0x8510A150E3 0xAF0534C175 0x0000 a0 a1 st 0x2415D61258 0x1F0534C175 0x0040 E=1 例2 add a0, a1 before a0 a1 st after 0x8000000000 0xAF0534C175 0x0075 C=1,V=1,F=1,S=1,E=1 結果は 0x7F FFFF FFFF へ飽和されます。C,Z,V,N,F ビットの動作は飽和処理による影響を 受けません。 補足 : 演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。 99 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 100 頁 Ximo16A Preliminary adl A, A Add accumulator to accumulator with left shift bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 1 X 3 0 X 2 X X 1 X X 0 X X シンタックス : adl Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = (Ad<<1) + As 説明 : As と左に 1 ビットシフトした Ad を加算し、結果を Ad に格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: adl a0, a1 before a0 a1 st after 0x0510A150E3 0x1F0534C175 0x0000 a0 a1 st 0x29267F633B 0x1F0534C175 0x0040 E=1 補足 : 演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 101 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 15 減算命令 sub.w Dreg16, Dreg16 sub.l Dreg32, Dreg32 sbc.w Dreg16, Dreg16 sub.w Dreg16, Dreg16, Dreg16, <ns/sa> sub.l Dreg32, Dreg32, Dreg32, <ns/sa> sub.w Preg, Preg sbsi.w Dreg16, IMM4 sbsi.w Preg, IMM4 sbsi.l Dreg32, IMM4 subi.w Dreg16, IMM16 subi.w Preg, IMM16 sub A, Dreg16, <s/u> sub A, Dreg32, <s/u> sub A, A sbl A, A 概要 : この章では減算命令について説明します。減算命令にはいくつかの版があり、データレジス タ / ポインタレジスタ / アキュームレータレジスタにおいて減算を行なうことができます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 102 頁 Ximo16A Preliminary sub.w Dreg16, Dreg16 Subtract 16-bit data register bit 15 0 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : sub.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d - Dreg16s 説明 : Dreg16d から Dreg16s を減算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: sub.w d1, d5 before d1 d5 st 103 頁 after 0x3580 0x1532 0x0000 d1 d5 st 0x204E 0x1532 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sbc.w Dreg16, Dreg16 Subtract 16-bit data register with carry bit 15 0 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : sbc.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d - Dreg16s - C 説明 : Dreg16d から Dreg16s とキャリービットとを減算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: sbc.w d1, d5 before d1 d5 st 2013.12.20 版 after 0x3580 0x1532 0x0001 C=1 d1 d5 st 0x204D 0x1532 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 104 頁 Ximo16A Preliminary sub.w Dreg16, Dreg16, Dreg16, <ns/sa> Subtract 16-bit data reigster (with saturate) bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 0 6 0 5 0 4 1 Dreg16s1 (Source1 Dreg16#) 3 ns:0 sa:1 Dreg 16d Even /Odd 2 X 1 X 0 X Dreg16d (Destination Dreg16#) シンタックス : sub.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa> オペランド : Dreg16d Dreg16s0 Dreg16s1 d0 - d15 d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16s0 - Dreg16s1 説明 : Dreg16s0 から Dreg16s1 を減算し、Dreg16d へ結果を格納します。<ns/sa> オプションに よって演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S F ↑↓ ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: sub.w d0, d1, d2, ns before after d0 d1 d2 st 0x0000 0x9350 0x35EA 0x0000 d0 d1 d2 st 0x0000 0x9350 0x35EA 0x0000 d0 d1 d2 st 0x5D66 0x9350 0x35EA 0x0014 V=1,F=1 例 2: sub.w d0, d1, d2, sa before d0 d1 d2 st after 0x8000 0x9350 0x35EA 0x0034 V=1,F=1,S=1 0x9350 - 0x35EA として演算され、結果は 0x8000 へ飽和されます。C,Z,V,N,F ビットの動作 は飽和処理による影響を受けません。 105 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 補足 : 飽和処理が有効な場合、結果は最小で 0x8000、最大で 0x7FFF の間に制限されます。飽和処 理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 106 頁 Ximo16A Preliminary sub.w Preg, Preg Subtract pointer register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 7 0 6 1 5 4 Pregs (Source Preg#) 3 2 1 0 Pregd (Destination Pregd#) シンタックス : sub.w Pregd, Pregs オペランド : Pregd Pregs p0 - p5/fp/sp p0 - p5/fp/sp オペレーション : Pregd = Pregd - Pregs 説明 : Pregd から Pregs を減算し、Pregd へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: sub.w p1, p5 before p1 p5 107 頁 after 0x3580 0x1532 p1 p5 0x204D 0x1532 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sub.l Dreg32, Dreg32 Subtract 32-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : sub.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d - Dreg32s 説明 : Dreg32d から Dreg32s を減算し、Dreg32d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: sub.l d1.0, d3.2 before d1.0 d3.2 st 2013.12.20 版 after 0x83505110 0xF5EAC001 0x0000 d1.0 d3.2 st 0x8D65910F 0xF5EAC001 0x0009 C=1,N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 108 頁 Ximo16A Preliminary sub.l Dreg32, Dreg32, Dreg32, <ns/sa> Subtract 32-bit data register bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X X X Dreg32s0 (Source0 Dreg32#) 7 0 6 0 5 1 4 1 Dreg32s1 (Source1 Dreg32#) 3 2 1 0 ns:0 X X X sa:1 X Dreg32d (Destination Dreg32#) シンタックス : sub.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa> オペランド : Dreg32d Dreg32s0 Dreg32s1 d1.0 - d15.14 d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32s0 - Dreg32s1 説明 : Dreg32s0 から Dreg32s1 を減算し、Dreg32d へ結果を格納します。<ns/sa> オプションに よって演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S F ↑↓ ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: sub.w d1.0, d3.2, d5.4, ns before d1.0 d3.2 d5.4 st after 0x00000000 0x9350F150 0x35EA45C6 0x0000 d1.0 d3.2 d5.4 st 0x5D66AB8A 0x9350F150 0x35EA45C6 0x0014 V=1,F=1 例 2: sub.w d1.0, d3.2, d5.4, sa before d1.0 d3.2 d5.4 st after 0x00000000 0x9350F150 0x35EA45C6 0x0000 d1.0 d3.2 d5.4 st 0x80000000 0x9350F150 0x35EA45C6 0x0034 V=1,F=1,S=1 0x9350 F150 - 0x35EA 45C6 として演算され、結果は 0x8000 0000 へ飽和されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 109 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 補足 : 飽和処理が有効な場合、結果は最小で 0x8000 0000、最大で 0x7FFF FFFF の間に制限され ます。飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 110 頁 Ximo16A Preliminary sbsi.w Dreg16, IMM4 Subtract short immediate from 16-bit data reigster bit 15 0 14 1 13 1 12 0 11 0 10 1 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : sbsi.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d - IMM4 説明 : Dreg16d から IMM4 を減算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: sbsi.w d3, 10 before d3 st 111 頁 after 0x8350 0x0000 d3 st 0x8346 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sbsi.w Preg, IMM4 Subtract short immediate from pointer register bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 1 2 1 0 Pregd (Destination Preg#) シンタックス : sbsi.w Pregd, IMM4 オペランド : Pregd IMM4 p0 - d5/fp/sp 0 - 15 オペレーション : Pregd = Pregd - IMM4 説明 : Pregd から IMM4 を減算し、Pregd へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: sbsi.w p3, 10 before p3 2013.12.20 版 after 0x8350 p3 0x8346 (C) 2009-2013 New Japan Radio Co., Ltd. 112 頁 Ximo16A Preliminary sbsi.l Dreg32, IMM4 Subtract short immediate from 32-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 0 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : sbsi.l Dreg16d, IMM4 オペランド : Dreg32d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d - IMM4 説明 : Dreg32d から IMM4 を減算し、Dreg32d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: sbsi.w d3.2, 10 before d3.2 st 113 頁 after 0x83500000 0x0000 d3.2 st 0x834FFFF6 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A subi.w Dreg16, IMM16 Subtract immediate from 16-bit data register bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 0 4 1 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : subi.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d = Dreg16d - IMM16 説明 : Dreg16d から IMM16 を減算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: subi.w d3, 500 before d3 st 2013.12.20 版 after 0x8350 0x0000 d3 st 0x815C 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 114 頁 Ximo16A Preliminary subi.w Preg, IMM16 Subtract immediate from pointer register bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 1 6 0 5 0 4 1 3 X 2 1 0 Pregd (Destination Preg#) IMM16 シンタックス : subi.w Pregd, IMM16 オペランド : Pregd IMM16 p0 - p5/fp/sp 0 - 65535 オペレーション : Pregd = Pregd - IMM16 説明 : Dreg16d から IMM16 を減算し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: subi.w p3, 500 before p3 115 頁 after 0x8350 p3 0x815C (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sub A, Dreg16, <s/u> Subtract 16-bit data register from accumulator bit 15 1 14 1 13 1 12 0 11 P Ad X a0:0 a1:1 Dreg s/u X 16s s:0 Even u:1 /Odd 10 0 9 0 8 1 7 0 6 0 5 0 4 0 3 1 X X X X X X X X 2 1 0 Dreg16s (Source Dreg16#) X X X シンタックス : sub Ad, Dreg16s, <s/u> オペランド : Ad Dreg16s a0/a1 d0 - d15 オペレーション : Ad = Ad - (Dreg16s<<16) 説明 : Dreg16s を 16 ビット左シフトし、40 ビットのアキュームレータ Ad から減算します。<s/u> オプションで Dreg16s を符号拡張するか、ゼロ拡張するか選択します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: sub a0, d13, s before a0 d13 st after 0x0070325110 0xF052 0x0000 a0 d13 st 0x007FE05110 0xF052 0x0001 C=1 0x00 7032 5110 - 0xFF F052 0000 として演算されます。 例 2: sub a0, d13, u before a0 d13 st after 0x0070325110 0xF052 0x0000 a0 d13 st 0xFF7FE05110 0xF052 0x0049 C=1,N=1,E=1 0x00 7032 5110 - 0x00 F052 0000 として演算されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 116 頁 Ximo16A Preliminary 例 3: sub a0, d13, s before a0 d13 st after 0x8000325110 0x5052 0x0000 a0 d13 st 0x8000000000 0x5052 0x0074 V=1,F=1,S=1,E=1 0x80 0032 5110 - 0x00 5052 0000 として演算され、結果は 0x80 0000 0000 へ飽和されます。 C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : Ad と Dreg16s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。 s オプションでは符号付きの値として Dreg16s を扱い、演算結果は最小で 0x80 0000 0000、 最大で 0x7F FFFF FFFF の間に制限されます。 u オプションでは符号無しの値として Dreg16s を扱います。演算結果に対する飽和処理は行 なわれません。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 117 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sub A, Dreg32, <s/u> Subtract 32-bit data register from accumulator bit 15 1 14 1 13 1 12 0 Ad X a0:0 a1:1 s/u X s:0 u:1 X 11 P 10 0 9 0 8 1 7 0 6 0 5 0 4 1 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : sub Ad, Dreg32s, <s/u> オペランド : Ad Dreg16s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad - Dreg32s 説明 : Dreg32s を 40 ビットのアキュームレータ Ad から減算します。<s/u> オプションで Dreg32s を符号拡張するか、ゼロ拡張するか選択します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: sub a0, d13.12, s before a0 d13.12 st after 0x0070325110 0xF052C001 0x0000 a0 d13.12 st 0x007FDF910F 0xF052C001 0x0001 C=1 0x00 7032 5110 - 0xFF F052 C001 として演算されます。 例 2: sub a0, d13.12, u before a0 d13 st after 0x0070325110 0xF052C001 0x0000 a0 d13 st 0xFF7FDF910F 0xF052C001 0x0049 C=1,N=1,E=1 0x00 7032 5110 - 0x00 F052 C001 として演算されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 118 頁 Ximo16A Preliminary 例 3: sub a0, d13.12, s before a0 d13.12 st after 0x8000325110 0x5052C001 0x0000 a0 d13.12 st 0x8000000000 0x5052C001 0x0074 V=1,F=1,S=1,E=1 0x80 0032 5110 - 0x00 5052 C001 として演算され、結果は 0x80 0000 0000 へ飽和されます。 C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : Ad と Dreg32s のデータ型の扱いについては表 6.1「データ形式」を参照して下さい。 s オプションでは符号付きの値として Dreg32s を扱い、演算結果は最小で 0x80 0000 0000、 最大で 0x7F FFFF FFFF の間に制限されます。 u オプションでは符号無しの値として Dreg32s を扱います。演算結果に対する飽和処理は行 なわれません。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 119 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sub A, A Subtract accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 0 X 3 1 X 2 X X 1 X X 0 X X シンタックス : sub Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = Ad - As 説明 : Ad から As を減算し、結果を Ad に格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: sub a0, a1 before a0 a1 st after 0x0510A150E3 0x1F0534C175 0x0000 a0 a1 st 0x8510A150E3 0x1F0534C175 0x0000 a0 a1 st 0xE60B6C8F6E 0x1F0534C175 0x0049 C=1,N=1,E=1 例 2: sub a0, a1 before a0 a1 st after 0x8000000000 0x1F0534C175 0x0074 V=1,F=1,S=1,E=1 結果は 0x80 0000 0000 へ飽和されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受 けません。 補足 : 演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 120 頁 Ximo16A Preliminary 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 121 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sbl A, A Subtract accumulator with left shift bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 1 X 3 1 X 2 X X 1 X X 0 X X シンタックス : sbl Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = (Ad<<1) - As 説明 : 左に 1 ビットシフトした Ad から As を減算し、結果を Ad に格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: sbl a0, a1 before a0 a1 st after 0x0510A150E3 0x1F0534C175 0x0000 a0 a1 st 0xEB1C05E051 0x1F0534C175 0x0049 C=1,N=1,E=1 補足 : 演算結果は最小で 0x80 0000 0000、最大で 0x7F FFFF FFFF の間に制限されます。 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 122 頁 Ximo16A Preliminary 16 比較命令 cmp.w Dreg16, Dreg16 cmpi.w Dreg16, IMM16 cmp.l Dreg32, Dreg32 cmp A, A 概要 : この章では比較命令について説明します。比較命令では対象のオペランドに対して減算を行 いコンディションコードのみを更新します。16 ビットワードデータレジスタ /32 ビットロング ワードデータレジスタ / アキュームレータレジスタにおいて実行することができます。 123 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A cmp.w Dreg16, Dreg16 Compare 16-bit data register bit 15 0 14 1 13 0 12 0 11 0 10 1 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : cmp.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d - Dreg16s 説明 : Dreg16d から Dreg16s を減算し、コンディションコードを更新します。Dreg16d,Dreg16s は 変更されません。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: com.w d0, d1 before d0 d1 st after 0xF452 0x3011 0x0000 d0 d1 st 0xF452 0x3011 0x0008 N=1 補足 : 減算結果が書き込まれないこと以外は、ページ 103 の「sub.w Dreg16, Dreg16」と同じ動作 です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 124 頁 Ximo16A Preliminary cmpi.w Dreg16, IMM16 Compare 16-bit data register with immediate bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 1 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : cmpi.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d - Dreg16s 説明 : Dreg16d から Dreg16s を減算し、コンディションコードを更新します。Dreg16d,Dreg16s は 変更されません。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: cmpi.w d0, 0x3010 before d0 st after 0x1C3A 0x0000 d0 st 0x1C3A 0x0009 C=1,N=1 補足 : 減算結果が書き込まれないこと以外は、ページ 114 の「subi.w Dreg16, IMM16」と同じ動作 です。 125 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A cmp.l Dreg32, Dreg32 Compare 32-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : cmp.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d0 - d15 d0 - d15 オペレーション : Dreg32d - Dreg32s 説明 : Dreg32d から Dreg32s を減算し、コンディションコードを更新します。Dreg32d,Dreg32s は 変更されません。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 例: com.l d1.0, d3.2 before d1.0 d3.2 st after 0x0051C45A 0xC5302111 0x0000 d1.0 d3.2 st 0x0051C45A 0xC5302111 0x0001 C=1 補足 : 減算結果が書き込まれないこと以外は、ページ 108 の「sub.l Dreg32, Dreg32」と同じ動作 です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 126 頁 Ximo16A Preliminary cmp A, A Compare accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 1 X 4 0 X 3 0 X 2 X X 1 X X 0 X X シンタックス : cmp Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad - As 説明 : Ad から As を減算し、コンディションコードを更新します。Ad,As は変更されません。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: cmp a0, a1 before a0 a1 st after 0x0510A150E3 0x1F0534C175 0x0000 a0 a1 st 0x0510A150E3 0x1F0534C175 0x0049 C=1,N=1,E=1 補足 : 減算結果が書き込まれないこと以外は、ページ 120 の「sub A, A」と同じ動作です。S ビッ ト、E ビットも sub A, A 命令と同様の動作をしますが、この命令においては意味の有る動作で はありません。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 127 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 17 乗算命令 mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> 概要 : この章では乗算命令について説明します。乗算命令では乗算対象のオペランドの型を指定す るために、いくつかのオプションが存在します。 またアキュームレータを対象とするクリア / 加算 / 減算を並列に実行することが可能です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 128 頁 Ximo16A Preliminary mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> Multiply data register bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 1 6 0 5 0 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 X 1 X 0 X Dreg32d (Destination Dreg32#) シンタックス : mul Dreg32d, Dreg16s0, Dreg16s1 オペランド : Dreg32d Dreg16s0 Dreg16s1 d1.0 - d15.14 d0 - d15 d0 - d15 オペレーション : Dreg32d = Dreg16s0 * Dreg16s1 説明 : Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ 結果を格納します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: mul d1.0, d2, d3, ss before d1.0 d2 d3 after 0x00000000 0x1531 0x50EC d1.0 d2 d3 0x06B2D92C 0x1531 0x50EC 補足 : 乗算オプション <fr/ss/su/us> について fr( 固定小数乗算 ): 1.15 符号付固定小数同士の乗算を行い、1.31 符号付固定小数の結果を得ます。この乗算では 符号付き整数の乗算結果に対して 1 ビット左シフトされた値が格納されます。 また例外的な動作として 0x8000(-1.0) と 0x8000(-1.0) の乗算を行なった場合、乗算結果は表 現できる正の最大数として 0x7FFF FFFF(0.9999999995343387126922607421875) になります。 mul d1.0, d2, d3, fr before d1.0 d2 d3 after 0x00000000 0xC4D1 0x9051 d1.0 d2 d3 0x33A3AC42 0xC4D1 0x9051 -0.462371826171875 (0xC4D1) * -0.872528076171875 0.403432399965822696685791015625 (0x33A3 AC42) 129 頁 (C) 2009-2013 New Japan Radio Co., Ltd. (0x9051) = 2013.12.20 版 Preliminary Ximo16A ss( 符号付き整数乗算 ): 16 ビット符号付き整数同士の乗算を行い、32 ビット符号付き整数の結果を得ます。 mul d1.0, d2, d3, ss before d1.0 d2 d3 after 0x00000000 0xC4D1 0x9051 d1.0 d2 d3 0x19D1D621 0xC4D1 0x9051 -15151(0xC4D1) * -28591(0x9051) = 433182241(0x19D1 D621) su( 符号付、符号無し整数乗算 ): 乗算の第一オペランド (Dreg16s0) を 16 ビット符号付き整数、第 2 オペランド (Dreg16s1) を 16 ビット符号無し整数として乗算し、32 ビット符号付き整数の結果を得ます。 mul d1.0, d2, d3, su before d1.0 d2 d3 after 0x00000000 0xC4D1 0x9051 d1.0 d2 d3 0xDEA2D621 0xC4D1 0x9051 d3 は符号無し整数として処理されます。 -15151(0xC4D1) * 36945(0x9051) = -559753695(0xDEA2 D621) uu オプション ( 符号無し整数乗算 ): 16 ビット符号無し整数同士の乗算を行ない、32 ビット符号無し整数の結果を得ます。 mul d1.0, d2, d3, uu before d1.0 d2 d3 after 0x00000000 0xC4D1 0x9051 d1.0 d2 d3 0x6EF3D621 0xC4D1 0x9051 d2, d3 ともに符号無し整数として処理されます。 50385(0xC4D1) * 36945(0x9051) = 1861473825(0x6EF3 D612) この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 130 頁 Ximo16A Preliminary clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> Clear and multiply data register bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd 7 1 6 0 5 1 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 X 1 X 0 X Dreg32d (Destination Dreg32#) シンタックス : clr Ad, mul Dreg32d, Dreg16s0, Dreg16s1 オペランド : Ad Dreg32d Dreg16s0 Dreg16s1 a0/a1 d1.0 - d15.14 d0 - d15 d0 - d15 オペレーション : Ad = 0 Dreg32d = Dreg16s0 * Dreg16s1 説明 : Ad レジスタをクリアします。 Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ 結果を格納します。 コンディションコード : U - E 0 S - F - N 0 V 0 Z 1 C 0 C: 常にクリアされます。 Z: 常にセットされます。 V: 常にクリアされます。 N: 常にクリアされます。 E: 常にクリアされます。 例: clr a0, mul d1.0, d2, d3, ss before a0 d1.0 d2 d3 st after 0x01520005FC 0x00000000 0x1531 0x50EC 0x0000 a0 d1.0 d2 d3 st 0x0000000000 0x06B2D92C 0x1531 0x50EC 0x0002 Z=1 補足 : 乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 131 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> Add and multiply data register bit 15 1 14 1 13 1 12 0 10 0 9 0 8 0 7 1 Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd s/u X s:0 u:1 X 11 P 6 1 5 0 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 1 0 Dreg32s (Source Dreg32#) Dreg32d (Destination Dreg32#) シンタックス : add Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> オペランド : Ad Dreg32s Dreg32d Dreg16s0 Dreg16s1 a0/a1 d1.0 - d15.14 d1.0 - d15.14 d0 - d15 d0 - d15 オペレーション : Ad = Ad + Dreg32s Dreg32d = Dreg16s0 * Dreg16s1 説明 : Dreg32s を 40 ビットのアキュームレータ Ad へ加算します。<s/u> オプションで Dreg32s を 符号拡張するか、ゼロ拡張するか選択します。 Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ 結果を格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: add a0, d5.4, s, mul d1.0, d2, d3, fr before a0 d5.4 d1.0 d2 d3 st 2013.12.20 版 after 0x01520005FC 0xFC541065 0x00000000 0x1531 0x50EC 0x0000 a0 d5.4 d1.0 d2 d3 st 0x014E541661 0xFC541065 0x0D65B258 0x1531 0x50EC 0x0041 C=1,E=1 (C) 2009-2013 New Japan Radio Co., Ltd. 132 頁 Ximo16A Preliminary 補足 : コンディションコードは加算によって更新されます。 加算の動作はページ 97 の「add A, Dreg32, <s/u>」を参照して下さい。 乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 133 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> Subtract and multiply data register bit 15 1 14 1 13 1 12 0 10 0 9 0 8 0 7 1 Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd s/u X s:0 u:1 X 11 P 6 1 5 1 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 1 0 Dreg32s (Source Dreg32#) Dreg32d (Destination Dreg32#) シンタックス : sub Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> オペランド : Ad Dreg32s Dreg32d Dreg16s0 Dreg16s1 a0/a1 d1.0 - d15.14 d1.0 - d15.14 d0 - d15 d0 - d15 オペレーション : Ad = Ad - Dreg32s Dreg32d = Dreg16s0 * Dreg16s1 説明 : Dreg32s を 40 ビットのアキュームレータ Ad から減算します。<s/u> オプションで Dreg32s を符号拡張するか、ゼロ拡張するか選択します。 Dreg16s0 と Dreg16s1 を <fr/ss/su/uu> オプションで指示された方法で乗算し、Dreg32d へ 結果を格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: sub a0, d1.0, s, mul d1.0, d2, d3, fr before a0 d1.0 d2 d3 st 2013.12.20 版 after 0x01520005FC 0xFC541065 0x1531 0x50EC 0x0000 a0 d1.0 d2 d3 st 0x0155ABF597 0x0D65B258 0x1531 0x50EC 0x0041 C=1,E=1 (C) 2009-2013 New Japan Radio Co., Ltd. 134 頁 Ximo16A Preliminary 補足 : コンディションコードは減算によって更新されます。 減算の動作はページ 118 の「sub A, Dreg32, <s/u>」を参照して下さい。 乗算の動作はページ 129 の「mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu>」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 135 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 18 その他の算術命令 neg.w Dreg16, Dreg16, <ns/sa> neg.l Dreg32, Dreg32, <ns/sa> neg A, A abs.w Dreg16, Dreg16 abs.l Dreg32, Dreg32 abs A, A rnd.l Dreg32d, Dreg32s rnd A, A div Dreg32d, Dreg32s sat A, A clr A 概要 : この章ではこれまでに説明の無かったその他の算術命令について説明します。2 の補数、絶 対値、四捨五入、除算サポート、飽和処理などがあります。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 136 頁 Ximo16A Preliminary neg.w Dreg16, Dreg16, <ns/sa> Negate value on 16-bit data register bit 15 0 14 1 13 0 12 0 11 0 10 1 9 1 8 7 ns:0 Dreg sa:1 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : neg.w Dreg16d, Dreg16s, <ns/sa> オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = 0 - Dreg16s 説明 : 2 の補数の値を得ます。Dreg16s をゼロから減算し、Dreg16d へ格納します。<ns/sa> オプ ションによって演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: neg.w d0, d1, ns before d0 d1 st after 0x0000 0x1C3A 0x0000 d0 d1 st 0x0101 0x8000 0x0000 d0 d1 st 0xE3C6 0x1C3A 0x0009 C=1,N=1 例 2: neg.w d0, d1, sa before d0 d1 st after 0x7FFF 0x8000 0x003D C=1,V=1,N=1,F=1,S=1 0x8000 に対する 2 の補数はオーバーフローを起こします。sa オプションではこのケースに 対し、結果を 0x7FFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けま せん。 補足 : 飽和処理が有効な場合、0x8000 に対する結果は 0x7FFF に制限されます。正しく 2 の補数が 必要な場合は、ns オプションを使用してください。 137 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A neg.l Dreg32, Dreg32, <ns/sa> Negate value on 32-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 1 7 1 6 5 4 3 ns:0 Dreg32s sa:1 (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : neg.l Dreg32d, Dreg32s, <ns/sa> オペランド : Dreg16d Dreg16s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = 0 - Dreg32s 説明 : 2 の補数の値を得ます。Dreg32s をゼロから減算し、Dreg32d へ格納します。<ns/sa> オプ ションによって演算結果に対する飽和処理の有無を選択します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: neg.w d0, d1, ns before d0 d1 st after 0x01010101 0x1C3A1000 0x0000 d0 d1 st 0x00000000 0x80000000 0x0000 d0 d1 st 0xE3C5F000 0x1C3A1000 0x0009 C=1,N=1 例 2: neg.w d0, d1, sa before d1.0 d3.2 st after 0x7FFFFFFF 0x80000000 0x003D C=1,V=1,N=1,F=1,S=1 0x8000 0000 に対する 2 の補数はオーバーフローを起こします。sa オプションではこのケー スに対し、結果を 0x7FFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影 響を受けません。 補足 : 飽和処理が有効な場合、0x8000 0000 に対する結果は 0x7FFF FFFF に制限されます。正し く 2 の補数が必要な場合は、ns オプションを使用してください。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 138 頁 Ximo16A Preliminary neg A, A Negate value on accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 0 X 3 0 X 2 X X 1 X X 0 X X シンタックス : neg Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = 0 - As 説明 : 2 の補数の値を得ます。As をゼロから減算し、Ad へ格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: neg a0, a1 before a0 a1 st after 0x0001010101 0x321C3A1000 0x0000 a0 a1 st 0x0001010101 0x8000000000 0x0000 d0 d1 st 0xCDE3C5F000 0x321C3A1000 0x0049 E=1,C=1,N=1 例 2: neg a0, a1 before a0 a1 st after 0x7FFFFFFFFF 0x8000000000 0x007D C=1,V=1,N=1,F=1,S=1,E=1 0x80 0000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7F FFFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : 0x80 0000 0000 に対する結果は 0x7F FFFF FFFF に制限されます。 139 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 140 頁 Ximo16A Preliminary abs.w Dreg16, Dreg16 Absolute value on 16-bit data register bit 15 0 14 1 13 0 12 0 11 0 10 1 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : abs.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : If (Dreg16s < 0) then Dreg16d = 0 - Dreg16s Else Dreg16d = Dreg16s Endif 説明 : Dreg16s の絶対値を取り、Dreg16d へ格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 15 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: abs.w d0, d1 before d0 d1 st after 0x0000 0xF021 0x0000 d0 d1 st 0x0000 0x8000 0x0000 d0 d1 st 0x0FDF 0xF021 0x0001 C=1 例 2: abs.w d0, d1 before d0 d1 st after 0x7FFF 0x8000 0x003D C=1,V=1,N=1,F=1,S=1 0x8000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7FFF に飽 和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 141 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 補足 : 0x8000 に対する結果は 0x7FFF に制限されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 142 頁 Ximo16A Preliminary abs.l Dreg32, Dreg32 Absolute value on 16-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : abs.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : If (Dreg32s < 0) then Dreg32d = 0 - Dreg32s Else Dreg32d = Dreg32s Endif 説明 : Dreg32s の絶対値を取り、Dreg32d へ格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: abs.l d1.0, d3.2 before d1.0 d3.2 st after 0x00000000 0xF021C555 0x0000 d1.0 d3.2 st 0x00000000 0x80000000 0x0000 d1.0 d3.2 st 0x0FDE3AAB 0xF021C555 0x0001 C=1 例 2: abs.l d0, d1 before d1.0 d3.2 st after 0x7FFFFFFF 0x80000000 0x003D C=1,V=1,N=1,F=1,S=1 0x8000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7FFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 143 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 補足 : 0x8000 0000 に対する結果は 0x7FFF FFFF に制限されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 144 頁 Ximo16A Preliminary abs A, A Absolute value on accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 0 X 3 1 X 2 X X 1 X X 0 X X シンタックス : abs Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : If (As < 0) then Ad = 0 - As Else Ad = As Endif 説明 : As の絶対値を取り、Ad へ格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にボローが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: abs a0, a1 before a0 a1 st after 0x0001010101 0x321C3A1000 0x0000 a0 a1 st 0x0001010101 0x8000000000 0x0000 d0 d1 st 0x321C3A1000 0x321C3A1000 0x0040 E=1 例 2: abs a0, a1 before a0 a1 st 145 頁 after 0x7FFFFFFFFF 0x8000000000 0x007D C=1,V=1,N=1,F=1,S=1,E=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 0x80 0000 0000 に対する 2 の補数はオーバーフローを起こします。この命令では結果を 0x7F FFFF FFFF に飽和させます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : 0x80 0000 0000 に対する結果は 0x7F FFFF FFFF に制限されます。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 146 頁 Ximo16A Preliminary rnd.l Dreg32d, Dreg32s round on 32-bit data register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 1 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : rnd.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32s + 0x0000 8000 Dreg32d[15:0] = 0 説明 : Dreg32s の下位ワードを四捨五入を行い値を丸め、Dreg32d へ結果を格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 31 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: オーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: オーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: rnd.l d1.0, d3.2 before d1.0 d3.2 st after 0x00000000 0xF021C555 0x0000 d1.0 d3.2 st 0x00000000 0x7FFFD000 0x0000 d1.0 d3.2 st 0xF0220000 0xF021C555 0x0008 N=1 例 2: rnd.l d1.0, d2.3 before d1.0 d3.2 st after 0x7FFF0000 0x7FFFD000 0x003C V=1,N=1,F=1,S=1 0x7FFF 8000 から 0x7FFF FFFF に対する丸めではオーバーフローが発生します。この命令 では結果を 0x7FFF 0000 に制限します。C,Z,V,N,F ビットの動作は飽和処理による影響を受け ません。 補足 : 0x7FFF 8000 - 0x7FFF FFFF に対する結果は 0x7FFF 0000 に制限されます。 147 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A rnd A, A round on accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 1 X 3 1 X 2 X X 1 X X 0 X X シンタックス : rnd Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = As + 0x00 0000 8000 Ad[15:0] = 0 説明 : As の下位ワードを四捨五入を行い値を丸め、Ad へ結果を格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: ビット 39 にキャリーが発生する場合にセットされ、そうでない場合にクリアされます。 Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 V: Ad にオーバーフローが発生する場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: Ad にオーバーフローが発生する場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: rnd a0, a0 before a0 st after 0x0023808322 0x0000 a0 st 0x7FFFFFA053 0x0000 a0 st 0x0023810000 0x0000 例 2: rnd a0, a0 before a0 st after 0x7FFFFF0000 0x007C V=1,N=1,F=1,S=1,E=1 0x7F FFFF 8000 から 0x7F FFFF FFFF に対する丸めではオーバーフローが発生します。こ の命令では結果を 0x7F FFFF 0000 に制限します。C,Z,V,N,F ビットの動作は飽和処理による影 響を受けません。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 148 頁 Ximo16A Preliminary 補足 : 0x7F FFFF 8000 - 0x7F FFFF FFFF に対する結果は 0x7F FFFF 0000 に制限されます。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 149 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A div Dreg32d, Dreg32s Step of divide bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 1 7 0 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : div Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : If (C_old == 1) then Dreg32d_new[31:16] = Dreg32d_old[31:16] + Dreg32s[15:0] Else Dreg32d_new[31:16] = Dreg32d_old[31:16] - Dreg32s[15:0] Endif Dreg32d_new[15:0] = Dreg32d_old[15:0] C_new = Dreg32d_new[31] ^ Dreg32s[15] Dreg32d_new = Dreg32d_new << 1 If ( C_new == 0 ) then Dreg32d_new[0] = 1 Endif 説明 : 非回復法除算による除算を1 ビット分行ないます。この命令を16 回連続して実行することで、 Dreg32d にセットされた被除数と Dreg32s の下位ワードによる除算を行ないます。Dreg32s の上位ワード ( ビット 31 から 16) はこの命令の動作に影響を与えません。商は Dreg32d の下位 ワードに現れます。 コンディションコード : U - E - S - F ↑ N V Z ↑↓ ↑↓ - C ↑↓ C: 演算結果の左シフト前のビット 31 と Dreg32s のビット 15 の排他的論理和を取った値が設定 されます。 V: 命令動作の 1 ビットの左シフトによって Dreg32d の MSB の値が変化する場合にセットされ、 そうでない場合にクリアされます。( 除算によるオーバーフローを表します。) N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: V ビットがセットされる場合にセットされます。 例: div d1.0, d3.2 before d1.0 d3.2 st 2013.12.20 版 after 0x61C0A93C 0x00005B53 0x0000 d1.0 d3.2 st 0x0CDB5279 0x00008B53 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 150 頁 Ximo16A Preliminary 補足 : 除算の実行手順について 正の固定小数に対する除算 : 固定小数点の除算では 1.31 固定小数を 1.15 固定小数によって除算し、1.15 固定小数の商を 得ます。 固 定 小 数 の 除 算、0 . 0 7 4 5 8 2 2 7 5 0 0 3 1 9 4 8 0 8 9 5 9 9 6 0 9 3 7 5 0 0 0 ( 0 x 0 9 8 B E 9 7 8 ) / 0.142211914062500 (0x1234) = 0.524444580078125(0x4321) を実行する場合、次のように div 命令を使用します。 # 被除数の初期化 movi.w d1, 0x098B movi.w d0, 0xE978 # 除数の初期化 movi.w d2, 0x1234 #C ビットをゼロに初期化 movi.w cc, 0 loopi c0, _LABEL, 16 # div 命令 x16 div d1.0, d3.2 _LABEL before d1.0 d3.2 st after 0x098BE978 0x00001234 0x0000 d1.0 d3.2 st 0x00104321 0x00001234 0x0000 商はディスティネーションレジスタの下位ワードに得られます。 正の整数に対する除算 : 整数の除算では被除数をあらかじめ左に 1 ビットシフトすることで正しい商が得られます。 整数除算、50231(0xC437) / 55(0x37) = 913(0x391) を行なう場合、次のように div 命令を使 用します。 # 被除数の初期化 movi.w d1, 0x0000 movi.w d0, 0xC437 movi.w d2, 0x0037 # 除数の初期化 lsli.l d1.0, 1 # 左シフトによる桁補正 #C ビットをゼロに初期化 movi.w cc, 0 loopi c0, _LABEL, 16 div d1.0, d3.2 #div 命令 x16 _LABEL before d1.0 d3.2 st after 0x0000C437 0x00000037 0x0000 d1.0 d3.2 st 0x00200391 0x00000037 0x0000 商はディスティネーションレジスタの下位ワードに得られます。 151 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sat A, A Saturate accumulator bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 1 X 3 0 X 2 X X 1 X X 0 X X シンタックス : sat Ad, As オペランド : Ad As a0/a1 a0/a1 オペレーション : Ad = saturate(As) 説明 : As の内容が 32 ビット長の型符号付きの数で表現できない場合に値を飽和させ、Ad へ結果を 格納します。 コンディションコード : U - E - S ↑ F - N - V - Z - C - S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例: sat a0, a0 before a0 st after 0x8123808322 0x0000 a0 st 0x007FFFA053 0x0000 a0 st 0xFF80000000 0x0020 例 2: sat a0, a0 before a0 st after 0x007FFFA053 0x0000 補足 : 飽和処理の詳細については「6.3 飽和処理と丸め処理」を参照して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 152 頁 Ximo16A Preliminary clr A Clear accumulator bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 1 X 4 0 X 3 1 X 2 X X 1 X X 0 X X シンタックス : clr Ad オペランド : Ad a0/a1 オペレーション : Ad = 0 説明 : Ad レジスタをクリアします。 コンディションコード : U - E 0 S - F - N 0 V 0 Z 1 C 0 C: 常にクリアされます。 Z: 常にセットされます。 V: 常にクリアされます。 N: 常にクリアされます。 E: 常にクリアされます。 例: clr a0, mul d1.0, d2, d3, ss before a0 st after 0x01520005FC 0x0000 a0 st 0x0000000000 0x0002 Z=1 補足 : この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 153 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 19 論理演算命令 and.w Dreg16, Dreg16 andi.w Dreg16, IMM16 or.w Dreg16, Dreg16 ori.w Dreg16, IMM16 eor.w Dreg16, Dreg16 eori.w Dreg16, IMM16 com.w Dreg16, Dreg16 概要 : この章では論理演算命令について説明します。論理演算命令は 16 ビットワードのデータレ ジスタに対して実行でき、論理和、論理積、排他的論理和、論理否定の操作を行なうことができ ます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 154 頁 Ximo16A Preliminary and.w Dreg16, Dreg16 Logical AND on 16-bit data register bit 15 0 14 1 13 0 12 0 11 1 10 0 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : and.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d & Dreg16s 説明 : Dreg16d と Dreg16s の論理和を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: and.w d1, d0 before d1 d0 st 155 頁 after 0xFF00 0xAA55 0x0000 d1 d0 st 0xAA00 0xAA55 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A andi.w Dreg16, IMM16 Logical AND on 16-bit data register with immediate bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 0 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : andi.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d = Dreg16d & IMM16 説明 : Dreg16d と IMM16 の論理和を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: andi.w d1, 0xAA55 before d1 st 2013.12.20 版 after 0xFF00 0x0000 d1 st 0xAA00 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 156 頁 Ximo16A Preliminary or.w Dreg16, Dreg16 Logical OR on 16-bit data register bit 15 0 14 1 13 0 12 0 11 1 10 0 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : or.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d | Dreg16s 説明 : Dreg16d と Dreg16s の論理積を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: or.w d1, d0 before d1 d0 st 157 頁 after 0xFF00 0xAA55 0x0000 d1 d0 st 0xFF55 0xAA55 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A ori.w Dreg16, IMM16 Logical OR on 16-bit data register with immediate bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 0 4 1 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : ori.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d = Dreg16d | IMM16 説明 : Dreg16d と IMM16 の論理和を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: ori.w d1, 0xAA55 before d1 st 2013.12.20 版 after 0xFF00 0x0000 d1 st 0xFF55 0x0008 N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 158 頁 Ximo16A Preliminary eor.w Dreg16, Dreg16 Logical exclusive OR on 16-bit data register bit 15 0 14 1 13 0 12 0 11 1 10 0 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : eor.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d ^ Dreg16s 説明 : Dreg16d と Dreg16s の排他的論理和を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: eor.w d1, d0 before d1 d0 st 159 頁 after 0xFF00 0xAA55 0x0000 d1 d0 st 0x5555 0xAA55 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A eori.w Dreg16, IMM16 Logical exclusive OR on 16-bit data register with immediate bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 1 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 シンタックス : eori.w Dreg16d, IMM16 オペランド : Dreg16d IMM16 d0 - d15 0 - 65535 オペレーション : Dreg16d = Dreg16d ^ IMM16 説明 : Dreg16d と IMM16 の排他的論理和を取り、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: eori.w d1, 0xAA55 before d1 st 2013.12.20 版 after 0xFF00 0x0000 d1 st 0x5555 0x0080 (C) 2009-2013 New Japan Radio Co., Ltd. 160 頁 Ximo16A Preliminary com.w Dreg16, Dreg16 1 s complement value bit 15 0 14 1 13 0 12 0 11 1 10 0 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : com.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = ~Dreg16s 説明 : Dreg16s のビットを反転し、Dreg16d へ結果を格納します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ - Z: 演算結果がゼロの場合にセットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: com.w d1, d1 before d1 st 161 頁 after 0xFF00 0x0000 d1 st 0x00FF 0x0000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 20 ビット操作命令 bset Dreg16, IMM4 bset (IMM16), IMM4 bclr Dreg16, IMM4 bclr (IMM16), IMM4 btgl Dreg16, IMM4 btst Dreg16, IMM4 btst (IMM16), IMM4 概要 : この章ではビット操作命令について説明します。ビット操作命令ではオペランド内の即値で 指定される 1 ビットに対してのみ操作を行ないます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 162 頁 Ximo16A Preliminary bset Dreg16, IMM4 Test set on 16-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 0 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : bset Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d | (2IMM4) 説明 : Dreg16d の IMM4 フィールドによって指示されるビットをセットします。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。 例: bset d3, 3 before d1 st 163 頁 after 0x0000 0x0000 d1 st 0x0008 0x0002 Z=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A bclr Dreg16, IMM4 Bit clear on 16-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 0 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : bclr Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d & ~(2IMM4) 説明 : Dreg16d の IMM4 フィールドによって指示されるビットをクリアします。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。 例: bclr d3, 3 before d1 st 2013.12.20 版 after 0xFFFF 0x0000 d1 st 0xFFF7 0x0001 C=1 (C) 2009-2013 New Japan Radio Co., Ltd. 164 頁 Ximo16A Preliminary btgl Dreg16, IMM4 Bit toggle on 16-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 0 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : btgl Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d ^ (2IMM4) 説明 : Dreg16d の IMM4 フィールドによって指示されるビットを反転します。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。 例: btgl d3, 3 before d1 st 165 頁 after 0xFFFF 0x0000 d1 st 0xFFF7 0x0001 C=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A btst Dreg16, IMM4 Bit test on 16-bit data register bit 15 0 14 1 13 1 12 0 11 0 10 0 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : btst Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : C = Dreg16d & (2IMM4) Z = !( Dreg16d & (2IMM4) ) 説明 : Dreg16d の IMM4 フィールドによって指示されるビットを評価し、コンディションコードを 更新します。Dreg16d の値は更新されません。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの値が 0 の場合にセットされ、1 の場合にクリアされます。 例: btst d3, 3 before d1 st 2013.12.20 版 after 0x000F 0x0000 d1 st 0x000F 0x0001 C=1 (C) 2009-2013 New Japan Radio Co., Ltd. 166 頁 Ximo16A Preliminary bset (IMM16), IMM4 Bit set on memory bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 0 5 0 4 0 3 2 IMM4 1 0 シンタックス : bset (IMM16), IMM4 オペランド : IMM16 IMM4 0x0000 - 0xFFFF 0 - 15 オペレーション : MEM[IMM16] = MEM[IMM16] | (2IMM4) 説明 : IMM16 の示すアドレスのメモリオペランドに対して、IMM4 フィールドによって指示される ビットをセットします。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。 例: bset (0x0055), 3 before MEM[0x0055] st after 0x0000 0x0000 MEM[0x0055] st 0x0008 0x0002 Z=1 補足 : ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。 167 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A bclr (IMM16), IMM4 Bit clear on memory bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 0 5 0 4 1 3 2 IMM4 1 0 シンタックス : bclr (IMM16), IMM4 オペランド : IMM16 IMM4 0x0000 - 0xFFFF 0 - 15 オペレーション : MEM[IMM16] = MEM[IMM16] & ~(2IMM4) 説明 : IMM16 の示すアドレスのメモリオペランドに対して、IMM4 フィールドによって指示される ビットをクリアします。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの変更前の値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの変更前の値が 0 の場合にセットされ、1 の場合にクリアされます。 例: bclr (0x0055), 3 before MEM[0x0055] st after 0xFFFF 0x0000 MEM[0x0055] st 0xFFF7 0x0001 C=1 補足 : ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 168 頁 Ximo16A Preliminary btst (IMM16), IMM4 Bit test on memory bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 0 5 1 4 1 3 2 IMM4 1 0 シンタックス : btst (IMM16), IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : C = MEM[IMM16] & (2IMM4) Z = !( MEM[IMM16] & (2IMM4) ) 説明 : IMM16 の示すアドレスのメモリオペランドに対して、指示されるビットを評価し、コンディ ションコードを更新します。メモリの値は更新されません。 コンディションコード : U - E - S - F - N - V - Z C ↑↓ ↑↓ C: 指示されるビットの値が 1 の場合にセットされ、0 の場合にクリアされます。 Z: 指示されるビットの値が 0 の場合にセットされ、1 の場合にクリアされます。 例: btst (0x0055), 3 before MEM[0x0055] st after 0x000F 0x0000 MEM[0x0055] st 0x000F 0x0001 C=1 補足 : ペリフェラルに対するビット操作を目的とした命令です。この命令はストアバッファのオン / オフに関わらずバスアクセスの順序性が保証されます。 169 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 21 シフト命令 asl.w Dreg16, Dreg16 asr.w Dreg16, Dreg16 asli.w Dreg16, IMM4 asri.w Dreg16, IMM4 asl.l Dreg32, Dreg32 asr.l Dreg32, Dreg32 asli.l Dreg32, IMM4 asri.l Dreg32, IMM4 asl A, Dreg32 asr A, Dreg32 asli A, IMM4 asri A, IMM4 lsl.w Dreg16, Dreg16 lsr.w Dreg16, Dreg16 lsli.w Dreg16, IMM4 lsri.w Dreg16, IMM4 lsl.l Dreg32, Dreg32 lsr.l Dreg32, Dreg32 lsli.l Dreg32, IMM4 lsri.l Dreg32, IMM4 lsl A, Dreg32 lsr A, Dreg32 lsli A, IMM4 lsri A, IMM4 rol.w Dreg16 ror.w Dreg16 概要 : この章ではシフト命令について説明します。シフト命令には算術左 / 算術右 / 論理左 / 論理右 シフトがあり、それぞれ、16 ビットデータレジスタ /32 ビットデータレジスタ / アキュームレー タレジスタを対象とした版があります。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 170 頁 Ximo16A Preliminary asl.w Dreg16, Dreg16 Arithmetic left shift 16-bit data register by register bit 15 0 14 1 13 0 12 0 11 1 10 1 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : asl.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d << Dreg16s[4:0] 説明 : Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ左シフトします。シフト 結果がオーバーフローする場合には飽和処理を行なってから Dreg16d に格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: asl.w d0, d1 before d0 d1 st after 0x0AAA 0x0003 0x0000 d0 d1 st 0x5D01 0x0002 0x0000 d0 d1 st 0x5550 0x0003 0x0000 例 2: asl.w d0, d1 before d0 d1 st after 0x7FFF 0x0002 0x0035 C=1,V=1,F=1,S=1 0x5D01 の 2 ビット左シフト 0x7404(0x1 7404) はオーバーフローとして、正の最大値 0x7FFF へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 171 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A この命令はシフト結果がオーバーフローする場合、結果を最小 0x8000、最大 0x7FFF に飽和 させます。飽和処理が必要でない場合は lsl 版を使用して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 172 頁 Ximo16A Preliminary asli.w Dreg16, IMM4 Arithmetic left shift 16-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 0 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : asli.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d << IMM4 説明 : Dreg16d の値を IMM4 で指示されるビット数だけ左シフトします。シフト結果がオーバーフ ローする場合には飽和処理を行なってから Dreg16d に格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例: asli.w d0, 1 before d0 st after 0x0A56 0x0000 d0 st 0x14AC 0x0000 補足: IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は asl.w 版と同様です。 173 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A asl.l Dreg32, Dreg32 Arithmetic shift left 32-bit data register by register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : asl.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d << Dreg32s[4:0] 説明 : Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ左シフトします。シフト 結果がオーバーフローする場合には飽和処理を行なってから Dreg32d に格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例 1: asl.l d1.0, d3.2 before d1.0 d3.2 st after 0x0A5680C1 0x00000002 0x0000 d1.0 d3.2 st 0x8031AB01 0x00000001 0x0000 d1.0 d3.2 st 0x295A0304 0x00000002 0x0000 例 2: asl.l d1.0, d3.2 before d1.0 d3.2 st after 0x80000000 0x00000001 0x0035 C=1,V=1,F=1,S=1 0x8031 AB01 の 1 ビット左シフト 0x0063 5602(0x1 0063 5602) はオーバーフローとして、 0x8000 0000 へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受けません。 補足 : シフト量として有効な値は 0 ∼ 16 までです。16 以上の値をシフト量として使用した場合の 結果は不定です。 この命令はシフト結果がオーバーフローする場合、結果を最小 0x8000 0000、最大 0x7FFF 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 174 頁 Ximo16A Preliminary FFFF に飽和させます。飽和処理が不要な場合は lsl 版を使用して下さい。 175 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A asli.l Dreg32, IMM4 Arithmetic shift left 32-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 1 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : asli.l Dreg32d, IMM4 オペランド : Dreg16d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d << IMM4 説明 : Dreg32d の値を IMM4 で指示されるビット数だけ左シフトします。シフト結果がオーバーフ ローする場合には飽和処理を行なってから Dreg32d に格納します。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例: asli.l d1.0, 2 before d1.0 st after 0x0A5680C1 0x0000 d1.0 st 0x295A0304 0x0000 補足: IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は asl.l 版と同様です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 176 頁 Ximo16A Preliminary asl A, Dreg32 Arithmetic shift left accumulator by register bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 0 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : asl Ad, Dreg32s オペランド : Ad Dreg32s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad << Dreg32s[4:0] 説明 : 40 ビットのアキュームレータ Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ 左シフトします。シフト結果がオーバーフローする場合には飽和処理を行なってから Ad に格納 します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例 1: asl a0, d1.0 before a0 d1.0 st after 0xFF9A507B23 0x00000003 0x0000 a0 d1.0 st 0x109A507B23 0x00000003 0x0000 d1 d0 st 0xFCD283D918 0x00000003 0x0049 C=1,N=1,E=1 例 2: asl d0, d1.0 before d0 d1 st after 0x7FFFFFFFFF 0x00000003 0x007C V=1,N=1,F=1,S=1,E=1 0x10 9A50 7B23 の 3 ビット左シフト 0x84 D283 D918 はオーバーフローとして、正の最大 値 0x7F FFFF FFFF へ飽和処理されます。C,Z,V,N,F ビットの動作は飽和処理による影響を受け 177 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A ません。 補足 : シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 この命令はシフト結果がオーバーフローする場合、結果を最小 0x80 0000 0000、最大 0x7F FFFF FFFF に飽和させます。飽和処理が必要でない場合は lsl 版を使用して下さい。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 178 頁 Ximo16A Preliminary asli A, IMM4 Arithmetic shift left accumulator by immediate bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 0 X 3 2 1 0 0 X X X IMM4(0 to 15) シンタックス : asli Ad, IMM4 オペランド : Ad IMM4 a0/a1 0 - 15 オペレーション : Ad = Ad << IMM4 説明 : 40 ビットのアキュームレータ Ad の値を IMM4 フィールドで指示されるビット数だけ左シフ トします。シフト結果がオーバーフローする場合には飽和処理を行なってから Ad に格納します。 コンディションコード : U - E S ↑↓ ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: asli a0, 3 before a0 st after 0xFF9A507B23 0x0000 a0 st 0xFCD283D918 0x0049 C=1,N=1,E=1 補足 : IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は asl 版と同様です。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 179 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A asr.w Dreg16, Dreg16 Arithmetic shift right 16-bit data register by register bit 15 0 14 1 13 0 12 0 11 1 10 1 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : asr.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d >> Dreg16s[4:0] 説明 : Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: asr.w d0, d1 before d0 d1 st after 0x8006 0x0003 0x0000 d0 d1 st 0xF000 0x0003 0x0009 C=1,N=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 180 頁 Ximo16A Preliminary asri.w Dreg16, IMM4 Arithmetic shift right 16-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 0 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : asri.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d >> IMM4 説明 : Dreg16d の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: asri.w d0, 3 before d0 st after 0x8006 0x0000 d0 st 0xF000 0x0009 C=1,N=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 181 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A asr.l Dreg32, Dreg32 Arithmetic shift right 32-bit data register by register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 0 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : asr.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d >> Dreg32s[4:0] 説明 : Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: asr.l d1.0, d3.2 before d1.0 d3.2 st after 0x80060001 0x00000003 0x0000 d1.0 d3.2 st 0xF000C000 0x00000003 0x0008 N=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 182 頁 Ximo16A Preliminary asri.l Dreg32, IMM4 Arithmetic shift left 32-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 1 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : asri.l Dreg32d, IMM4 オペランド : Dreg32d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d >> IMM4 説明 : Dreg32d の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: asri.l d1.0, 3 before d1.0 st after 0x80060000 0x0000 d1.0 st 0xF000C000 0x0008 N=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 183 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A asr A, Dreg32 Arithmetic shift right accumulator by register bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 0 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : asr Ad, Dreg32s オペランド : Ad Dreg32s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad >> Dreg32s[4:0] 説明 : Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: asr a1, d3.2 before a1 d3.2 st after 0x0680060004 0x00000003 0x0000 a1 d3.2 st 0x00D000C000 0x00000003 0x0041 C=1,E=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 184 頁 Ximo16A Preliminary asri A, IMM4 Arithmetic shift right accumulator by immediate bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 0 X 3 2 1 0 1 X X X IMM4(0 to 15) シンタックス : asri Ad, IMM4 オペランド : Ad IMM4 a0/a1 0 - 15 オペレーション : Ad = Ad >> IMM4 説明 : Ad の値を IMM4 フィールドで指示されるビット数だけ算術右シフトします。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: asri a1, 3 before a1 st after 0x0680060004 0x0000 a1 st 0x00D000C000 0x0041 C=1,E=1 補足 : シフトによって空いた左端のビット位置は、元の符号ビット値によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 185 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsl.w Dreg16, Dreg16 logical left shift 16-bit data register by register bit 15 0 14 1 13 0 12 0 11 1 10 1 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : lsl.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d << Dreg16s[4:0] 説明 : Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ左シフトします。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 例: lsl.w d0, d1 before d0 d1 st after 0x5D01 0x0002 0x0000 d0 d1 st 0x7404 0x0002 0x0015 C=1,V=1,F=1 補足 : シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 186 頁 Ximo16A Preliminary lsli.w Dreg16, IMM4 Logical left shift 16-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 0 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : lsli.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d << IMM4 説明 : Dreg16d の値を IMM4 で指示されるビット数だけ左シフトします。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 例: lsli.w d0, 1 before d0 st after 0x0A56 0x0000 d0 st 0x14AC 0x0000 補足: IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は lsl.w 版と同様です。 187 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsl.l Dreg32, Dreg32 Logical shift left 32-bit data register by register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : lsl.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d << Dreg32s[4:0] 説明 : Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ左シフトします。 コンディションコード : U - E - S ↑ F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 S: 演算結果に対して飽和処理が行なわれた場合にセットされます。 例: lsl.l d1.0, d3.2 before d1.0 d3.2 st after 0x0A5680C1 0x00000002 0x0000 d1.0 d3.2 st 0x295A0304 0x00000002 0x0000 補足 : シフト量として有効な値は 0 ∼ 16 までです。16 以上の値をシフト量として使用した場合の 結果は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 188 頁 Ximo16A Preliminary lsli.l Dreg32, IMM4 Logical shift left 32-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : lsli.l Dreg32d, IMM4 オペランド : Dreg16d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d << IMM4 説明 : Dreg32d の値を IMM4 で指示されるビット数だけ左シフトします。 コンディションコード : U - E - S - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 F: 左シフトの結果がオーバーフローする場合にセットされます。 例: lsli.l d1.0, 2 before d1.0 st after 0x0A5680C1 0x0000 d1.0 st 0x295A0304 0x0000 補足: IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は lsl.l 版と同様です。 189 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsl A, Dreg32 Logical shift left accumulator by register bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 1 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : lsl Ad, Dreg32s オペランド : Ad Dreg32s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad << Dreg32s[4:0] 説明 : 40 ビットのアキュームレータ Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ 左シフトします。 コンディションコード : U - E S ↑↓ - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: 左シフトの結果がオーバーフローする場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: lsl a0, d1.0 before a0 d1.0 st after 0xFF9A507B23 0x00000003 0x0000 a0 d1.0 st 0xFCD283D918 0x00000003 0x0049 C=1,N=1,E=1 補足 : シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 190 頁 Ximo16A Preliminary lsli A, IMM4 Logical shift left accumulator by immediate bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 1 X 3 2 1 0 0 X X X IMM4(0 to 15) シンタックス : lsli Ad, IMM4 オペランド : Ad IMM4 a0/a1 0 - 15 オペレーション : Ad = Ad << IMM4 説明 : 40 ビットのアキュームレータ Ad の値を IMM4 フィールドで指示されるビット数だけ左シフ トします。 コンディションコード : U - E S ↑↓ - F ↑ N V Z C ↑↓ ↑↓ ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 左シフトの結果がオーバーフローする場合にセットされ、そうで無い場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。( 演算結果の ビット 39 がコピーされます。) F: 左シフトの結果がオーバーフローする場合にセットされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: lsl a0, 3 before a0 st after 0xFF9A507B23 0x0000 a0 st 0xFCD283D918 0x0049 C=1,N=1,E=1 補足 : IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 その他の動作は lsl 版と同様です。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 191 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsr.w Dreg16, Dreg16 Logical shift right 16-bit data register by register bit 15 0 14 1 13 0 12 0 11 1 10 1 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : lsr.w Dreg16d, Dreg16s オペランド : Dreg16d Dreg16s d0 - d15 d0 - d15 オペレーション : Dreg16d = Dreg16d >> Dreg16s[4:0] 説明 : Dreg16d の値を Dreg16s の下位 5 ビットで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: lsr.w d0, d1 before d0 d1 st after 0x8006 0x0003 0x0000 d0 d1 st 0x1000 0x0003 0x0001 C=1 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 192 頁 Ximo16A Preliminary lsri.w Dreg16, IMM4 Logical shift right 16-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 0 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : lsri.w Dreg16d, IMM4 オペランド : Dreg16d IMM4 d0 - d15 0 - 15 オペレーション : Dreg16d = Dreg16d >> IMM4 説明 : Dreg16d の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: lsri.w d0, 3 before d0 st after 0x8006 0x0000 d0 st 0x1000 0x0001 C=1 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 193 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsr.l Dreg32, Dreg32 Logical shift right 32-bit data register by register bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 1 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : lsr.l Dreg32d, Dreg32s オペランド : Dreg32d Dreg32s d1.0 - d15.14 d1.0 - d15.14 オペレーション : Dreg32d = Dreg32d >> Dreg32s[4:0] 説明 : Dreg32d の値を Dreg32s の下位 5 ビットで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: lsr.l d1.0, d3.2 before d1.0 d3.2 st after 0x80060001 0x00000003 0x0000 d1.0 d3.2 st 0x1000C000 0x00000003 0x0000 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 194 頁 Ximo16A Preliminary lsri.l Dreg32, IMM4 Logical shift left 32-bit data register by immediate bit 15 0 14 1 13 0 12 1 11 1 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) シンタックス : lsri.l Dreg32d, IMM4 オペランド : Dreg32d IMM4 d1.0 - d15.14 0 - 15 オペレーション : Dreg32d = Dreg32d >> IMM4 説明 : Dreg32d の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E - S - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: lsri.l d1.0, 3 before d1.0 st after 0x80060000 0x0000 d1.0 st 0x1000C000 0x0000 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 195 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lsr A, Dreg32 Logical shift right accumulator by register bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 1 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X シンタックス : lsr Ad, Dreg32s オペランド : Ad Dreg32s a0/a1 d1.0 - d15.14 オペレーション : Ad = Ad >> Dreg32s[4:0] 説明 : Ad の値を Dreg32s の下位 5 ビットで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: lsr a1, d3.2 before a1 d3.2 st after 0x0680060004 0x00000003 0x0000 a1 d3.2 st 0x00D000C000 0x00000003 0x0041 C=1,E=1 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 シフト量として有効な値は 0 ∼ 16 です。16 以上の値をシフト量として使用した場合の結果 は不定です。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 196 頁 Ximo16A Preliminary lsri A, IMM4 Logical shift right accumulator by immediate bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 1 X 3 2 1 0 1 X X X IMM4(0 to 15) シンタックス : lsri Ad, IMM4 オペランド : Ad IMM4 a0/a1 0 - 15 オペレーション : Ad = Ad >> IMM4 説明 : Ad の値を IMM4 フィールドで指示されるビット数だけ論理右シフトします。 コンディションコード : U - E S ↑↓ - F - N V ↑↓ 0 Z C ↑↓ ↑↓ C: シフト操作によってレジスタからあふれた最後のビットがコピーされます。シフト量が 0 ビッ トの場合はクリアされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 V: 常にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 E: 演算後の Ad のビット 39 からビット 31 までが、全て 0 または全て 1 で無い場合にセットさ れ、そうでない場合にクリアされます。 例: lsri a1, 3 before a1 st after 0x0680060004 0x0000 a1 st 0x00D000C000 0x0041 C=1,E=1 補足 : シフトによって空いた左端のビット位置は、0 によって埋め戻されます。 IMM4 フィールドで指示できる値は 0 ∼ 15 ですが、シフト量として 0 を指定した場合は 16 ビットシフトとなります。よってこの命令でシフト可能なビット数は 1 ∼ 16 ビットです。 この命令は並列転送命令を取ることが出来ます。詳細は「23 並列転送命令の形式について」 を参照して下さい。 197 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A rol.w Dreg16 Rotate left through carry bit 15 0 14 1 13 0 12 1 11 0 10 1 9 1 8 0 7 X 6 X 5 X 4 X 3 Dreg 16d Even /Odd 2 1 Dreg16d (Destination Dreg16#) シンタックス : rol.w Dreg16d オペランド : Dreg16d d0 - d15 オペレーション : Dreg16d[0] = C, Dreg16d[15:0] = Dreg16d[14:1], C = Dreg16d[15] 説明 : 16 ビットデータレジスタをキャリービットと共に 1 ビット左回転します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ ↑↓ C: 回転によって Dreg16d からあふれるビットがコピーされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: rol.w d7 before d7 st 2013.12.20 版 after 0x4000 0x0001 C=1 d7 st 0x8001 0x0008 C=0,N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 198 頁 Ximo16A Preliminary ror.w Dreg16 Rotate right through carry bit 15 0 14 1 13 0 12 1 11 0 10 1 9 1 8 1 7 X 6 X 5 X 4 X 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) シンタックス : ror.w Dreg16d オペランド : Dreg16d d0 - d15 オペレーション : Dreg16d[15] = C, Dreg16d[14:0] = Dreg16d[15:1], C = Dreg16d[0] 説明 : 16 ビットデータレジスタをキャリービットと共に 1 ビット右回転します。 コンディションコード : U - E - S - F - N V ↑↓ - Z C ↑↓ ↑↓ C: 回転によって Dreg16d からあふれるビットがコピーされます。 Z: 演算結果がゼロの場合セットされ、そうでない場合にクリアされます。 N: 演算結果の最上位ビットが 1 の場合にセットされ、0 の場合にクリアされます。 例: rol.w d7 before d7 st 199 頁 after 0xC001 0x0001 C=1 d7 st 0xE000 0x0009 C=1,N=1 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 22 プログラムフロー制御命令 / 特殊命令 nop dnop jmp Preg jmp IMM16, <condition> call Preg call IMM16 bra IMM7, <condition> loop Creg, IMM16 loopi Creg, IMM16, IMM8 ret rti rtf ftrap trap debug sleep ccp <condition> lea (Preg) 概要 : この章ではプログラムフロー制御命令及びその他の命令について説明します。プログラムフ ロー制御命令は jmp/bra/call/loop/ret/trap/rti 命令などがあり、意図的にプログラムの実行フロー を変更します。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 200 頁 Ximo16A Preliminary nop No operation bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 0 シンタックス : nop オペランド : - - オペレーション : pc = pc + 1 説明 : pc をインクリメントします。 コンディションコード : U - 201 頁 E - S - F - N - V - Z - C - (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A dnop No operation (2) bit 15 1 X 14 1 X 13 1 X 12 0 X 11 P X 10 0 X 9 1 X 8 1 X 7 X X 6 X X 5 X X 4 X X 3 X X 2 X X 1 X X 0 X X シンタックス : dnop オペランド : - - オペレーション : pc = pc + 2 説明 : pc をインクリメント (+2) します。 コンディションコード : U - E - S - F - N - V - Z - C - 補足 : 2 ワード版の nop です。この命令は並列転送命令を取ることが出来ます。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 202 頁 Ximo16A Preliminary jmp Preg Jump bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 0 3 1 2 1 Pregs Preg# 0 シンタックス : Jmp Pregs オペランド : Pointer p0 - p5/fp/sp オペレーション : pc = Pregs 説明 : Pregs の値を pc に代入しプログラムの流れを変更します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: jmp p4 before p4 pc 203 頁 after 0xC001 0x1101 d7 pc 0xC001 0xC001 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A jmp IMM16, <condition> Conditional jump bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 3 2 conditon 1 0 シンタックス : Jmp IMM16, <condition> オペランド : IMM16 0x0000 - 0xFFFF オペレーション : If (condition == true) then pc = IMM16 Else pc = pc + 2 Endif 説明 : condition フィールドにより指示された条件が成り立っている場合に、IMM16 で示される値を pc へ代入してプログラムの流れを変更します。 条件が成立しない場合は次の命令を実行します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: jmp 0x1000, cs before st pc 2013.12.20 版 after 0x0001 C=1 0x1101 st pc 0x0001 0x1000 (C) 2009-2013 New Japan Radio Co., Ltd. 204 頁 Ximo16A Preliminary call Preg Call subroutine bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 1 3 0 2 1 Pregs Preg# 0 シンタックス : call Pregs オペランド : Pregs p0 - p5/fp オペレーション : sp = sp - 1 MEM[sp] = pc + 1 pc = Pregs 説明 : サブルーチンの呼び出しを実行します。戻りアドレスとして次命令のアドレスをスタックに プッシュした後に、Pregs の値を pc に代入しプログラムの流れを変更します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: call p0 before p0 pc st MEM[0xF021] 205 頁 after 0x2000 0x1101 0xF022 0x0000 p0 pc st MEM[0xF021] 0x2000 0x2000 0xF021 0x1102 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A call IMM16 Call subroutine bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 X 3 X 2 X 1 X 0 X シンタックス : call IMM16 オペランド : IMM16 0x0000 - 0xFFFF オペレーション : sp = sp - 1 MEM[sp] = pc + 2 pc = IMM16 説明 : サブルーチンの呼び出しを実行します。戻りアドレスとして次命令のアドレスをスタックに プッシュした後に、IMM16 の値を pc に代入しプログラムの流れを変更します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: call 0x2000 before pc st MEM[0xF021] 2013.12.20 版 after 0x1101 0xF022 0x0000 pc st MEM[0xF021] 0x2000 0xF021 0x1103 (C) 2009-2013 New Japan Radio Co., Ltd. 206 頁 Ximo16A Preliminary bra IMM7, <condition> Conditional branch bit 15 1 14 0 13 0 12 0 11 10 9 8 IMM7(-64 to 63) 7 6 5 4 3 2 condition 1 0 シンタックス : bra IMM7, <condition> オペランド : IMM7 -64 - 63 オペレーション : If (condition == true) then pc = pc + IMM7 Else pc = pc + 1 Endif 説明 : condition フィールドにより指示された条件が成り立っている場合に、pc へ符号付 7 ビット のオフセットを加算してプログラムの流れを変更します。 条件が成立しない場合は次の命令を実行します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: bra 0x10, cs before st pc 207 頁 after 0x0001 C=1 0x1101 st pc 0x0001 0x1111 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A loop Creg, IMM16 Loop setup bit 15 1 14 1 13 0 12 1 11 0 10 0 9 1 8 7 Creg X c0:0 c1:1 6 X 5 X 4 X 3 X 2 X 1 X 0 X IMM16 シンタックス : Loop Creg, IMM16 オペランド : Creg IMM16 c0/c1 0x0000-0xFFFF オペレーション : Sreg = pc + 2 Ereg = IMM16 説明 : ハードウェアループの設定を行い、ループを実行します。ループ設定用のレジスタは c0/s0/ e0、c1/s1/e1 が組になっており、Creg で指定した方の Ereg,Sreg に値を設定します。 この命令ではループ実行したい回数をあらかじめ Creg にセットし、この命令よりも上位の アドレスをループの終わりのアドレスとして IMM16 に指定します。この命令の次の命令から、 アドレス IMM16 の直前の命令までを、分岐のオーバーヘッド無く繰り返し実行します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: loop c0, 0x1500 before s0 e0 pc after 0x0000 0x0000 0x1101 s0 e0 pc 0x1103 0x1500 0x1103 補足 : ハードウェアは実行番地がループの終わりのアドレス (Ereg にセットされた番地 ) に達した とき、ループカウンタ Creg がゼロで無い場合、これをデクリメントし、ループ先頭アドレス (Sreg にセットされた番地 ) に分岐します。 2 つのループコンテキスト、c0/s0/e0 と c1/s1/e1 とを利用して 2 重ループの実行を行なう場 合に、ループの最後アドレス (e0/e1) が同じ値の場合、c0/s0/e0 の側をループの内側に設定して ください。c0 のカウンタのデクリメントが優先されます。 Creg の値を 0 に設定した場合、ループ内部を 1 度だけ実行してループを抜けます。 ループ内の最後の命令には次の命令を置く事は出来ません。実行結果は不定となります。 bra IMM7, <condition> / jmp IMM16, <condition> / jmp Preg call Preg / call IMM16 trap / ftrap / ret / rti / rtf 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 208 頁 Ximo16A Preliminary ループ最後の命令が 64 ビット (4 ワード ) のアライメントを跨いで配置される場合、ループ 先頭への分岐には 1 システムクロックのペナルティが発生します ( 演算結果に影響はありません )。 単一の命令の繰り返しなどでこのペナルティが問題になる場合、.align 擬似命令を用いてア ライメントを保障して下さい。 #-----------------------------------------------------# ... bra _loopstart, al .align 4 #=> 4 ワードアライメントの保障 dnop #=> 2 ワード命令 _loopstart: loop c0, _loopend #=>2 ワード命令 add.w d3, d1, d0 : mov.w (p1+), d3 : mov.w d0, (p1+) #=> 4 ワード命令 _loopend: ... #-----------------------------------------------------# 209 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A loopi Creg, IMM16, IMM8 Loop setup by immediate bit 15 1 14 1 13 0 12 1 11 0 10 1 9 0 8 7 6 5 4 Creg IMM8(0 to 255) c0:0 c1:1 3 2 1 0 IMM16 シンタックス : Loopi Creg, IMM16, IMM8 オペランド : Creg IMM16 IMM8 c0/c1 0x0000-0xFFFF 0 - 255 オペレーション : Creg = IMM8 Sreg = pc + 2 Ereg = IMM16 説明 : ハードウェアループの設定を行い、ループを実行します。ループ設定用のレジスタは c0/s0/ e0、c1/s1/e1 が組になっており、Creg で指定した方の Creg,Ereg,Sreg に値を設定します。 この命令ではループ実行したい回数を即値で指定します。255 回までの固定回数ループが 1 命令で設定できます。この命令よりも上位のアドレスをループの終わりのアドレスとして IMM16 に指定します。この命令の次の命令から、アドレス IMM16 の直前の命令までを、分岐の オーバーヘッド無く繰り返し実行します。 コンディションコード : U - E - S - F - N - V - Z - C - 例: loopi c0, 0x1500, 0xF before c0 s0 e0 pc after 0x0000 0x0000 0x0000 0x1101 c0 s0 e0 pc 0x000F 0x1103 0x1500 0x1103 補足 : ループの実行回数を命令フィールド中の即値で指定する以外は loop 命令と同様の動作です。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 210 頁 Ximo16A Preliminary ret Return from subroutine bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 0 0 0 シンタックス : ret オペランド : - - オペレーション : pc = MEM[sp] sp = sp + 1 説明 : サブルーチンから戻ります。スタックトップからポップした値を pc に代入しプログラムの流 れを変更します。sp はインクリメントされます。 コンディションコード : U - E - S - F - N - V - Z - C - 例: ret before pc sp MEM[0xF021] 211 頁 after 0x2050 0xF021 0x1103 pc sp MEM[0xF021] 0x1103 0xF022 0x1103 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A rti Return from interrupt bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 0 0 1 シンタックス : rti オペランド : - - オペレーション : st = MEM[sp] sp = sp + 1 pc = MEM[sp] sp = sp + 1 説明 : スタックトップから st レジスタと戻り番地をポップし、割り込みハンドラから復帰します。 コンディションコード : U - E - S - F - N - V - Z - C - rti before pc sp st MEM[0xF020] MEM[0xF021] 2013.12.20 版 after 0x5500 0xF020 0x8000 0x0001 0x2051 pc sp st MEM[0xF020] MEM[0xF021] 0x2051 0xF022 0x0001 0xC001 0x2051 (C) 2009-2013 New Japan Radio Co., Ltd. 212 頁 Ximo16A Preliminary rtf Return from fast interrupt bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 1 0 0 シンタックス : rtf オペランド : - - オペレーション : pc = spc st = sst c0 = sc0 c1 = sc1 s0 = ss0 s1 = ss1 e0 = se0 e1 = se1 説明 : 内部スタックレジスタからコアレジスタを復帰します。高速割込みのサービスルーチンから の復帰に使用します。 コンディションコード : U - E - S - F - N - V - Z - C - rtf before pc st c0 c1 s0 s1 e0 e1 spc sst sc0 sc1 ss0 ss1 se0 se1 213 頁 after 0x5500 0xC800 0x0000 0x2051 0x1000 0x2000 0x1100 0x2100 0x2051 0x0001 0x0000 0x0010 0x0110 0x0210 0x0220 0x0220 pc st c0 c1 s0 s1 e0 e1 spc sst sc0 sc1 ss0 ss1 se0 se1 0x2051 0x0001 0x0000 0x0010 0x0110 0x0210 0x0220 0x0220 0x2051 0x0001 0x0000 0x0010 0x0110 0x0210 0x0220 0x0220 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A ftrap Fast interrupt trap bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 1 0 1 シンタックス : ftrap オペランド : - - オペレーション : spc = pc + 1 sst = st sc0 = c0 sc1 = c1 ss0 = s0 ss1 = s1 se0 = e0 se1 = e1 st::B = 1 st::FI = 1 st::I0 = 1 st::I1 = 1 pc = MEM[FASTINT_VECTOR] 説明 : 高速割込みの動作をエミュレーションします。 ※この命令はデバッグのためのもので、将来仕様から削除される可能性があります。 コンディションコード : U - E - 2013.12.20 版 S - F - N - V - Z - C - (C) 2009-2013 New Japan Radio Co., Ltd. 214 頁 Ximo16A Preliminary ftrap before pc st c0 c1 s0 s1 e0 e1 spc sst sc0 sc1 ss0 ss1 se0 se1 MEM[VECTOR] 215 頁 after 0x5500 0x0000 0x0000 0x2051 0x1000 0x2000 0x1100 0x2100 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x1000 pc st c0 c1 s0 s1 e0 e1 spc sst sc0 sc1 ss0 ss1 se0 se1 MEM[VECTOR] 0x1000 0xD100 0x0000 0x2051 0x1000 0x2000 0x1100 0x2100 0x5501 0x0000 0x0000 0x2051 0x1000 0x2000 0x1100 0x2100 0x1000 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A trap Trap bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 0 0 0 シンタックス : trap オペランド : - - オペレーション : sp = sp - 1 MEM[sp] = pc + 1 sp = sp - 1 MEM[sp] = st st::I0 = 1 st::I1 = 1 pc = MEM[TRAP_VECTOR] 説明 : ソフトウェア割込みを発生させます。 trap 命令の次の命令のアドレスを戻り番地としてスタックにプッシュします。またステータ スレジスタをスタックにプッシュしたの後、st レジスタの I0,I1 ビットをセットして NMI 以外の 割り込みを禁止します。その後、割込みベクタテーブルで指示される番地へジャンプします。 コンディションコード : U - E - S - F - N - V - Z - C - 例: trap before pc sp st MEM[0xF020] MEM[0xF021] MEM[VECTOR] 2013.12.20 版 after 0x2050 0xF022 0x0001 0x0000 0x0000 0x4000 pc sp st MEM[0xF020] MEM[0xF021] MEM[VECTOR] 0x4000 0xF020 0xC001 0xC001 0x2051 0x4000 (C) 2009-2013 New Japan Radio Co., Ltd. 216 頁 Ximo16A Preliminary debug Debug interrupt bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 0 0 1 シンタックス : debug オペランド : - - オペレーション : sp = sp - 1 MEM[sp] = pc sp = sp - 1 MEM[sp] = st st::I0 = 1 st::I1 = 1 pc = MEM[DEBUG_VECTOR] 説明 : デバッグ例外を発生させます。 debug 命令のアドレスを戻り番地としてスタックにプッシュします。またステータスレジス タをスタックにプッシュしたの後、st レジスタの I0,I1 ビットをセットして NMI 以外の割り込み を禁止します。その後、割込みベクタテーブルで指示される番地へジャンプします。 コンディションコード : U - E - S - F - N - V - Z - C - 例: debug before pc sp st MEM[0xF020] MEM[0xF021] MEM[VECTOR] after 0x2050 0xF022 0x0001 0x0000 0x0000 0x4000 pc sp st MEM[0xF020] MEM[0xF021] MEM[VECTOR] 0x4000 0xF020 0xC001 0xC001 0x2050 0x4000 補足 : スタックに保存される戻り番地は debug 命令のある番地になります。debug 命令を書き換え ずに rti で割り込みハンドラから戻ると、再びデバッグ例外が発生します。ソフトウェアデバッ グでのブレイクポイントの設定に使用します。 217 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A sleep sleep bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 1 2 0 1 0 0 0 シンタックス : sleep オペランド : - - オペレーション : 説明 : コアの動作をスリープ状態にします。この命令の実行により、命令フェッチが停止され、割 り込み待ちの状態へ遷移します。 復帰にはリセット、または割込みの発生が必要です。 コンディションコード : U - E - 2013.12.20 版 S - F - N - V - Z - C - (C) 2009-2013 New Japan Radio Co., Ltd. 218 頁 Ximo16A Preliminary ccp <condition> Condition copy bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 1 5 0 4 3 2 condition 1 0 シンタックス : ccp <condition> オペランド : - - オペレーション : If (condition == true) then U=1 Else U=0 Endif 説明 : condition フィールドにより指示された条件が成り立っている場合に、コンディションコード の U ビットをセットします。条件が成立しない場合は U ビットをクリアします。 コンディションコード : U E ↑↓ - S - F - N - V - Z - C - 例: ccp ge before st after 0x000C V=1,N=1 st 0x008C V=1,N=1,U=1 補足: st レジスタを直接書き換える命令以外では、U ビットを書き換える唯一の命令です。分岐な どに使用するコンディションを遅延して使用したい場合に使用します。 cmp.w d1, d0 ccp ge -- 直前の cmp 命令のコンディションを U ビットに保存 mov.w d1, (p0) add d0, d1 jmp _LABEL, us 219 頁 -- U ビットの条件による分岐 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A lea (Preg) Load effective address (modify pointer registr) bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 7 1 6 X 5 1 4 3 m0/ +/m1 Addressing Mode 2 1 0 Preg (Pointer Preg#) シンタックス : lea (Pointer+,m0) lea (Pointer-,m0) lea (Pointer+,m1) lea (Pointer-,m1) オペランド : Pointer p0 - p5/fp/sp 説明 : アドレッシングモードの指示に従ってポインタレジスタの値が更新されます。メモリへのア クセスは発生しません。 コンディションコード : U - E - S - F - N - V - Z - C - 例: lea (p3-, m1) before p3 m1 after 0x1010 0x0003 p3 m1 0x100d 0x0003 補足: アドレッシングモードの詳細については「4 アドレッシングモード」を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 220 頁 Ximo16A Preliminary 23 並列転送命令の形式について 32 ビット長の演算命令またはレジスタ間転送命令の一部では並列にロード命令、ストア命令を発行 することができます。( 並列転送が可能な命令は「24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命 令 )」を参照して下さい。) 並列発行では ・ロード命令 1 つと nop ・ストア命令 1 つと nop ・ロード命令 2 つ ・ロード命令 1 つとストア命令 1 つ の組み合わせを任意に選択することが可能です。 並列転送命令形式は次のような 64 ビット長の複合命令となり、1 つの命令として実行されます。 表 11:並列転送命令形式 32 ビット長命令 16 ビット長命令 16 ビット長命令 32 ビット長命令 2( 並列転送可能 DSP 演算命令 ) ロード命令 or ストア命令 ロード命令 or NOP アセンブラでは : を区切り文字として使用し、並列転送命令を 32 ビット長命令に続けて記述し ます。1つめのロードまたはストア命令は Data Bus X を利用して、2 つ目のロード命令は Data Bus Y を利用して処理されます。 例 1: add a0, d1, s : mov.w d1, (p1+) : nop d1 レジスタの内容を符号拡張して a0 へ加算します。p1 レジスタの指すメモリの内容を d1 へロードし、p1 をインクリメントします。 例 2: mul d1.0, d8, d2, fr : mov.w (p0), d2 : mov.w d8, (p1+,m1) d2 の内容を p0 が指すメモリへストアします。d8 と d2 を固定小数として乗算し、d1.0 へ結 果を格納します。p1 が指すメモリの内容を d8 へロードし、p1 に m1 を加算します。 例 3: asli a1, 1 : mov.w (p0), d0 : mov.w d0, (p0) 並列転送で同じアドレスに対してリード及びライトを行なう場合、p0 の指すメモリから d0 へロードする動作と d0 から p0 の指すメモリへのストアは同時に行なわれます。結果として、ま ず p0 の指すメモリの内容が d0 へロードされ、ロードされる前の ( 古い )d0 の値が p0 の指すメ モリへストアされます。 MEM[p0] = 0x1111 / d0 = 0x2222 であった場合、この命令の実行後は MEM[p0] = 0x2222 / d0 = 0x1111 となります。 23.1 並列実行可能なロード命令 24.1.2.1 mov.w Dreg16, (Preg) 24.1.2.2 mov.l Dreg32, (Preg) 24.1.2.4 mov.w A, (Preg), <s/u> 24.1.2.5 mov.l A, (Preg), <s/u> 23.2 並列実行可能なストア命令 24.1.4.1 mov.w (Preg), Dreg16 221 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 24.1.4.2 mov.l (Preg), Dreg32 24.1.4.4 mov.w (Preg), A, <s/u> 24.1.4.5 mov.l (Preg), A, <s/u> 23.3 並列転送時の制限事項 ・ディスティネーションレジスタに同じレジスタを取ることは出来ません。 × add.w d0, d1, d2, ns : mov.l d1.0, (p5+) : nop d0 レジスタが add 命令とロード命令によって書き換えられる。 ・同じポインタレジスタに対して 2 つの自動更新を指定することは出来ません。 × mov.w d5, a0, s : mov.w (p3+, m0), d5 : mov.w d12, (p3-) p3 レジスタに対する自動更新が 2 つ指定されている。 ・同じポインタレジスタをアドレッシングに使用し、自動更新を行なう場合、自動更新を取れるのは 1 つ目の並列転送のみです。 × dnop : mov.w d5, (p3) : mov.w d12, (p3+, m0) ○ dnop : mov.w d5, (p3+, m0) : mov.w d12, (p3) p3 レジスタの指すメモリのデータを d5 及び d12 にロードした後、p3 レジスタを m0 によっ て更新します。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 222 頁 Ximo16A Preliminary 24 命令エンコード一覧 ここではオプコード順 / 命令長順に命令を列挙しています。それぞれの命令についてビットフィール ド、記述例、実行サイクルを示します。 命令は次の 3 つに大きく分類できます。 24.1 16 ビット長命令 24.2 32 ビット長命令 1 24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 ) このうち「24.3 32 ビット長命令 2( 並列転送可能 DSP 演算命令 )」は並列転送命令を取ることがで き、 「23 並列転送命令の形式について」にあるように、64 ビット長の複合命令として実行することが 可能です。 24.1 16 ビット長命令 24.1.1 プログラムフロー制御命令 24.1.1.1 No operation nop bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 0 11 0 10 0 9 0 8 0 7 0 6 0 5 0 4 0 3 1 2 1 Pregs Preg# 0 9 0 8 0 7 0 6 0 5 0 4 1 3 0 2 1 Pregs Preg# 0 syntax nop opcode range 0x0000 example: nop 24.1.1.2 Jump jmp Preg bit 15 0 14 0 13 0 12 0 syntax jmp Pregs opcode range 0x0008-0x000F example: jmp p0 24.1.1.3 Call subroutine call Preg bit 15 0 14 0 13 0 12 0 11 0 10 0 syntax call Pregs opcode range 0x0010-0x0017 example: call p1 223 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.1.4 Ximo16A Return from subroutine ret bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 0 0 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 0 0 1 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 1 0 0 syntax ret opcode range 0x0020 example: ret 24.1.1.5 Return from interrupt rti bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 syntax rti opcode range 0x0021 example: rti 24.1.1.6 Return from fast interrupt rtf bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 syntax rtf opcode range 0x0022 example: rtf 24.1.1.7 Fast interrupt trap ftrap bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 0 1 1 0 1 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 0 0 0 syntax ftrap opcode range 0x0023 example: ftrap 24.1.1.8 Trap trap bit 15 0 14 0 13 0 syntax trap opcode range 0x0024 example: trap 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 224 頁 Ximo16A Preliminary 24.1.1.9 Debug interrupt debug bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 0 0 1 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 1 0 0 syntax debug opcode range 0x0025 example: debug 24.1.1.10 Unlink ulnk bit 15 0 14 0 13 0 12 0 syntax ulnk opcode range 0x0026 example: ulnk 24.1.1.11 Align stack pointer alsp bit 15 0 14 0 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 0 2 1 1 1 0 1 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 0 3 1 2 0 1 0 0 0 9 0 8 0 7 0 6 1 5 0 4 3 2 condition 1 0 syntax alsp opcode range 0x0027 example: alsp 24.1.1.12 Sleep sleep bit 15 0 14 0 13 0 12 0 syntax sleep opcode range 0x0028 example: sleep 24.1.1.13 Condition copy ccp <condition> bit 15 0 14 0 13 0 12 0 11 0 10 0 syntax ccp <condition> opcode range 0x0040-0x005F example: ccp ge 225 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A ※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。 ロード命令 ( 間接アドレッシング ) 24.1.2 この命令ではポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシング を指示するフィールドは次のように割り当てられます。 bit 15 14 13 12 11 10 9 8 7 6 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 AddressingMode には次の修飾を使用できます。 AddressingMode Symbol 000 001 010 011 100 101 110 111 (Preg) Indirect [reserved] (Preg+) Indirect/Post (Preg-) Indirect/Post (Preg+,m0) Indirect/Post (Preg-,m0) Indirect/Post (Preg+,m1) Indirect/Post (Preg-,m1) Indirect/Post 24.1.2.1 Increment Decrement Increment Decrement Increment Decrement by by by by by by Operand Size Operand Size m0 register m0 register m1 register m1 register 8 7 6 Dreg16d (Destination Dreg16#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 Load 16-bit data register mov.w Dreg16, (Preg) bit 15 0 14 0 13 0 12 1 11 0 10 0 9 Dreg 16d Even /Odd syntax mov.w Dreg16d, (Preg) opcode range 0x1000-0x13FF example: mov.w d1, (p0) 24.1.2.2 Load 32-bit data register mov.l Dreg32, (Preg) bit 15 0 14 0 13 0 12 1 11 0 10 1 9 0 8 7 6 Dreg32d (Destination Dreg32#) syntax mov.l Dreg32d, (Preg) opcode range 0x1400-0x15FF example: mov.w d1.0, (p0+) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 226 頁 Ximo16A Preliminary 24.1.2.3 Load pointer register mov.w Preg, (Preg) bit 15 0 14 0 13 0 12 1 11 0 10 1 9 1 8 7 6 Pregd (Destination Preg#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 2 1 Pointer Preg# 0 syntax mov.l Pregd, (Preg) opcode range 0x1600-0x17FF example: mov.w p1, (p0+) 24.1.2.4 Load accumulator register (word operand) mov.w A, (Preg), <s/u> bit 15 0 14 0 13 1 12 0 11 0 10 0 9 0 8 0 7 s/u s:0 u:1 6 5 4 3 Ad Addressing a0:0 Mode a1:1 syntax mov.w Ad, (Preg), <s/u> opcode range 0x2000-0x20FF example: mov.w a0, (p0+), s ※この命令はオプション <s/u> を持ちます。ロードするデータを符号付で扱うか、符号無しで扱う かを選択します。 24.1.2.5 Load accumulator register (long word operand) mov.l A, (Preg), <s/u> bit 15 0 14 0 13 1 12 0 11 0 10 0 9 0 8 1 7 s/u s:0 u:1 6 5 4 3 Ad Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 syntax mov.l Ad, (Preg), <s/u> opcode range 0x2100-0x21FF example: mov.l a1, (p2+,m1), u ※この命令はオプション <s/u> を持ちます。ロードするデータを符号付で扱うか、符号無しで扱う かを選択します。 24.1.3 ロード命令 (fp レジスタ相対 ) fp( フレームポインタ ) のみで使用できるアドレッシングモードです。 227 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.3.1 Ximo16A Load 16-bit data register mov.w Dreg16, (-IMM6, fp) bit 15 0 14 0 13 1 12 1 11 0 10 0 9 8 7 6 5 Dreg IMM6(-64 to -1) 16d Even /Odd 4 3 2 1 0 Dreg16d (Destination Dreg16#) 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 0 Dreg32d (Destination Dreg32#) 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 0 Pregd (Destination Preg#) syntax mov.w Dreg16d, (-IMM6,fp) opcode range 0x3000-0x33FF example: mov.w d1, (-32, fp) 24.1.3.2 Load 32-bit data register mov.l Dreg32, (-IMM6, fp) bit 15 0 14 0 13 1 12 1 11 0 10 1 9 0 syntax mov.l Dreg32d, (-IMM6,fp) opcode range 0x3400-0x35FF example: mov.l d1.0, (-12, fp) 24.1.3.3 Load pointer register mov.w Preg, (-IMM6, fp) bit 15 0 14 0 13 1 12 1 11 0 10 1 9 1 syntax mov.w Pregd, (-IMM6,fp) opcode range 0x3600-0x37FF example: mov.w sp, (-63, fp) 24.1.4 ストア命令 ( 間接アドレッシング ) この命令ではポインタレジスタ Preg を使った間接アドレッシングが使用できます。アドレッシング モードは「4 アドレッシングモード」を参照して下さい。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 228 頁 Ximo16A Preliminary 24.1.4.1 Store 16-bit data register mov.w (Preg), Dreg16 bit 15 0 14 0 13 0 12 1 11 1 10 0 9 Dreg 16s Even /Odd 8 7 6 Dreg16s (Source Dreg16#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 8 7 6 Dreg32s (Source Dreg32#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 8 7 Pregs (Source Preg#) 5 4 3 Addressing Mode 2 1 Pointer Preg# 0 2 1 Pointer Preg# 0 syntax mov.w (Preg), Dreg16s opcode range 0x1800-0x1BFF example: mov.w (p0), d1 24.1.4.2 Store 32-bit data register mov.l (Preg), Dreg32 bit 15 0 14 0 13 0 12 1 11 1 10 1 9 0 syntax mov.l (Preg), Dreg32s opcode range 0x1C00-0x1DFF example: mov.l (p0+), d1.0 24.1.4.3 Store pointer register mov.w (Preg), Preg bit 15 0 14 0 13 0 12 1 11 1 10 1 9 1 6 syntax mov.w (Preg), Dreg16s opcode range 0x1E00-0x1FFF example: mov.w (p2+, m0), p0 24.1.4.4 Store accumulator register (word operand) mov.w (Preg), A, <s/u> bit 15 0 14 0 13 1 12 0 11 1 10 0 9 0 8 0 7 s/u s:0 u:1 6 5 4 3 As Addressing a0:0 Mode a1:1 syntax mov.w (Preg), As, <s/u> opcode range 0x2800-0x28FF example: mov.w (p0+), a0, s ※この命令はオプション <s/u> を持ちます。ストアするデータを符号付で扱うか、符号無しで扱う かを選択します。 229 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.4.5 Ximo16A Store accumulator register (long word operand) mov.l (Preg), A, <s/u> bit 15 0 14 0 13 1 12 0 11 1 10 0 9 0 8 1 7 s/u s:0 u:1 6 5 4 3 As Addressing a0:0 Mode a1:1 2 1 Pointer Preg# 0 syntax mov.l (Preg), As, <s/u> opcode range 0x2900-0x29FF example: mov.l (p2), a1, u ※この命令はオプション <s/u> を持ちます。ストアするデータを符号付で扱うか、符号無しで扱う かを選択します。 24.1.5 ストア命令 (fp レジスタ相対 ) 24.1.5.1 Store 16-bit data register mov.w (-IMM6, fp), Dreg16 bit 15 0 14 0 13 1 12 1 11 1 10 0 9 8 7 6 5 Dreg IMM6(-64 to -1) 16s Even /Odd 4 3 2 1 0 Dreg16s (Source Dreg16#) 4 3 2 1 0 Dreg32s (Source Dreg32#) syntax mov.w (-IMM6,fp), Dreg16s opcode range 0x3800-0x3BFF example: mov.w (-32, fp), d1 24.1.5.2 Store 32-bit data register mov.l (-IMM6, fp), Dreg32 bit 15 0 14 0 13 1 12 1 11 1 10 1 9 0 8 7 6 5 IMM6(-64 to -1) syntax mov.l (-IMM6,fp), Dreg32d opcode range 0x3C00-0x3DFF example: mov.l (-12, fp), d1.0 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 230 頁 Ximo16A Preliminary 24.1.5.3 Store pointer register mov.w (-IMM6, fp), Preg bit 15 0 14 0 13 1 12 1 11 1 10 1 9 1 8 7 6 5 IMM6(-64 to -1) 4 3 2 1 Pregs (Source Preg#) 0 2 1 Reg# 0 syntax mov.w (-IMM6,fp), Pregs opcode range 0x3E00-0x3FFF example: mov.w (-63, fp), sp 24.1.6 スタック操作命令 24.1.6.1 Pop register pop.w Reg pop.l Dreg32 bit 15 0 14 0 13 1 12 0 11 0 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# syntax pop.w Reg pop.l Dreg32 opcode range 0x2200-0x223F example: pop.w c0 example: pop.l d15.14 ※ sp を除く全てのレジスタをオペランドにとることができます。 24.1.6.2 Push register push.w Reg push.l Dreg32 bit 15 0 14 0 13 1 12 0 11 1 10 0 9 1 8 0 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 syntax push.w Reg push.l Dreg32 opcode range 0x2A00-0x2A3F example: push.w n1 example: push.l d1.0 ※ sp を除く全てのレジスタをオペランドにとることができます。 231 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.6.3 Ximo16A Pop multiple register popm.w Dreg bit 15 0 14 0 13 1 12 0 11 0 10 0 9 1 8 1 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 syntax popm.w Dreg16 popm.w Preg opcode range 0x2300-0x233F example: popm.w d5 example: popm.w p1 ※この命令で指定できる Register Group は Dreg16_Even/Dreg16_Odd/Preg の 3 つです。 ※ Preg として fp と sp を指定することは出来ません。 24.1.6.4 Push multiple register pushm.w Reg bit 15 0 14 0 13 1 12 0 11 1 10 0 9 1 8 1 7 X 6 X 5 4 3 Register Group# 2 1 Reg# 0 syntax pushm.w Dreg16 pushm.w Preg opcode range 0x2B00-0x2B3F example: pushm.w d5 example: pushm.w p1 ※この命令で指定できる Register Group は Dreg16_Even/Dreg16_Odd/Preg の 3 つです。 ※ Preg として fp と sp を指定することは出来ません。 24.1.7 ペリフェラルアクセス 24.1.7.1 Load from peripherals movp.w d0, (IMM8) bit 15 0 14 0 13 1 12 0 11 0 10 1 9 0 8 X 7 6 IMM8 5 4 3 2 1 0 syntax movp.w d0, (IMM8) opcode range 0x2400-0x24FF movp.w d0, (0x10) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 232 頁 Ximo16A Preliminary 24.1.7.2 Store to peripherals movp.w (IMM8), d0 bit 15 0 14 0 13 1 12 0 11 1 10 1 9 0 8 X 7 6 IMM8 5 4 3 2 1 0 syntax movp.w (IMM8), d0 opcode range 0x2C00-0x2CFF movp.w (0x10), d0 16 ビットデータレジスタ演算 24.1.8 d レジスタ間の演算を行う命令を以下に示します。命令の形式は 操作 . オペランドサイズ 第 1 オペランド , 第 2 オペランド 操作 : 演算の種類を表します。 オペランドサイズ : 操作するオペランドのサイズを表します。 第 1 オペランド : ディスティネーションレジスタを表します。(d15 - d0) 第 2 オペランド : ソースレジスタを表します。(d15 - d0) ソースレジスタ (Dreg16s) 及びディスティネーションレジスタ (Dreg16d) は命令フィールド中で次 のように指示されます。 bit 15 14 24.1.8.1 13 12 11 10 9 8 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) Add 16-bit data register add.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 0 9 0 8 0 syntax add.w Dreg16d, Dreg16s opcode range 0x4000-0x40FF example: add.w d1, d0 d1 と d0 を加算し、結果を d1 に代入します。 233 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.8.2 Ximo16A Subtract 16-bit data register sub.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax sub.w Dreg16d, Dreg16s opcode range 0x4100-0x41FF example: sub.w d1, d0 d1 から d0 を減算し、結果を d1 に代入します。 24.1.8.3 Add 16-bit data register with carry adc.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax adc.w Dreg16d, Dreg16s opcode range 0x4200-0x42FF example: adc.w d1, d0 24.1.8.4 Subtract 16-bit data register with carry sbc.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax sbc.w Dreg16d, Dreg16s opcode range 0x4300-0x43FF example: sbc.w d1, d0 24.1.8.5 Compare 16-bit data register cmp.w, Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 1 9 0 8 0 7 Dreg 16s Even /Odd syntax cmp.w Dreg16d, Dreg16s opcode range 0x4400-0x44FF example: cmp.w d1, d0 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 234 頁 Ximo16A Preliminary 24.1.8.6 Absolute value on 16-bit data register abs.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 0 10 1 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax abs.w Dreg16d, Dreg16s opcode range 0x4500-0x45FF example: abs.w d1, d0 24.1.8.7 Negate value on 16-bit data register neg.w Dreg16, Dreg16, <ns/sa> bit 15 0 14 1 13 0 12 0 11 0 10 1 9 1 8 7 ns:0 Dreg sa:1 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax neg.w Dreg16d, Dreg16s,<ns/sa> opcode range 0x4600-0x47FF example: neg.w d1, d0 24.1.8.8 Logical AND on 16-bit data register and.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 0 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax and.w Dreg16d, Dreg16s opcode range 0x4800-0x48FF example: and.w d1, d0 24.1.8.9 Logical OR on 16-bit data register or.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 0 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd syntax and.w Dreg16d, Dreg16s opcode range 0x4900-0x49FF example: or.w d1, d0 235 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.8.10 Ximo16A Logical excusive OR on 16-bit data register eor.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 0 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax and.w Dreg16d, Dreg16s opcode range 0x4A00-0x4AFF example: eor.w d1, d0 24.1.8.11 1 s complement value on 16-bit data register com.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 0 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax com.w Dreg16d, Dreg16s opcode range 0x4B00-0x4BFF example: com.w d1, d0 24.1.8.12 Arithmetic shift left 16-bit data register by register asl.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 1 9 0 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax asl.w Dreg16d, Dreg16s opcode range 0x4C00-0x4CFF example: asl.w d1, d0 24.1.8.13 Arithmatic shift right 16-bit data register by register asr.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 1 9 0 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax asr.w Dreg16d, Dreg16s opcode range 0x4D00-0x4DFF example: asr.w d1, d0 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 236 頁 Ximo16A Preliminary 24.1.8.14 Logical shift left 16-bit data reigster by register lsl.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 1 9 1 8 0 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax lsl.w Dreg16d, Dreg16s opcode range 0x4E00-0x4EFF example: lsl.w d1, d0 24.1.8.15 Logical shift right 16-bit data reigster by register lsr.w Dreg16, Dreg16 bit 15 0 14 1 13 0 12 0 11 1 10 1 9 1 8 1 7 Dreg 16s Even /Odd 6 Dreg 16d Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg16d (Destination Dreg16#) syntax lsr.w Dreg16d, Dreg16s opcode range 0x4F00-0x4FFF example: lsr.w d1, d0 32 ビットデータレジスタ演算 24.1.9 32 ビットロングワードの d レジスタ間で演算を行う命令を以下に示します。命令の形式は 操作 . オペランドサイズ 第 1 オペランド , 第 2 オペランド 操作 : 演算の種類をあらわします。 オペランドサイズ : 操作するオペランドのサイズを表します。 第 1 オペランド : ディスティネーションレジスタを表します。(d15.14 - d1.0) 第 2 オペランド : ソースレジスタを表します。(d15.14 - d1.0) ソースレジスタ (Dreg32s) 及びディスティネーションレジスタ (Dreg32d) は命令フィールド中で次 のように指示されます。 bit 15 237 頁 14 13 12 11 10 9 8 7 6 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.9.1 Ximo16A Add 32-bit data registr add.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax add.l Dreg32d, Dreg32s opcode range 0x5000-0x503F example: add.l d1.0, d3.2 24.1.9.2 Subtract 32-bit data register sub.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 0 syntax sub.l Dreg32d, Dreg32s opcode range 0x5040-0x507F example: sub.l d1.0, d3.2 24.1.9.3 Compare 32-bit data register cmp.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 syntax cmp.l Dreg32d, Dreg32s opcode range 0x5080-0x50BF example: cmp.l d1.0, d3.2 24.1.9.4 Absolute value on 32-bit data register abs.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax abs.l Dreg32d, Dreg32s opcode range 0x50C0-0x50FF example: abs.l d1.0, d3.2 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 238 頁 Ximo16A Preliminary 24.1.9.5 Round on 32-bit data register rnd.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 1 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) 9 0 8 1 7 0 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax rnd.l Dreg32d, Dreg32s opcode range 0x5100-0x513F example: rnd.l d1.0, d3.2 24.1.9.6 Step of divide div Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 syntax div Dreg32d, Dreg32s opcode range 0x5140-0x517F example: div d1.0, d3.2 24.1.9.7 Nagate value on 32-bit data register neg.l Dreg32, Dreg32, <ns/sa> bit 15 0 14 1 13 0 12 1 11 0 10 0 9 0 8 1 7 1 6 5 4 3 ns:0 Dreg32s sa:1 (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax neg.l Dreg32d, Dreg32s opcode range 0x5180-0x51FF example: neg.l d1.0, d3.2 24.1.9.8 Arithmetic shift left 32-bit data register by register asl.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 0 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax asl.l Dreg32d, Dreg32s opcode range 0x5200-0x523F example: asl.l d1.0, d3.2 239 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.9.9 Ximo16A Arithmetic shift right 32-bit data register by register asr.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 0 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax asr.l Dreg32d, Dreg32s opcode range 0x5240-0x527F example: asr.l d1.0, d3.2 24.1.9.10 Logical shift left 32-bit data register by register lsl.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) syntax lsl.l Dreg32d, Dreg32s opcode range 0x5280-0x52BF example: lsl.l d1.0, d3.2 24.1.9.11 Logical shift right 32-bit data register by register lsr.l Dreg32, Dreg32 bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 0 7 1 6 1 5 4 3 Dreg32s (Source Dreg32#) 2 1 0 Dreg32d (Destination Dreg32#) 7 0 6 0 5 4 Pregs (Source Preg#) 2 1 0 Pregd (Destination Pregd#) syntax lsr.l Dreg32d, Dreg32s opcode range 0x52C0-0x52FF example: lsr.l d1.0, d3.2 24.1.10 ポインタレジスタ演算 24.1.10.1 Add pointer register add.w Preg, Preg bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 3 syntax add.w Pregd, Pregs opcode range 0x5300-0x533F example: add.w p0, p1 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 240 頁 Ximo16A Preliminary 24.1.10.2 Subtract pointer register sub.w Preg, Preg bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 7 0 6 1 5 4 Pregs (Source Preg#) 3 2 1 0 Pregd (Destination Pregd#) syntax sub.w Pregd, Pregs opcode range 0x5340-0x537F example: sub.w p0, p1 24.1.10.3 Load effective address (modify pointer register) lea (Preg) bit 15 0 14 1 13 0 12 1 11 0 10 0 9 1 8 1 7 1 6 X 5 1 4 3 m0/ +/m1 Addressing Mode 2 1 0 Preg (Pointer Preg#) syntax lea (Preg+,Mreg) lea (Preg-,Mreg) opcode range 0x5380-0x53BF example: lea (p0+, m0) ※ Addressing Mode フィールドは「4.2.1 ポインタレジスタ間接アドレッシング」のアドレッシン グモードを参照して下さい。 24.1.11 型変換付きデータ転送 24.1.11.1 Move register with sign extend movs Dreg32, Dreg16 bit 15 0 14 1 13 0 12 1 11 0 10 1 9 0 8 0 7 6 Dreg X 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg32d (Destination Dreg32#) syntax movs Dreg32d, Dreg16s opcode range 0x5400-0x54BF example: movs d1.0, d3 ※ 16 ビットデータレジスタを符号拡張して 32 ビットデータレジスタへ転送します。 241 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.1.11.2 Ximo16A Move register with zero extend movz Dreg32, Dreg16 bit 15 0 14 1 13 0 12 1 11 0 10 1 9 0 8 1 7 6 Dreg X 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 0 Dreg32d (Destination Dreg32#) syntax movz Dreg32d, Dreg16s opcode range 0x5500-0x55BF example: movz d1.0, d3 ※ 16 ビットデータレジスタをゼロ拡張して 32 ビットデータレジスタへ転送します。 24.1.12 回転操作命令 24.1.12.1 Rotate left through carry rol.w Dreg16 bit 15 0 14 1 13 0 12 1 11 0 10 1 9 1 8 0 7 X 6 X 5 X 4 X 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) 6 X 5 X 4 X 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax rol.w Dreg16d opcode range 0x5600-0x560F example: rol.w d0 24.1.12.2 Rotate right through carry ror.w Dreg16 bit 15 0 14 1 13 0 12 1 11 0 10 1 9 1 8 1 7 X syntax ror.w Dreg16d opcode range 0x5700-0x570F example: ror.w d0 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 242 頁 Ximo16A Preliminary 24.1.13 即値シフト命令 (16 ビットワード ) 24.1.13.1 Arithmetic shift left 16-bit data register by immediate asli.w Dreg16, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 0 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax asli.w Dreg16d, IMM4 opcode range 0x5800-0x58FF example: asli.w d2, 5 24.1.13.2 Arithmetic shift right 16-bit data register by immediate asri.w Dreg16, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 0 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax asri.w Dreg19d, IMM4 opcode range 0x5900-0x59FF example: asri.w d2, 5 24.1.13.3 Logical shift left 16-bit data register by immediate lsli.w Dreg16, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 0 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax lsli.w Dreg16d, IMM4 opcode range 0x5A00-0x5AFF example: lsli.w d2, 5 24.1.13.4 Logical shift right 16-bit data register by immediate lsri.w Dreg16, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 0 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16s Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax lsri.w Dreg16d, IMM4 opcode range 0x5B00-0x5BFF example: lsri.w d2, 5 243 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 24.1.14 即値シフト命令 (32 ビットロングワード ) 24.1.14.1 Arithmetic shift left 32-bit data register by immediate asli.l Dreg32, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 1 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) syntax asli.l Dreg32d, IMM4 opcode range 0x5C00-0x5CF7 example: asli.l d3.2, 5 24.1.14.2 Arithmetic shift right 32-bit data register by immediate asri.l Dreg32, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 1 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) syntax asri.l Dreg32d, IMM4 opcode range 0x5D00-5DF7 example: asri.l d3.2, 5 24.1.14.3 Logical shift left 32-bit data register by immediate lsli.l Dreg32, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) syntax lsli.l Dreg32d, IMM4 opcode range 0x5E00-0x5EF7 example: lsli.l d3.2, 5 24.1.14.4 Logical shift right 32-bit data register by immediate lsri.l Dreg32, IMM4 bit 15 0 14 1 13 0 12 1 11 1 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 X 2 1 0 Dreg32d (Destination Dreg32#) syntax lsri.l Dreg32d, IMM4 opcode range 0x5F00-5FF7 example: lsri.l d3.2, 5 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 244 頁 Ximo16A Preliminary 24.1.15 ビット操作命令 24.1.15.1 Bit set on 16-bit data register bset Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 0 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax bset Dreg16d, IMM4 opcode range 0x6000-0x60FF example: bset d7, 8 24.1.15.2 Bit clear on 16-bit data register bclr Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 0 9 0 8 1 7 6 5 4 IMM4(0 to 15) syntax bclr Dreg16d, IMM4 opcode range 0x6100-0x61FF example: bclr d7, 8 24.1.15.3 Bit toggle on 16-bit data register btgl Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 0 9 1 8 0 7 6 5 4 IMM4(0 to 15) syntax btgl Dreg16d, IMM4 opcode range 0x6200-0x62FF example: btgl d7, 8 24.1.15.4 Bit test on 16-bit data register btst Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 0 9 1 8 1 7 6 5 4 IMM4(0 to 15) syntax btst Dreg16d, IMM4 opcode range 0x6300-0x63FF example: btst d7, 8 245 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 24.1.16 16 ビットデータレジスタ短即値演算 24.1.16.1 Add short immediate to 16-bit data register adsi.w Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 0 8 0 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax adsi.w Dreg16d, IMM4 opcode range 0x6400-0x64FF example: adsi.w d7, 8 24.1.16.2 Subtract short immediate from 16-bit data register sbsi.w Dreg16, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 0 8 1 7 6 5 4 IMM4(0 to 15) 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax sbsi.w Dreg16d, IMM4 opcode range 0x6500-0x65FF example: sbsi.w d7, 8 24.1.17 32 ビットデータレジスタ短即値演算 24.1.17.1 Add short immediate to 32-bit data register adsi.l Dreg32, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) 3 0 2 1 0 Dreg32d (Destination Dreg32#) syntax adsi.l Dreg32d, IMM4 opcode range 0x6600-0x66F7 example: adsi.l d7.6, 8 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 246 頁 Ximo16A Preliminary 24.1.17.2 Subtract short immediate from 32-bit data register sbsi.l Dreg32, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 0 2 1 0 Dreg32d (Destination Dreg32#) 3 1 2 1 0 Pregd (Destination Preg#) syntax sbsi.l Dreg32d, IMM4 opcode range 0x6700-0x67F7 example: sbsi.l d7.6, 8 24.1.18 ポインタレジスタ短即値演算 24.1.18.1 Add short immediate to pointer register adsi.w Preg, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 0 7 6 5 4 IMM4(0 to 15) syntax adsi.w Pregd, IMM4 opcode range 0x6608-0x66FF example: adsi.w p5, 8 24.1.18.2 Subtract short immediate from pointer register sbsi.w Preg, IMM4 bit 15 0 14 1 13 1 12 0 11 0 10 1 9 1 8 1 7 6 5 4 IMM4(0 to 15) 3 1 2 1 0 Pregd (Destination Preg#) syntax sbsi.w Pregd, IMM4 opcode range 0x6708-0x67FF example: sbsi.w p5, 8 247 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 24.1.19 短即値ロード 24.1.19.1 Load short immediate to 16-bit data register movsi.w Dreg16, IMM5 bit 15 0 14 1 13 1 12 0 11 1 10 0 9 0 8 7 6 5 IMM5(-16 to 15) 4 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) syntax movsi.w Dreg16d, IMM5 opcode range 0x6800-0x69FF example: movsi.w d4, 8 24.1.19.2 Load short immediate to 32-bit data register movsi.l Dreg32, IMM5 bit 15 0 14 1 13 1 12 0 11 1 10 0 9 1 8 7 6 5 IMM5(-16 to 15) 4 3 0 2 1 0 Dreg32d (Destination Dreg32#) 3 1 2 1 0 Pregd (Destination Preg#) syntax movsi.l Dreg32d, IMM5 opcode range 0x6A00-0x6BF7 example: movsi.l d5.4, 8 24.1.19.3 Load short immediate to pointer register movsi.w Preg, IMM5 bit 15 0 14 1 13 1 12 0 11 1 10 0 9 1 8 7 6 5 IMM5(-16 to 15) 4 syntax movsi.w Pregd, IMM5 opcode range 0x6A08-0BFF example: movsi.l p4, 8 24.1.20 レジスタ間データ転送 コアレジスタ間のデータ転送を行います。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 248 頁 Ximo16A Preliminary 24.1.20.1 Move register mov.w Reg, Reg mov.l Dreg32, Dreg32 bit 15 0 14 1 13 1 12 1 11 10 9 Source Register Group# 8 7 6 Destination Register Group# 5 4 3 Regs (Source Register#) 2 1 0 Regd (Destination Register#) syntax mov.w Regd, Regs mov.l Dreg32d, Dreg32s opcode range 0x7000-0x7FFF example: mov.w d1, d0 example: mov.w a1h, d15 example: mov.l d1.0, d7.6 24.1.21 プログラムフロー制御命令 ( ショートオフセットによる条件付分岐 ) 24.1.21.1 Conditional branch bra IMM7, <condition> bit 15 1 14 0 13 0 12 0 11 10 9 8 IMM7(-64 to 63) 7 6 5 4 3 2 condition 1 0 syntax bra IMM7, <condition> opcode range 0x8000-0x8FFF bra 5, nc ※ IMM7 は PC からのオフセット値です。 ※分岐予測の状態及びコンディションコードのパイプライン依存関係によって所要サイクル数が変 化します。 249 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 32 ビット長命令 1 24.2 32-bit 長の命令は第 1 ワード w1 と第 2 ワード w2 から成り、以下のように表します。 bit 15 w1 w2 14 13 12 11 10 9 8 7 6 24.2.1 ロード命令 ( 相対アドレス ) 24.2.1.1 Load 16-bit data register 5 4 3 2 1 0 mov.w Dreg16, (IMM16, Preg) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 7 0 6 Dreg 16d Even /Odd 5 4 3 Dreg16d (Destination Dreg16#) 2 1 Pointer Preg# 0 7 1 6 0 5 4 3 Dreg32d (Destination Dreg32#) 2 1 Pointer Preg# 0 7 1 6 1 5 4 3 Pregd (Destination Preg#) 2 1 Pointer Preg# 0 IMM16 syntax mov.w Dreg16d, (IMM16, Preg) opcode range 0xC000_0000-0xC07F_FFFF example: mov.w d10, (0x0100, p3) 24.2.1.2 Load 32-bit data register mov.l Dreg32, (IMM16, Preg) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 IMM16 syntax mov.l Dreg32d, (IMM16, Preg) opcode range 0xC080_0000-0xC0BF_FFFF example: mov.l d9.8, (12, p0) 24.2.1.3 Load pointer register mov.w Preg, (IMM16, Preg) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 0 IMM16 syntax mov.w Pregd, (IMM16, Preg) opcode range 0xC0C0_0000-0xC0FF_FFFF example: mov.w p0, (12, p3) 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 250 頁 Ximo16A Preliminary 24.2.2 ロード命令 ( 絶対アドレス ) 24.2.2.1 Load 16-bit data register mov.w Dreg16, (IMM16) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 8 1 7 0 6 Dreg 16d Even /Odd 5 4 3 Dreg16d (Destination Dreg16#) 2 X 1 X 0 X 8 1 7 1 6 0 5 4 3 Dreg32d (Destination Dreg32#) 2 X 1 X 0 X 8 1 7 1 6 1 5 4 3 Pregd (Destination Preg#) 2 X 1 X 0 X IMM16 syntax mov.w Dreg16d, (IMM16) opcode range 0xC100_0000-0xC178_FFFF example: mov.w d10, (0x0100) 24.2.2.2 Load 32-bit data register mov.l Dreg32, (IMM16) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 IMM16 syntax mov.l Dreg32d, (IMM16) opcode range 0xC180_0000-0xC1B8_FFFF example: mov.l d9.8, (12) 24.2.2.3 Load pointer register mov.w Preg, (IMM16) bit 15 1 14 1 13 0 12 0 11 0 10 0 9 0 IMM16 syntax mov.w Pregd, (IMM16, Preg) opcode range 0xC1C0_0000-0xC1F8_FFFF example: mov.w p0, (12) 251 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.2.3 ストア命令 ( 相対アドレス ) 24.2.3.1 Store 16-bit data register Ximo16A mov.w (IMM16, Preg), Dreg16 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 7 0 6 Dreg 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 1 Pointer Preg# 0 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 1 Pointer Preg# 0 7 1 6 1 5 4 3 Pregs (Source Dreg32#) 2 1 Pointer Preg# 0 IMM16 syntax mov.w (IMM16, Preg), Dreg16s opcode range 0xC200_0000-0xC27F_FFFF example: mov.w (0x0100, p0-), d2 24.2.3.2 Store 32-bit data register mov.l (IMM16, Preg), Dreg32 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 IMM16 syntax mov.l (IMM16, Preg), Dreg32s opcode range 0xC280_0000-0xC2BF_FFFF example: mov.l (12, p1), d11.10 24.2.3.3 Store pointer register mov.w (IMM16, Preg), Preg bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 0 IMM16 syntax mov.w (IMM16, Preg), Preg opcode range 0xC2C0_0000-0xC2FF_FFFF example: mov.w (0x0100, p4), p5 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 252 頁 Ximo16A Preliminary 24.2.4 ストア命令 ( 絶対アドレス ) 24.2.4.1 Store 16-bit data register mov.w (IMM16), Dreg16 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 8 1 7 0 6 Dreg 16s Even /Odd 5 4 3 Dreg16s (Source Dreg16#) 2 X 1 X 0 X 8 1 7 1 6 0 5 4 3 Dreg32s (Source Dreg32#) 2 X 1 X 0 X 8 1 7 1 6 1 5 4 Pregs (Source Preg#) 2 X 1 X 0 X IMM16 syntax mov.w (IMM16), Dreg16s opcode range 0xC300_0000-0xC378_FFFF example: mov.w (0x0100), d10 24.2.4.2 Store 32-bit data register mov.l (IMM16), Dreg32 bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 IMM16 syntax mov.l (IMM16), Dreg32s opcode range 0xC380_0000-0xC3B8_FFFF example: mov.l (0x0102), d7.6 24.2.4.3 Store pointer register mov.w (IMM16), Preg bit 15 1 14 1 13 0 12 0 11 0 10 0 9 1 3 IMM16 syntax mov.w (IMM16), Pregs opcode range 0xC3C0_0000-0xC3F8_FFFF example: mov.w (0x0100), p5 253 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.2.5 即値ロード 24.2.5.1 Load immediate to register Ximo16A movi.w Reg, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 0 8 X 7 X 6 X 5 4 3 Destination Register Group# 2 1 0 Regd (Destination Register#) IMM16 syntax movi.w Regd, IMM16 opcode range 0xC400_0000-0xC43F_FFFF example: movi.w d0, 0x0011 example: movi.w p5, 0xFE00 example: movi.w a0h, 0x75C0 ※レジスタグループには Dreg32 を取ることはできません。 24.2.6 即値演算 24.2.6.1 Add immediate to 16-bit data register addi.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 0 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax addi.w Dreg16d, IMM16 opcode range 0xC600_0000-0xC60F_FFFF example: addi.w d0, 0x5200 24.2.6.2 Subtract immediate from 16-bit data register subi.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 0 4 1 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax subi.w Dreg16d, IMM16 opcode range 0xC610_0000-0xC61F_FFFF example: subi.w d0, 0x5200 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 254 頁 Ximo16A Preliminary 24.2.6.3 Compare 16-bit data register with immediate cmpi.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 0 5 1 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax cmpi.w Dreg16d, IMM16 opcode range 0xC620_0000-0xC62F_FFFF example: cmpi.w d0, 0x5200 24.2.6.4 Logical AND immediate on 16-bit data register andi.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 0 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax andi.w Dreg16d, IMM16 opcode range 0xC640_0000-0xC64F_FFFF example: andi.w d0, 0x5200 24.2.6.5 Logical OR immediate on 16-bit data register ori.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 0 4 1 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax ori.w Dreg16d, IMM16 opcode range 0xC650_0000-0xC65F_FFFF example: ori.w d0, 0x5200 24.2.6.6 Logical excusive OR immediate on 16-bit data register eori.w Dreg16, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 0 6 1 5 1 4 0 3 Dreg 16d Even /Odd 2 1 0 Dreg16d (Destination Dreg16#) IMM16 syntax eori.w Dreg16d, IMM16 opcode range 0xC660_0000-0xC66F_FFFF example: eori.w d0, 0x5200 255 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.2.6.7 Ximo16A Add immediate to pointer register addi.w Preg, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 1 6 0 5 0 4 0 3 X 2 1 0 Pregd (Destination Preg#) 3 X 2 1 0 Pregd (Destination Preg#) IMM16 syntax addi.w Pregd, IMM16 opcode range 0xC680_0000-0xC687_FFFF example: addi.w p5, 0x5200 24.2.6.8 Subtract immediate from pointer register subi.w Preg, IMM16 bit 15 1 14 1 13 0 12 0 11 0 10 1 9 1 8 0 7 1 6 0 5 0 4 1 7 0 6 0 5 0 4 3 2 conditon IMM16 syntax subi.w Pregd, IMM16 opcode range 0xC690_0000-0xC697_FFFF example: subi.w fp, 0x5200 24.2.7 プログラムフロー制御 24.2.7.1 Conditional jump jmp IMM16, <condition> bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 1 0 syntax jmp IMM16, <conditon> opcode range 0xD000_0000-0xD01F_FFFF example: jmp 0x1000, ge ※ condition フィールドは表 4「コンディションコード一覧」を参照して下さい。 24.2.7.2 Call subroutine call IMM16 bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 0 5 1 4 X 3 X 2 X 1 X 0 X syntax call IMM16, <conditon> opcode range 0xD020_0000-0xD020_FFFF example: call 0x1000 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 256 頁 Ximo16A Preliminary 24.2.7.3 Loop setup loop Creg, IMM16 bit 15 1 14 1 13 0 12 1 11 0 10 0 9 1 8 7 Creg X c0:0 c1:1 6 X 5 X 4 X 3 X 2 X 1 X 0 X 8 7 6 5 4 Creg IMM8(0 to 255) c0:0 c1:1 3 2 1 0 2 1 0 IMM16 syntax loop Creg, IMM16 opcode range 0xD200_0000-0xD300_FFFF example: loop c1, 0x3000 24.2.7.4 Loop setup by immediate loopi Creg, IMM16, IMM8 bit 15 1 14 1 13 0 12 1 11 0 10 1 9 0 IMM16 syntax loopi Creg, IMM16, IMM8 opcode range 0xD400_0000-0xD5FF_FFFF example: loopi c0, 0x3000, 32 24.2.8 条件付データ転送 24.2.8.1 Conditional move 16-bit data register cmov.w Dreg16, Dreg16, <condition> bit 15 1 X 14 1 X 13 0 X 12 1 X 11 10 0 0 Dreg X 16s Even /Odd 9 8 7 0 0 0 Dreg16s (Source Dreg16#) 6 1 X 5 0 X 4 3 conditon X Dreg 16d Even /Odd Dreg16d (Destintaion Dreg16#) syntax cmov.w Dreg16d, Dreg16s, <conditon> opcode range 0xD040_0000-0xD05F_0B8F example: cmov.w d5, d3, le ※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。 257 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.2.8.2 Ximo16A Conditional move 32-bit data register cmov.l Dreg32, Dreg32, <condition> bit 15 1 X 14 1 X 13 0 X 12 1 X 11 0 X 10 0 X 9 8 7 0 0 0 Dreg32s (Source Dreg32#) 6 1 X 5 1 X 4 3 2 1 0 conditon X X Dreg32d (Destintaion Dreg32#) syntax cmov.l Dreg32d, Dreg32s, <conditon> opcode range 0xD060_0000-0xD07F_0387 example: cmov.l d5.4, d3.2, le ※ condition フィールドは「2.2.1.2 コンディションコード」を参照して下さい。 24.2.9 I/O 操作命令 24.2.9.1 Bit set on memory bset (IMM16), IMM4 bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 0 5 0 4 0 3 2 IMM4 1 0 8 0 7 1 6 0 5 0 4 1 3 2 IMM4 1 0 8 0 7 1 6 0 5 1 4 1 3 2 IMM4 1 0 syntax bset (IMM16), IMM4 opcode range 0xD080_0000-0xD08F_FFFF example: bset (0x0100), 8 24.2.9.2 Bit clear on memory bclr (IMM16), IMM4 bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 syntax bclr (IMM16), IMM4 opcode range 0xD090_0000-0xD09F_FFFF example: bclr (0x0100), 8 24.2.9.3 Bit test on memory btst (IMM16), IMM4 bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 syntax btst (IMM16), IMM4 opcode range 0xD0B0_0000-0xD0BF_FFFF example: btst (0x0100), 8 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 258 頁 Ximo16A Preliminary 24.2.10 スタックフレーム構築 24.2.10.1 Link lnk IMM16 bit 15 14 1 1 IMM16 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 0 4 X 3 X 2 X 1 X 0 X 2 1 0 Stack_Reg (Source Stack_Reg#) X X X syntax lnk IMM16 opcode range 0xD0C0_0000-0xD0C0_FFFF example: lnk 0x50 24.2.11 内部スタックレジスタアクセス 24.2.11.1 Move stack register to d0 register movst.w d0, Stack_Reg bit 15 1 X 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 1 4 0 3 X X X X X X X X X X X X X syntax movst.w d0, Stack_Reg opcode range 0xD0E0_0000-0xD0E7_0000 example: movst.w d0, sst 24.2.11.2 Move d0 register to stack register movst.w Stack_Reg, d0 bit 15 1 X 14 1 13 0 12 1 11 0 10 0 9 0 8 0 7 1 6 1 5 1 4 1 3 X X X X X X X X X X X X X 2 1 0 Stack_Reg (Destintaion Stack_Reg#) X X X syntax movst.w Stack_Reg, d0 opcode range 0xD0F0_0000-0xD0F7_0000 example: movst.w sc0, d0 259 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary Ximo16A 32 ビット長命令 2( 並列転送可能 DSP 演算命令 ) 24.3 この命令は DSP 用の算術演算命令を中心に構成されます。ここにある命令は、並列にロード命令、 ストア命令を発行することができ、64 ビット長の複合命令として処理することが可能です。 並列転送の有無は、下表のように命令 1 ワード目の bit11 によって示され、並列転送が有る場合 P=1、 並列転送が無い場合 P=0 となります。 bit 15 1 14 1 13 1 12 0 11 10 P: Paralle l Move 9 8 7 6 5 4 24.3.1 16 ビットデータレジスタ演算命令 24.3.1.1 Add 16-bit data register (with saturate) 3 2 1 0 3 ns:0 sa:1 Dreg 16d Even /Odd 2 X 1 X 0 X add.w Dreg16, Dreg16, Dreg16, <ns/sa> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 0 6 0 5 0 4 0 Dreg16s1 (Source1 Dreg16#) Dreg16d (Destination Dreg16#) syntax add.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa> opcode range 0xE000_0000-0xE008_0FFF example: add.w d1, d0, d2, sa ※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。 24.3.1.2 Subtract 16-bit data register (with saturate) sub.w Dreg16, Dreg16, Dreg16, <ns/sa> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 0 6 0 5 0 Dreg16s1 (Source1 Dreg16#) 4 1 3 ns:0 sa:1 Dreg 16d Even /Odd 2 X 1 X 0 X Dreg16d (Destination Dreg16#) syntax sub.w Dreg16d, Dreg16s0, Dreg16s1, <ns/sa> opcode range 0xE010_0000-0xE018_0FFF example: sub.w d8, d2, d6, ns ※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 260 頁 Ximo16A Preliminary 24.3.2 32 ビットデータレジスタ演算命令 24.3.2.1 Add 32-bit data register (with saturate) add.l Dreg32, Dreg32, Dreg32, <ns/sa> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X X X Dreg32s0 (Source0 Dreg32#) 7 0 6 0 5 1 4 0 Dreg32s1 (Source1 Dreg32#) 3 2 1 0 ns:0 X X X sa:1 X Dreg32d (Destination Dreg32#) syntax add.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa> opcode range 0xE020_0000-0xE028_03F7 example: add.l d1.0, d7.6, d5.4, sa ※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。 24.3.2.2 Subtract 32-bit data register (with saturate) sub.l Dreg32, Dreg32, Dreg32, <ns/sa> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X X X Dreg32s0 (Source0 Dreg32#) 7 0 6 0 5 1 Dreg32s1 (Source1 Dreg32#) 4 1 3 2 1 0 ns:0 X X X sa:1 X Dreg32d (Destination Dreg32#) syntax sub.l Dreg32d, Dreg32s0, Dreg32s1, <ns/sa> opcode range 0xE030_0000-0xE038_03F7 example: sub.l d1.0, d7.6, d5.4, sa ※この命令では <ns/sa> オプションを使用して飽和処理の有無を選択します。 24.3.3 乗算命令 24.3.3.1 Multiply data register mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X X Dreg 16s0 Even /Odd Dreg Dreg16s0 16s1 (Source0 Even Dreg16#) /Odd 7 1 6 0 5 0 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 X 1 X 0 X Dreg32d (Destination Dreg32#) syntax mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> opcode range 0xE080_0000-0xE098_0FF7 example: mul d1.0, d5, d4, fr ※この命令では <fr/ss/su/uu> オプションを使用して乗算モードを選択します。 261 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.3.3.2 Ximo16A Clear and multiply data register clr A, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> bit 15 1 X 14 1 13 1 12 0 11 P 10 0 9 0 8 0 X X Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd 7 1 6 0 5 1 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 X 1 X 0 X Dreg32d (Destination Dreg32#) syntax clr Ad, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> opcode range 0xE0A0_0000-0xE0B8_1FF7 example: clr a0, mul d1.0, d2, d3, ss 24.3.3.3 Add and multiply data register add A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> bit 15 1 X 14 1 13 1 s/u X s:0 u:1 12 0 11 P 10 0 9 0 8 0 7 1 Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd 6 1 5 0 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 1 0 Dreg32s (Source Dreg32#) Dreg32d (Destination Dreg32#) syntax add Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> opcode range 0xE0C0_0000-0xE0DF_5FF7 example: add a0, d1.0, s, mul d1.0, d2, d3, fr 24.3.3.4 Subtract and multiply data register sub A, Dreg32, <s/u>, mul Dreg32, Dreg16, Dreg16, <fr/ss/su/uu> bit 15 1 X 14 1 13 1 s/u X s:0 u:1 12 0 11 P 10 0 9 0 8 0 Ad Dreg Dreg Dreg16s0 a0:0 16s0 16s1 (Source0 a1:1 Even Even Dreg16#) /Odd /Odd 7 1 6 1 5 1 4 3 fr:00 ss:01 su:10 uu:11 X Dreg16s1 (Source1 Dreg16#) 2 1 0 Dreg32s (Source Dreg32#) Dreg32d (Destination Dreg32#) syntax sub Ad, Dreg32s, <s/u>, mul Dreg32d, Dreg16s0, Dreg16s1, <fr/ss/su/uu> opcode range 0xE0E0_0000-0xE0FF_5FF7 example: sub a0, d1.0, s, mul d1.0, d2, d3, fr 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 262 頁 Ximo16A Preliminary 24.3.4 アキュームレータ - データレジスタ算術演算命令 24.3.4.1 Add 16-bit data register to accumulator add A, Dreg16, <s/u> bit 15 1 14 1 13 1 Dreg s/u X 16s s:0 Even u:1 /Odd 12 0 11 P Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 0 4 0 3 0 X X X X X X X X 2 1 0 Dreg16s (Source Dreg16#) X X X syntax add Ad, Dreg16s, <s/u> opcode range 0xE100_0000-0xE107_D000 example: add a1, d11, s 24.3.4.2 Subtract 16-bit data register from accumulator sub A, Dreg16, <s/u> bit 15 1 14 1 13 1 Dreg s/u X 16s s:0 Even u:1 /Odd 12 0 11 P Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 0 4 0 3 1 X X X X X X X X 2 1 0 Dreg16s (Source Dreg16#) X X X syntax sub Ad, Dreg16s, <s/u> opcode range 0xE108_0000-0xE10F_D000 example: sub a1, d11, s 24.3.4.3 Add 32-bit data register to accumulator add A, Dreg32, <s/u> bit 15 1 X 14 1 13 1 s/u X s:0 u:1 12 0 11 P Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 0 4 1 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax add Ad, Dreg32s, <s/u> opcode range 0xE110_0000-0xE117_5000 example: add a1, d7.6, u 263 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.3.4.4 Ximo16A Subtract 32-bit data register from accumulator sub A, Dreg32, <s/u> bit 15 1 X 14 1 13 1 s/u X s:0 u:1 12 0 11 P Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 0 4 1 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax sub Ad, Dreg32s, <s/u> opcode range 0xE118_0000-0xE11F_5000 example: sub a0, d7.6, u 24.3.5 シフト命令 24.3.5.1 Arithmetic shift left accumulator by register asl A, Dreg32 bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 0 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax asl Ad, Dreg32s opcode range 0xE120_0000-0xE127_1000 example: asl a0, d5.4 24.3.5.2 Arithmetic shift right accumulator by register asr A, Dreg32 bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 0 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax asr Ad, Dreg32s opcode range 0xE128_0000-0xE12F_1000 example: asr a0, d5.4 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 264 頁 Ximo16A Preliminary 24.3.5.3 Logical shift left accumulator by register lsl A, Dreg32 bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 1 3 0 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax lsl Ad, Dreg32s opcode range 0xE130_0000-0xE137_1000 example: lsl a0, d5.4 24.3.5.4 Logical shift right accumulator by register lsr A, Dreg32 bit 15 1 X 14 1 13 1 12 0 11 P X X Ad X a0:0 a1:1 10 0 9 0 8 1 7 0 6 0 5 1 4 1 3 1 X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax lsr Ad, Dreg32s opcode range 0xE138_0000-0xE13F_1000 example: lsr a0, d5.4 24.3.6 即値シフト命令 24.3.6.1 Arithmetic shift left accumulator by immediate asli A, IMM4 bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 0 X 3 2 1 0 0 X X X IMM4(0 to 15) syntax asli Ad, IMM4 opcode range 0xE140_0000-0xE140_100F example: asli a0, 4 265 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.3.6.2 Ximo16A Arithmetic shift right accumulator by immediate asri A, IMM4 bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 0 X 3 2 1 0 1 X X X IMM4(0 to 15) syntax asri Ad, IMM4 opcode range 0xE148_0000-0xE148_100F example: asri a0, 4 24.3.6.3 Logical shift left accumulator by immediate lsli A, IMM4 bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 1 X 3 2 1 0 0 X X X IMM4(0 to 15) syntax lsli Ad, IMM4 opcode range 0xE150_0000-0xE150_100F example: lsli a0, 4 24.3.6.4 Logical shift right accumulator by immediate lsri A, IMM4 bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 0 X 6 1 X 5 0 X 4 1 X 3 2 1 0 1 X X X IMM4(0 to 15) 5 0 X 4 0 X 3 0 X syntax lsri Ad, IMM4 opcode range 0xE158_0000-0xE158_100F example: lsri a0, 4 24.3.7 アキュームレータ間演算命令 24.3.7.1 Add accumulator add A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 2 X X 1 X X 0 X X syntax add Ad, As opcode range 0xE180_0000-0xE180_3000 example: add a0, a1 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 266 頁 Ximo16A Preliminary 24.3.7.2 Subtract accumulator sub A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 0 X 3 1 X 2 X X 1 X X 0 X X 5 0 X 4 1 X 3 0 X 2 X X 1 X X 0 X X syntax sub Ad, As opcode range 0xE188_0000-0xE188_3000 example: sub a0, a1 24.3.7.3 Add accumulator with left shift adl A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X syntax adl Ad, As opcode range 0xE190_0000-0xE190_3000 example: adl a0, a1 24.3.7.4 Subtract accumulator with left shift sbl A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 0 X 5 0 X 4 1 X 3 1 X 2 X X 1 X X 0 X X 7 1 X 6 0 X 5 1 X 4 0 X 3 0 X 2 X X 1 X X 0 X X syntax sbl Ad, As opcode range 0xE198_0000-0xE198_3000 example: sbl a0, a1 24.3.7.5 Compare accumulator cmp A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X syntax cmp Ad, As opcode range 0xE1A0_0000-0xE1A0_3000 example: cmp a0, a1 267 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.3.7.6 Ximo16A Negate value on accumulator neg A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 0 X 3 0 X 2 X X 1 X X 0 X X syntax neg Ad, As opcode range 0xE1C0_0000-0xE1C0_3000 example: neg a0, a1 24.3.7.7 Absolute value on accumulator abs A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 0 X 4 0 X 3 1 X 2 X X 1 X X 0 X X 8 1 X 7 1 X 6 1 X 5 0 X 4 1 X 3 0 X 2 X X 1 X X 0 X X 7 1 X 6 1 X 5 0 X 4 1 X 3 1 X 2 X X 1 X X 0 X X syntax abs Ad, As opcode range 0xE1C8_0000-0xE1C8_3000 example: abs a0, a1 24.3.7.8 Saturate accumulator sat A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X syntax sat Ad, As opcode range 0xE1D0_0000-0xE1D0_3000 example: sat a0, a1 24.3.7.9 Round on accumulator rnd A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X syntax rnd Ad, As opcode range 0xE1D8_0000-0xE1D8_3000 example: rnd a0, a1 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 268 頁 Ximo16A Preliminary 24.3.7.10 Move accumulator to accumulator mov A, A bit 15 1 X 14 1 X 13 1 As a0:0 a1:1 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X 8 1 X 7 1 X 6 1 X 5 1 X 4 0 X 3 0 X 2 X X 1 X X 0 X X 8 1 X 7 1 X 6 1 X 5 1 X 4 0 X 3 1 X 2 X X 1 X X 0 X X syntax mov Ad, As opcode range 0xE1E0_0000-0xE1E0_3000 example: mov a0, a1 24.3.7.11 Clear accumulator clr A bit 15 1 X 14 1 X 13 1 X 12 11 0 P Ad X a0:0 a1:1 10 0 X 9 0 X syntax clr Ad opcode range 0xE1E8_0000-0xE1E8_1000 example: clr a0 24.3.8 アキュームレータレジスタ - データレジスタ間転送命令 24.3.8.1 Move accumulator to 16-bit data register mov.w Dreg16, A, <s/u> bit 15 1 X 14 1 s/u s:0 u:1 13 12 1 0 As X a0:0 a1:1 11 P X 10 0 X 9 1 X 8 0 X 7 0 X 6 0 X 5 0 X 4 0 X 3 X Dreg 16d Even /Odd 2 1 0 X X X Dreg16d (Destination Dreg16#) syntax mov.w Dreg16d, As, <s/u> opcode range 0xE200_0000-0xE200_600F example: mov.w d0, a0, s 269 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版 Preliminary 24.3.8.2 Ximo16A Move accumulator to 32-bit data register mov.l Dreg32, A, <s/u> bit 15 1 X 14 1 s/u s:0 u:1 13 12 1 0 As X a0:0 a1:1 11 P X 10 0 X 9 1 X 8 0 X 7 0 X 6 0 X 5 0 X 4 1 X 3 X X 2 1 0 X X X Dreg32d (Destination Dreg32#) 2 1 0 Dreg16s (Source Dreg16#) X X X syntax mov.l Dreg32d, As, <s/u> opcode range 0xE210_0000-0xE210_6007 example: mov.w d0, a0, u 24.3.8.3 Move 16-bit data register to accumulator mov.w A, Dreg16, <s/u> bit 15 1 14 1 13 1 Dreg s/u X 16s s:0 Even u:1 /Odd 12 0 11 P Ad X a0:0 a1:1 10 0 9 1 8 0 7 0 6 0 5 1 4 0 3 X X X X X X X X X syntax mov.w Ad, Dreg16s, <s/u> opcode range 0xE220_0000-0xE227_D000 example: mov.w a0, d5, s 24.3.8.4 Move 32-bit data register to accumulator mov.l A, Dreg32, <s/u> bit 15 1 X 14 1 13 1 s/u X s:0 u:1 12 0 11 P Ad X a0:0 a1:1 10 0 9 1 8 0 7 0 6 0 5 1 4 1 3 X X X X X X X X X 2 1 0 Dreg32s (Source Dreg32#) X X X syntax mov.l Ad, Dreg32s, <s/u> opcode range 0xE230_0000-0xE237_5000 example: mov.l a1, d5.4, u 2013.12.20 版 (C) 2009-2013 New Japan Radio Co., Ltd. 270 頁 Ximo16A Preliminary 24.3.9 no operation( 並列転送実行用 ) 24.3.9.1 No operation (2) dnop bit 15 1 X 14 1 X 13 1 X 12 0 X 11 P X 10 0 X 9 1 X 8 1 X 7 X X 6 X X 5 X X 4 X X 3 X X 2 X X 1 X X 0 X X syntax dnop opcode range 0xE300_0000 example: dnop 271 頁 (C) 2009-2013 New Japan Radio Co., Ltd. 2013.12.20 版