FJCVTZS to „Konwersja zmiennoprzecinkowego kodu JavaScript na stały punkt ze znakiem , zaokrąglanie w kierunku zera”. Jest obsługiwany w układach Arm v8.3-A i nowszych. Co jest dziwne, ponieważ nie spodziewasz się, że JavaScript zobaczysz tak blisko gołego metalu.
Potrafię znaleźć wyjaśnienia dotyczące tego, co robi instrukcja, ale nie mogę znaleźć wyjaśnienia, dlaczego istnieje. Ten wątek mówi, że „istnieje jako pojedyncza instrukcja, ponieważ brak typu całkowitego w JS oznacza, że niektóre przypadki użycia często wymagają tej operacji bez dobrego algorytmicznego powodu”. To prawdopodobne, ale chciałbym dokładniejszego zrozumienia.
javascript
assembly
arm
Tim Smith
źródło
źródło
ToInt32
w specyfikacji) za każdym razem, gdy zastosujesz operator bitowy do liczby i w różnych innych momentach (chyba że silnik był w stanie zachować liczbę jako liczbę całkowitą jako optymalizacji, ale w wielu przypadkach nie).FCVTZS
instrukcji dostarczonej dla tego zadania polega na tym, żeFJCVTZS
zachowuje się inaczej w przypadku przepełnienia. Mianowicie, zawsze otrzymujesz co najmniej 32 bity, podczas gdyFCVTZS
wydaje się, że zamiast tego robisz coś innego, jeśli liczba nie pasuje. W przeciwnym razie poprawne zachowanieFJCVTZS
wydaje się być nieco trudne do zaimplementowania.Odpowiedzi:
Dzieje się tak, ponieważ JS używa podwójnej precyzji dla liczb, ale jeśli chcesz wykonywać operacje na bitach, zadanie jest nietrywialne, więc konkretna instrukcja zamiany liczby podwójnej JS na liczbę całkowitą ułatwia sprawę.
Ten link ARM bardzo dobrze to wyjaśnia: https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions
Aby dodać więcej informacji na temat komentarza fuz, różnice między
FCVTZS
iFJCVTZS
(oba konwertują zmiennoprzecinkowe na int) polegają na tym, że w przypadku przepełnieniaFJCVTZS
wartość będzie wynosić 0x80000000 zamiast przepełnienia. PonadtoFJCVTZS
może wygenerować wyjątek, aby wskazać, w jaki sposób konwersja była (tj. Niedokładna).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.htmlźródło
FCVTZS
instrukcja jest niewystarczająca do wykonania zadania.