FJCVTZS es "Convertir Javascript de punto flotante a punto fijo firmado, redondeando hacia cero". Es compatible con los chips Arm v8.3-A y posteriores. Lo cual es extraño, porque no esperas ver JavaScript tan cerca del metal desnudo.
Puedo encontrar explicaciones de lo que hace la instrucción, pero no por qué existe. Este hilo dice que "existe como una sola instrucción porque la falta de un tipo entero de JS significa que ciertos casos de uso necesitan esta operación obscenamente a menudo sin una buena razón algorítmica". Eso es plausible, pero me gustaría una comprensión más detallada.
Es porque JS usa doble precisión para los números, pero si desea realizar operaciones con bits, la tarea no es trivial, por lo que una instrucción específica para convertir JS doble en entero facilita las cosas.
Este enlace ARM lo explica muy bien: https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions
Para agregar más información sobre el comentario de fuz, las diferencias entre FCVTZS
y FJCVTZS
(ambos convierten el punto flotante en int) son que, en caso de desbordamiento, el valor de FJCVTZS
será 0x80000000 en lugar de desbordarse. Además, FJCVTZS
puede generar una excepción para indicar cómo fue la conversión (es decir, inexacta).
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