24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

FPREM—Partial Remainder オペコード 命令 説明 D9 F8 FPREM ST(0) を ST(1) で割って得られる剰余で ST(0) を置き換える。 説明 ST(0) レジスタの値( 被除数 ) を ST(1) レジスタの値( 除数 ま たは法 ) で割っ て得られる 剰余を計算し、 結果を ST(0) にス トアする。 剰余の値は以下の式で表される。 剰余 = ST(0) - (N * ST(1)) ここで、 N は [ST(0)/ST(1)] の実数の商をゼロに向けて切り捨てて得られる整数値である。 剰余の符号は被除数の符号 と 同じ である。 部分剰余が 1 回も計算されていなくても、 剰 余の絶対値は法の絶対値よ り小さい ( 下で説明 )。 こ の命令は正確な結果を生じ る。 精度 ( 不正確 ) 例外は発生せず、 丸め制御は効果を も たない。 以下の表に、 アンダフ ロ ーが発生しない も の と して、 さ ま ざ ま な ク ラ スの数の 剰余を計算した と き に得 ら れる結果を示す。 表 1-7. FPREM の 0 と NaN ST(1) −∞ −F −0 +0 +F +∞ NaN −∞ * * * * * * NaN ST(0) −F ST(0) −F or −0 ** ** −F or −0 ST(0) NaN −0 −0 −0 * * −0 −0 NaN +0 +0 +0 * * +0 +0 NaN +F ST(0) +F or +0 ** ** +F or +0 ST(0) NaN +∞ * * * * * * NaN NaN NaN NaN NaN NaN NaN NaN NaN 注 : F 有限実数を示す。 * 浮動小数点無効算術オペランド (#IA) 例外を示す。 ** 浮動小数点 0 による除算 (#Z) 例外を示す。 結果が 0 のときは、 その符号は被除数の符号と同じである。 法が∞のときは、 結果は ST(0) の値に等し く なる。 FPREM 命令は、 IEEE 規格 754 で定義 さ れた剰余を計算しない。 IEEE で定義された剰余 は、 FPREM1 命令で計算で き る。 FPREM 命令は、 イ ン テル 8087 およびインテル287 数 値演算コ プロセ ッ サ と の互換性のために用意されている。 FPREM 命令の 「部分剰余」 (partial remainder) の名前は、 その剰余の計算方法に由来して いる。 こ の命令は減算を反復して最終的に剰余を得る。 すなわち、 こ の命令の 1 回の実 行では ST(0) の指数を 63 までしか縮小できない。 法より小さい剰余を生じるこ とができ た場合に、 この演算は完了し、 FPU ステータス ・ ワー ド内の C2 フラグがクリアされる。 法よ り小さい剰余に達するまでは、 C2 はセッ ト されており、 ST(0) 内の結果は部分剰余 と 呼ばれる。 部分剰余の指数は元の被除数の指数 よ り も 最低 32 は小さ く なっている。 ソ フトウェアは、 C2 がク リアされるまで、 (ST(0) 内の部分剰余を被除数 と して使用して ) この命令を繰り返し実行できる。 注 : そのよ うな剰余計算ループを実行している間に、 FPU を必要とする、 優先順位が高 い割 り 込みル ー チンが剰余計算ル ー プ内の命令間で コ ン テ キス ト ・ ス イ ッ チを強制 するこ とが考えられるので注意する。 3:516 第 3 巻 : IA-32 基本命令リファレンス

FPREM—Partial Remainder ( 続き ) FPREM 命令の重要な用途は、 周期関数の引数を縮小す る こ と である。 縮小が完了す る と、 この命令は商の最下位3 ビッ トをFPU ステータス ・ ワー ドの C3、 C1、 C0 フラグに ス ト アす る。 こ の情報は、 単位円の正しい 8 等分 ( π /4) 扇形内の元の角度を示して く れ るので、 ( 法として π/4 を使用した ) 正接関数の引数の縮小に重要であ る。 操作 D ← exponent(ST(0)) - exponent(ST(1)); IF D < 64 THEN Q ← Integer(TruncateTowardZero(ST(0) / ST(1))); ST(0) ← ST(0) - (ST(1) ∗ Q); C2 ← 0; C0, C3, C1 ← LeastSignificantBits(Q); (* Q2, Q1, Q0 *) ELSE C2 ← 1; N ← an implementation-dependent number between 32 and 63; QQ ← Integer(TruncateTowardZero((ST(0) / ST(1)) / 2 (D − N) )); ST(0) ← ST(0) - (ST(1) ∗ QQ ∗ 2 (D − N) ); FI; FPU 影響を受けるフラグ C0 商のビ ッ ト 2 (Q2) にセッ ト される。 C1 ス タ ッ ク ・ アンダ フ ロ ーが発生した場合は 0 にセッ ト さ れ、 発生しなか っ た場合は商の最下位ビ ッ ト (Q0) にセッ トされる。 C2 縮小が完了した場合は 0 にセッ ト され、 完了していない場 合は 1 にセッ ト される。 C3 商のビ ッ ト 1 (Q1) にセッ ト される。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト 浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfl が 1 の場合 )、 NaT レ ジ ス タ参照アボ ー ト 。 浮動小数点例外 #IS ス タ ッ ク ・ アンダ フ ロ ーが発生した場合。 #IA ソース・オペランドがSNaN 値であるか、 法が 0 である か、 被除数が∞であるか、 またはそれらのいずれかの フォーマットがサポートされていない場合。 #D ソ ー ス ・ オペラ ン ド がデ ノ ー マル値である場合。 #U 結果が小さすぎて、 デスティネーション・フォーマットで 表現で き ない場合。 保護モード例外 #NM CR0 の EM または TS がセッ ト された場合。 第 3 巻 : IA-32 基本命令リファレンス 3:517

