// 直交形式
<dst> = <dreg> * <dreg> <opt>;
// 基本形式
[ IF <cond> ] <dst> = <xop> * <yop> <opt>;
// 特殊形式
[ IF <cond> ] <dst> = <xop> * <xop> <opt>;
// 直交形式 MR = AX0 * MY0 (SS); // 符号付き×符号付き MR = AX0 * MY0 (SU); // 符号付き×符号無し MR = AX0 * MY0 (US); // 符号無し×符号付き MR = AX0 * MY0 (UU); // 符号無し×符号無し MR = AX0 * MY0 (RND); // 符号付き×符号付き、丸め SR = MX0 * AY0 (RND); // 基本形式 MR = MX0 * MY0 (RND); SR = MX0 * MY0 (SS); IF GE MR = AX0 * AY0 (SS); // 条件実行
2つの16ビット・オペランドの積をMRまたはSRに格納します。オプション指定によって符号付き数と符号無し数の間で自由に掛け算を行えます。
積は32ビットの値として得られます。固定小数点数モードの場合、積はMR1:MR0(あるいはSR1:SR0)の32ビット・レジスタに左詰めで格納されます。整数モードの場合は右詰めです。いずれの場合もMR2(あるいはSR2)は符号拡張されます。詳しくはMAC命令ページを参照してください。
特別な例として、基本形式は二つの<xop>の積を認めています。これはx2を計算するときに使います。この場合、二つの<xop>は同じレジスタでなければなりません。
(RND)を指定すると符号付き数同士の積を計算し、結果を上位16ビットに丸めます。定義からこのオプションは整数モードでは無意味です。丸め方については丸め命令を参照してください。
<dst> ::= MR, SR <dreg> ::= AX0, AX1, AY0, AY1, MX0, MX1, MY0, MY1, SI, AR, MR2, MR1, MR0, SR2, SR1, SR0 <xop> ::= MX0, MX1, AR, MR2, MR1, MR0, SR1, SR0 <yop> ::= MY0, MY1, SR1, 0 <opt> ::= (SS), (SU), (US), (UU), (RND) <cond> ::= EQ, NE, GT, LE, LT, GE, AV, NOT AV, AC, NOT AC, SWCOND, NOT SWCOND, MV, NOT MV, NOT CE, TRUE