1. ホーム
  2. javascript

[解決済み] ARMチップにはなぜJavascriptを名前に含む命令(FJCVTZS)があるのですか?

2022-04-27 09:54:28

質問内容

FJCVTZS は "浮動小数点Javascriptを符号付き固定小数点に変換し、ゼロに向けて丸める。 Arm v8.3-Aチップ以降でサポートされています。 ベアメタルに近いところでJavaScriptが見られるとは思わないので、これは奇妙なことです。

この命令が何をするのかの説明は見つかりますが、なぜ存在するのかの説明はありません。 このスレッド というのは、JSには整数型がないため、特定のユースケースでこの操作がアルゴリズム的に正当な理由なく頻繁に必要になるからです。 それはもっともなことですが、私はより詳細な理解が欲しいです。

どのように解決するのですか?

JSでは倍精度の数値を使っていますが、ビットを使った演算を行う場合、その作業は自明ではないので、JSの倍精度を整数に変換する特定の命令があれば、より簡単に行えます。

このARMのリンクがとてもよく説明しています。 https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions

fuzさんのコメントについて補足すると、以下のような違いがあります。 FCVTZSFJCVTZS (いずれも浮動小数点からint型に変換)はオーバーフローした場合の話です。 FJCVTZS の値はオーバーフローすることなく、0x80000000となります。さらに FJCVTZS は、変換がどのように行われたか(すなわち、不正確)を示すために、例外を生成することができます。

FJCVTZS : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801g/hko1477562192868.html

FCVTZS : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/FCVTZS_float_int.html