Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么ARM芯片有一条名为(FJCVTZ)的Javascript指令?_Javascript_Assembly_Arm - Fatal编程技术网

为什么ARM芯片有一条名为(FJCVTZ)的Javascript指令?

为什么ARM芯片有一条名为(FJCVTZ)的Javascript指令?,javascript,assembly,arm,Javascript,Assembly,Arm,是“浮点Javascript转换为有符号定点,向零舍入”。Arm v8.3-A芯片和更高版本支持它。这很奇怪,因为您不希望看到JavaScript如此接近裸机 我可以找到指令作用的解释,但找不到它存在的原因。他说:“它作为一条指令存在是因为JS缺少整数类型,这意味着某些用例常常因为没有好的算法原因而需要这个操作。”。这似乎是有道理的,但我需要更详细的理解。这是因为JS对数字使用双精度,但如果您想使用位执行操作,任务并不重要,因此将JS double转换为整数的特定指令使事情变得更简单 这个手臂链

是“浮点Javascript转换为有符号定点,向零舍入”。Arm v8.3-A芯片和更高版本支持它。这很奇怪,因为您不希望看到JavaScript如此接近裸机


我可以找到指令作用的解释,但找不到它存在的原因。他说:“它作为一条指令存在是因为JS缺少整数类型,这意味着某些用例常常因为没有好的算法原因而需要这个操作。”。这似乎是有道理的,但我需要更详细的理解。

这是因为JS对数字使用双精度,但如果您想使用位执行操作,任务并不重要,因此将JS double转换为整数的特定指令使事情变得更简单

这个手臂链接很好地解释了这一点:

为了添加有关fuz评论的更多信息,
FCVTZS
FJCVTZS
(两者都将浮点转换为int)之间的区别在于,在溢出的情况下,
FJCVTZS
值将为0x8000000,而不是溢出。此外,
FJCVTZS
可以生成异常以指示转换的方式(即不精确)

FJCVTZS


FCVTZS

支持这句话:JavaScript引擎在对数字应用位运算符时以及在其他各种时间(除非引擎能够将数字保持为整数作为优化,但在许多情况下它不能)必须执行此操作(在规范中调用)。请注意,与通常为此作业提供的
FCVTZS
指令的关键区别在于
FJCVTZS
在溢出时具有不同的行为。也就是说,您总是得到最少32位,而如果数字不合适,
FCVTZS
似乎会做一些不同的事情。
FJCVTZS
的正确行为似乎有点难以实现。@Tim我同意TJ的观点,会议记录是离题的(我想它们也受到限制,你很难拥有它们),但是在ARM驱动的设备上运行JavaScript是一件事,请参阅@TimSmith谢谢你的合作。让我们看看是否可以重新打开此问题。您应该解释为什么现有的
FCVTZS
指令不足以执行此任务。这不是不够,而是慢得多(至少2/3次),因为它需要10条不同的指令来执行同一任务。当然,对较大算法的影响要小得多,但在较小的A53上工作时,速度和内存都会从中受益。)现在让我们将其转移到为ARM编译的V8上,它肯定会占用一些CPU空间。此指令仅在编写类似V8的JS运行时使用吗?一般来说,它在其他情况下有用吗?@wlnirvana它在ARM上获取x86_64行为时也有用