为什么 ARM 芯片有一条指令名称中带有 Javascript 的指令(FJCVTZS)?
Why do ARM chips have an instruction with Javascript in the name (FJCVTZS)?
FJCVTZS 是“浮点数 Javascript 转换为有符号定点数,向零舍入”。它在 Arm v8.3-A 芯片及更高版本中受支持。这很奇怪,因为您不希望看到 JavaScript 离裸机如此之近。
我能找到指令作用的解释,但找不到它存在的原因。 This thread 说“它作为单个指令存在是因为 JS 缺少整数类型意味着某些用例通常出于没有好的算法原因需要这种操作。”。这似乎是合理的,但我想要更详细的了解。
因为JS对数字使用了双精度,但是如果你想对位进行运算,这个任务就很困难,所以一个特定的指令将JS双精度转换为整数使事情变得更容易。
这个ARMlink解释的很好: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
FJCVTZS 是“浮点数 Javascript 转换为有符号定点数,向零舍入”。它在 Arm v8.3-A 芯片及更高版本中受支持。这很奇怪,因为您不希望看到 JavaScript 离裸机如此之近。
我能找到指令作用的解释,但找不到它存在的原因。 This thread 说“它作为单个指令存在是因为 JS 缺少整数类型意味着某些用例通常出于没有好的算法原因需要这种操作。”。这似乎是合理的,但我想要更详细的了解。
因为JS对数字使用了双精度,但是如果你想对位进行运算,这个任务就很困难,所以一个特定的指令将JS双精度转换为整数使事情变得更容易。
这个ARMlink解释的很好: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