为什么ARM芯片在名称(FJCVTZS)中使用带有Javascript的指令?


148

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

我可以找到有关指令作用的说明,但找不到其存在的原因。 该线程说:“它作为一条指令存在是因为JS缺少整数类型,这意味着某些用例在没有很好的算法原因的情况下,经常会令人讨厌地需要此操作。” 这是合理的,但我想更详细地了解。


4
支持该说法:ToInt32每当您对数字应用按位运算符时,JavaScript引擎都必须执行此操作(在规范中称为),除非在其他时间(除非引擎能够将数字保持为整数)最佳化,但在许多情况下却不能)。
TJ Crowder

1
请注意,与FCVTZS为此作业提供的常规指令的关键区别在于FJCVTZS溢出时的行为不同。也就是说,您总是得到最少的32位,FCVTZS而如果数字不合适,您似乎会做一些不同的事情。FJCVTZS否则,正确的行为似乎有些棘手。
fuz

1
@Tim我同意TJ的观点,会议纪要不在讨论之列(而且我认为它们也受到限制,因此几乎没有它们可以使用),但是在基于ARM的设备上运行JavaScript是一件事情,请参阅使用IoT构建设备JavaScript
Adriano Repetti

@TimSmith谢谢您的合作。让我们看看是否可以重新提出这个问题。
fuz

Answers:


132

这是因为JS对数字使用双精度,但是如果您要对位执行运算,那么这项任务就很简单了,因此将JS双精度转换为整数的特定指令使事情变得简单。

该ARM链接对其进行了很好的解释:https : //community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions

为了增加关于FUZ的评论更多信息,之间的差异FCVTZSFJCVTZS(他们两个浮点转换为INT)是溢出的情况下,FJCVTZS值将是0x80000000的,而不是溢出。此外,FJCVTZS可以生成异常以指示转换的方式(即不精确)。

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

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


8
您应该解释为什么现有FCVTZS指令不足以完成任务。
fuz

13
这还不够,它要慢得多(至少是2/3倍),因为执行同一任务需要10条不同的指令。当然,对更大算法的影响要比对它的影响要低得多,但是当使用较小的A53时,速度和内存都将受益。 CPU空间。
Adriano Repetti

仅在编写像v8这样的JS运行时时才使用此指令吗?通常,它在其他情况下有用吗?
wlnirvana
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.