FJCVTZS是“将浮点Javascript转换为带符号的定点,四舍五入为零”。Arm v8.3-A芯片和更高版本支持该功能。这很奇怪,因为您不希望看到JavaScript如此接近裸机。
我可以找到有关指令作用的说明,但找不到其存在的原因。 该线程说:“它作为一条指令存在是因为JS缺少整数类型,这意味着某些用例在没有很好的算法原因的情况下,经常会令人讨厌地需要此操作。” 这是合理的,但我想更详细地了解。
FCVTZS
为此作业提供的常规指令的关键区别在于FJCVTZS
溢出时的行为不同。也就是说,您总是得到最少的32位,FCVTZS
而如果数字不合适,您似乎会做一些不同的事情。FJCVTZS
否则,正确的行为似乎有些棘手。
Answers:
这是因为JS对数字使用双精度,但是如果您要对位执行运算,那么这项任务就很简单了,因此将JS双精度转换为整数的特定指令使事情变得简单。
该ARM链接对其进行了很好的解释:https : //community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions
为了增加关于FUZ的评论更多信息,之间的差异FCVTZS
和FJCVTZS
(他们两个浮点转换为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
FCVTZS
指令不足以完成任务。
ToInt32
每当您对数字应用按位运算符时,JavaScript引擎都必须执行此操作(在规范中称为),除非在其他时间(除非引擎能够将数字保持为整数)最佳化,但在许多情况下却不能)。