नहीं, आप जो चाहते हैं उसे करने का कोई तरीका नहीं है।
माइक्रोसॉफ्ट का कंपाइलर x86-64 लक्ष्यों के लिए इनलाइन असेंबली का समर्थन नहीं करता है, जैसा कि आपने कहा था। यह आपको बाहरी कोड मॉड्यूल (* .asm) में अपने असेंबली फ़ंक्शंस को परिभाषित करने के लिए मजबूर करता है, उन्हें एमएएसएम के साथ इकट्ठा करता है, और परिणाम को अलग-अलग संकलित सी/सी ++ कोड के साथ जोड़ता है।
चरणों की आवश्यक पृथक्करण का अर्थ है कि सी/सी ++ कंपाइलर आपके असेंबली फ़ंक्शंस को रेखांकित नहीं कर सकता क्योंकि वे संकलन के समय इसके लिए दृश्यमान नहीं हैं।
लिंक-टाइम कोड जनरेशन (एलटीसीजी) सक्षम होने के साथ भी, आपके असेंबली मॉड्यूल को रेखांकित नहीं किया जाएगा क्योंकि लिंकर बस इसका समर्थन नहीं करता है।
सीधे सी या सी ++ कोड में उल्लिखित एक अलग मॉड्यूल में लिखित असेंबली फ़ंक्शंस प्राप्त करने का कोई तरीका नहीं है।
कोई तरीका नहीं है कि inline
या __forceinline
कीवर्ड कुछ भी कर सकते हैं। असल में, कोई तरीका नहीं है कि आप उन्हें संकलक त्रुटि (या कम से कम एक चेतावनी) के बिना उपयोग कर सकते हैं। इन एनोटेशन को फ़ंक्शन की परिभाषा (जो, इनलाइन फ़ंक्शन के लिए, इसकी घोषणा के समान ही है) पर जाना है, लेकिन आप इसे फ़ंक्शन की परिभाषा पर नहीं डाल सकते हैं, क्योंकि यह एक अलग * .asm फ़ाइल में परिभाषित है। ये एमएएसएम कीवर्ड नहीं हैं, इसलिए उन्हें परिभाषा में जोड़ने की कोशिश करना आवश्यक रूप से एक त्रुटि में होगा। और सी हेडर में असेंबली फ़ंक्शन की अगली घोषणा पर उन्हें समान असफल होने वाला है, क्योंकि वहां कोई कोड नहीं है-बस एक प्रोटोटाइप।
यही कारण है कि माइक्रोसॉफ्ट इंट्रिनिक्स का उपयोग करने की सिफारिश करता है। आप इन्हें सीधे अपने सी या सी ++ कोड में उपयोग कर सकते हैं, और संकलक संबंधित असेंबली कोड को स्वचालित रूप से उत्सर्जित कर देगा। न केवल वांछित इनलाइनिंग को पूरा करता है, बल्कि इंट्रिनिक्स भी ऑप्टिमाइज़र को काम करने की अनुमति देता है, और परिणामों को और बेहतर करता है। नहीं, intrinsics सही कोड का नेतृत्व नहीं करते हैं, और सबकुछ के लिए आंतरिक नहीं हैं, लेकिन माइक्रोसॉफ्ट के कंपाइलर के साथ यह सबसे अच्छा है।
आपका एकमात्र अन्य विकल्प सी/सी ++ कोड के विभिन्न क्रमपरिवर्तनों के साथ बैठना और खेलना है जब तक कि आप वांछित ऑब्जेक्ट कोड उत्पन्न करने के लिए कंपाइलर प्राप्त न करें।यह उन मामलों में बहुत शक्तिशाली हो सकता है जहां आप जिन निर्देशों को उत्पन्न करना चाहते हैं, उनके लिए इंट्रिनिक्स उपलब्ध नहीं हैं, लेकिन इसमें बिगड़ने में बहुत समय लगता है, और आपको यह सुनिश्चित करने के लिए फिर से जाना होगा कि यह आपके द्वारा जारी रखा जाता है जब आप कंपाइलर संस्करणों को अपग्रेड करते हैं तो चाहते हैं।
क्या आपने कंपाइलर इंट्रिनिक्स के माध्यम से खोज की है? यह मौका हो सकता है, कि कुछ ऐसा है, जिसमें 'my_asm_func' की कार्यक्षमता शामिल है। आम तौर पर, कंपाइलर के साथ अपनी स्वयं की असेंबली इनलाइन को मिलाकर बहुत अनुकूलन (अनुकूलन के स्तर के आधार पर) काम करने के लिए मुश्किल हो सकता है, इसके रखरखाव का उल्लेख नहीं करना। –
नहीं, संभव नहीं है। कुछ कारणों से यह [एक समान प्रश्न का उत्तर] देखें (http://stackoverflow.com/a/5542379/597607)। –