FJCVTZS est "Convertir Javascript à virgule flottante en virgule fixe signé, arrondi vers zéro". Il est pris en charge dans les puces Arm v8.3-A et versions ultérieures. Ce qui est étrange, car vous ne vous attendez pas à voir JavaScript si près du métal nu.
Je peux trouver des explications sur ce que fait l'instruction, mais pas pourquoi elle existe. Ce fil dit "il existe comme une seule instruction parce que le manque de JS d'un type entier signifie que certains cas d'utilisation ont besoin de cette opération de manière obscène souvent sans bonne raison algorithmique.". C'est plausible mais j'aimerais une compréhension plus détaillée.
C'est parce que JS utilise la double précision pour les nombres, mais si vous voulez effectuer des opérations avec des bits, la tâche n'est pas triviale, donc une instruction spécifique pour convertir JS double en entier facilite la chose.
Ce lien de bras l'explique très bien: https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions
Afin d'ajouter plus d'informations concernant le commentaire de fuz, les différences entre FCVTZS
et FJCVTZS
(les deux convertissent en virgule flottante en int) sont qu'en cas de débordement, FJCVTZS
value sera 0x80000000 au lieu de déborder. De plus, FJCVTZS
peut générer une exception afin d'indiquer comment la conversion a été (c'est-à-dire inexacte).
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