FJCVTZS ist "Gleitkomma-Javascript-Konvertierung in signierten Festpunkt, Rundung in Richtung Null". Es wird in Arm v8.3-A-Chips und höher unterstützt. Was seltsam ist, weil Sie nicht erwarten, dass JavaScript so nah am Bare Metal ist.
Ich kann Erklärungen finden, was die Anweisung tut, aber nicht, warum sie existiert. In diesem Thread heißt es: "Es existiert als einzelne Anweisung, weil das Fehlen eines Integer-Typs bei JS bedeutet, dass bestimmte Anwendungsfälle diese Operation ohne guten algorithmischen Grund obszön oft benötigen." Das ist plausibel, aber ich hätte gerne ein detaillierteres Verständnis.
javascript
assembly
arm
Tim Smith
quelle
quelle
ToInt32
in der Spezifikation aufgerufen wird) ausführen, wenn Sie einen bitweisen Operator auf eine Zahl und zu verschiedenen anderen Zeiten anwenden (es sei denn, die Engine konnte die Zahl als Ganzzahl als beibehalten Optimierung, aber in vielen Fällen nicht).FCVTZS
Anweisungen für diesen Job darin besteht, dassFJCVTZS
sich der Überlauf anders verhält. Sie erhalten nämlich immer die mindestens 32 Bits, währendFCVTZS
stattdessen etwas anderes zu tun scheint, wenn die Zahl nicht passt. Das korrekte Verhalten vonFJCVTZS
scheint etwas schwierig zu implementieren zu sein.Antworten:
Dies liegt daran, dass JS eine doppelte Genauigkeit für die Zahlen verwendet. Wenn Sie jedoch Operationen mit Bits ausführen möchten, ist die Aufgabe nicht trivial. Eine spezielle Anweisung zum Konvertieren von JS double in eine Ganzzahl erleichtert die Sache.
Dieser ARM-Link erklärt es sehr gut: https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions
Um weitere Informationen zu fuz 'Kommentar hinzuzufügen, bestehen die Unterschiede zwischen
FCVTZS
undFJCVTZS
(beide konvertieren Gleitkomma in int) darin, dass im Falle eines Überlaufs derFJCVTZS
Wert 0x80000000 ist, anstatt überzulaufen. Darüber hinausFJCVTZS
kann eine Ausnahme generiert werden, um anzuzeigen, wie die Konvertierung war (dh ungenau).FJCVTZS
: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801g/hko1477562192868.htmlFCVTZS
: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802a/FCVTZS_float_int.htmlquelle
FCVTZS
Anweisung für die Aufgabe nicht ausreicht.