एआरएम चिप्स के नाम (FJCVTZS) में जावास्क्रिप्ट के साथ एक निर्देश क्यों है?


148

FJCVTZS "फ़्लोटिंग-पॉइंट Javascript Convert to Signed फिक्स्ड-पॉइंट, ज़ीरो की ओर गोलाई है"। यह आर्म v8.3-A चिप्स और बाद में सपोर्ट करता है। यह अजीब है, क्योंकि आप जावास्क्रिप्ट को नंगे धातु के करीब देखने की उम्मीद नहीं करते हैं।

मैं निर्देश क्या करता है, इसका स्पष्टीकरण पा सकता हूं, लेकिन ऐसा क्यों नहीं है। यह थ्रेड कहता है, "यह एक एकल निर्देश के रूप में मौजूद है क्योंकि जेएस की पूर्णांक प्रकार की कमी का मतलब है कि कुछ उपयोग मामलों को इस ऑपरेशन की आवश्यकता होती है जो अक्सर बिना किसी अच्छे एल्गोरिदम के कारण होता है।" यह प्रशंसनीय है, लेकिन मैं अधिक विस्तृत समझ चाहता हूं।


4
उस उद्धरण का समर्थन करते हुए: जावास्क्रिप्ट इंजन को यह ऑपरेशन (जिसे ToInt32युक्ति में कहा जाता है) करना होता है, जब भी आप किसी नंबर और विभिन्न समय पर एक बिटवाइज़र ऑपरेटर को लागू करते हैं (जब तक कि इंजन पूर्णांक के रूप में संख्या को बनाए रखने में सक्षम नहीं होता है) अनुकूलन, लेकिन कई मामलों में यह नहीं हो सकता)।
टीजे क्राउडर

1
ध्यान दें कि FCVTZSइस कार्य के लिए दिए गए सामान्य निर्देश में महत्वपूर्ण अंतर यह है कि FJCVTZSअतिप्रवाह पर एक अलग व्यवहार है। अर्थात्, आप हमेशा कम से कम 32 बिट्स प्राप्त करते हैं, जबकि FCVTZSनंबर फिट नहीं होने के बजाय कुछ अलग करने के लिए लगता है। FJCVTZSअन्यथा लागू करने के लिए सही व्यवहार थोड़ा मुश्किल लगता है।
फ़ूज

1
@ मैं टीजे से सहमत हूं, बैठक के मिनट ऑफ-टॉपिक हैं (और मुझे लगता है कि वे भी प्रतिबंधित हैं तो शायद ही आप उन्हें पा सकते हैं) लेकिन एआरएम द्वारा संचालित डिवाइस पर जावास्क्रिप्ट को चलाने के लिए एक चीज है, देखें IoT डिवाइस के साथ बिल्डिंग जावास्क्रिप्ट
Adriano Repetti

@TimSmith आपके सहयोग के लिए धन्यवाद। देखते हैं कि क्या हम इस प्रश्न को दोबारा खोल सकते हैं।
फ़ूज

जवाबों:


132

ऐसा इसलिए है क्योंकि जेएस संख्याओं के लिए दोहरी सटीकता का उपयोग करता है, लेकिन यदि आप बिट्स के साथ संचालन करना चाहते हैं, तो कार्य nontrivial है, इसलिए जेएस डबल को पूर्णांक में बदलने के लिए एक विशिष्ट निर्देश बात को आसान बनाता है।

यह ARM लिंक इसे बहुत अच्छी तरह से समझाता है: https://community.arm.com/processors/b/blog/posts/armv8-a-altecture-2016-additions

फ़ुज की टिप्पणी के बारे में अधिक जानकारी जोड़ने के लिए, FCVTZSऔर FJCVTZS(दोनों के बीच अंतर फ़्लोटिंग पॉइंट को इंट में बदलते हैं) यह है कि अतिप्रवाह के मामले में, FJCVTZSमूल्य अतिप्रवाह के बजाय 0x80000000 होगा। इसके अलावा, FJCVTZSरूपांतरण को इंगित करने के लिए एक अपवाद उत्पन्न कर सकता है कि रूपांतरण (अथाह) कैसे हुआ।

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


8
आपको यह बताना चाहिए कि मौजूदा FCVTZSनिर्देश कार्य के लिए अपर्याप्त क्यों है।
फ़ू

13
यह अपर्याप्त नहीं है, यह बहुत कम है (चलो कम से कम 2/3 बार कहते हैं) क्योंकि इसे एक ही कार्य करने के लिए 10 अलग-अलग निर्देशों की आवश्यकता होती है। निश्चित रूप से एक बड़े एल्गोरिथ्म पर प्रभाव MUCH की तुलना में कम है, लेकिन जब छोटे A53 पर काम करते हैं तो गति और मेमोरी दोनों को इसका लाभ मिलेगा।) अब इसे उदाहरण के लिए, V8 को ARM के लिए संकलित करते हैं और यह निश्चित रूप से कुछ के योग्य होगा। CPU स्थान।
एड्रियानो रेपेती

क्या इस निर्देश का उपयोग केवल v8 की तरह JS रनटाइम लिखते समय किया जाता है? सामान्य तौर पर, क्या यह अन्य मामलों में उपयोगी है?
wlnirvana
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.