FPREM—Partial Remainder<br />

オペコード 命令 説明<br />

D9 F8 FPREM ST(0) を ST(1) で割って得られる剰余で ST(0) を置き換える。<br />

説明<br />

ST(0) レジスタの値( 被除数 ) を ST(1) レジスタの値( 除数 ま たは法 ) で割っ て得られる<br />

剰余を計算し、 結果を ST(0) にス トアする。 剰余の値は以下の式で表される。<br />

剰余 = ST(0) - (N * ST(1))<br />

ここで、 N は [ST(0)/ST(1)] の実数の商をゼロに向けて切り捨てて得られる整数値である。<br />

剰余の符号は被除数の符号 と 同じ である。 部分剰余が 1 回も計算されていなくても、 剰<br />

余の絶対値は法の絶対値よ り小さい ( 下で説明 )。<br />

こ の命令は正確な結果を生じ る。 精度 ( 不正確 ) 例外は発生せず、 丸め制御は効果を も<br />

たない。 以下の表に、 アンダフ ロ ーが発生しない も の と して、 さ ま ざ ま な ク ラ スの数の<br />

剰余を計算した と き に得 ら れる結果を示す。<br />

表 1-7. FPREM の 0 と NaN<br />

ST(1)<br />

−∞ −F −0 +0 +F +∞ NaN<br />

−∞ * * * * * * NaN<br />

ST(0) −F ST(0) −F or −0 ** ** −F or −0 ST(0) NaN<br />

−0 −0 −0 * * −0 −0 NaN<br />

+0 +0 +0 * * +0 +0 NaN<br />

+F ST(0) +F or +0 ** ** +F or +0 ST(0) NaN<br />

+∞ * * * * * * NaN<br />

NaN NaN NaN NaN NaN NaN NaN NaN<br />

注 :<br />

F 有限実数を示す。<br />

* 浮動小数点無効算術オペランド (#IA) 例外を示す。<br />

** 浮動小数点 0 による除算 (#Z) 例外を示す。<br />

結果が 0 のときは、 その符号は被除数の符号と同じである。 法が∞のときは、 結果は<br />

ST(0) の値に等し く なる。<br />

FPREM 命令は、 IEEE 規格 754 で定義 さ れた剰余を計算しない。 IEEE で定義された剰余<br />

は、 FPREM1 命令で計算で き る。 FPREM 命令は、 イ ン テル 8087 およびインテル287 数<br />

値演算コ プロセ ッ サ と の互換性のために用意されている。<br />

FPREM 命令の 「部分剰余」 (partial remainder) の名前は、 その剰余の計算方法に由来して<br />

いる。 こ の命令は減算を反復して最終的に剰余を得る。 すなわち、 こ の命令の 1 回の実<br />

行では ST(0) の指数を 63 までしか縮小できない。 法より小さい剰余を生じるこ とができ<br />

た場合に、 この演算は完了し、 FPU ステータス ・ ワー ド内の C2 フラグがクリアされる。<br />

法よ り小さい剰余に達するまでは、 C2 はセッ ト されており、 ST(0) 内の結果は部分剰余<br />

と 呼ばれる。 部分剰余の指数は元の被除数の指数 よ り も 最低 32 は小さ く なっている。 ソ<br />

フトウェアは、 C2 がク リアされるまで、 (ST(0) 内の部分剰余を被除数 と して使用して )<br />

この命令を繰り返し実行できる。<br />

注 : そのよ うな剰余計算ループを実行している間に、 FPU を必要とする、 優先順位が高<br />

い割 り 込みル ー チンが剰余計算ル ー プ内の命令間で コ ン テ キス ト ・ ス イ ッ チを強制<br />

するこ とが考えられるので注意する。<br />

3:516 第 3 巻 : IA-32 基本命令リファレンス

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!