web-dev-qa-db-fra.com

Pourquoi les puces ARM ont-elles une instruction avec Javascript dans le nom (FJCVTZS)?

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.

18
Tim Smith

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

16
Jose