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

Tim*_*ith 17 javascript assembly arm

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

我可以找到对指令的作用的解释,但不能解释为什么它存在. 这个帖子说"它作为单个指令存在是因为JS缺少一个整数类型意味着某些用例通常需要这种操作,因为没有好的算法原因." 这似乎是合理的,但我想要更详细的理解.

Jos*_*ose 14

这是因为JS对数字使用双精度,但是如果你想用位执行操作,那么任务是不重要的,所以将JS double转换为整数的特定指令使事情更容易.

这个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/hk1477562192868.html

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

  • 您应该解释为什么现有的“FCVTZS”指令不足以完成任务。 (8认同)
  • 这还不够,它要慢得多(至少是2/3倍),因为执行同一任务需要10条不同的指令。当然,对更大算法的影响要比对它的影响要低得多,但是当使用较小的A53时,速度和内存都会受益。)现在,让我们将其移至例如为ARM编译的V8上,这绝对是值得的CPU空间。 (2认同)
  • @wlnirvana 对于在 ARM 上获取 x86_64 行为也很有用 /sf/ask/4639577561/ (2认同)