मीनिंग ऑफ @ zero_extendqisi2

Nov 18 2020

मैं सोच रहा था कि @ zero_extendqisi2gcc असेंबली आउटपुट का वास्तविक अर्थ और उपयोग भी था। मुझे नहीं पता था कि क्यूसी उन लाइनों के साथ या कुछ भी खड़ा करता है।

संदर्भ के लिए, लाइन है ldrb r3, [fp, #-9] @ zero_extendqisi2और यह एक रास्पबेरी पाई जीरो डब्ल्यू पर एआरएम है, जिसे जीसीसी के साथ संकलित किया गया है। उदाहरण के लिए, जब GCC9.2 के साथ कोई विकल्प नहीं है, तो अनुकूलन के unsigned charसाथ रूपांतरण के साथ पुनः लोड हो रहा है int।https://godbolt.org/z/7xnfqh। गॉडबोल्ट (४.५) पर ​​पुराने जीसीसी जल्द से जल्द और संभवतः पहले एक ही टिप्पणी प्रिंट करें।

जवाब

1 NateEldredge Nov 19 2020 at 14:22

यह एक है RTL अनुदेश नाम, में शामिल जीसीसी internals मैनुअल के मानक नाम सूची के तहत zero_extendmn2। यहाँ m,nहैं मशीन मोड qi और si, जो क्रमशः एक बाइट और एक 32-बिट पूर्णांक हैं। तो यह जीसीसी का संकेत है कि यह एक निर्देश पैदा कर रहा है जो एक बाइट लेता है (यहां मेमोरी से लोड होता है) और शून्य इसे 32-बिट पूर्णांक (यहां रजिस्टर आर 3 में) में विस्तारित करता है। जो वास्तव में एआरएम ldrbनिर्देश करता है।

मुझे नहीं पता कि 2 का क्या मतलब है, लेकिन यह जाहिरा तौर पर जीसीसी के नामकरण सम्मेलन का हिस्सा है।

जैसा कि पीटर बताते हैं, यह थोड़ा अजीब है कि जीसीसी विधानसभा में इस तरह की टिप्पणी को शामिल नहीं करेगा -fverbose-asm। दरअसल टिप्पणी, मशीन वर्णन फ़ाइल में टेम्पलेट स्ट्रिंग के हिस्से के रूप में कोडित है arm.md। यह एक डिबगिंग सहायता हो सकती है जिसे कुछ जीसीसी डेवलपर ने जोड़ा और फिर बाहर निकालना भूल गया।

(यदि आप इसे अपने असाइनमेंट के लिए सबमिट करते हैं, तो कृपया इस पोस्ट को ठीक से उद्धृत करें।)