2015-03-21 4 views
5

मैं एलएलवीएम के इनलाइन एएसएम के बारे में एक परियोजना में काम कर रहा हूं, लेकिन मैं एएसएम ऑपरेटरों के बारे में एक समस्या को पूरा करता हूं। उदाहरण के लिए, मैं इस तरह कोड है:llvm इनलाइन एएसएम ऑपरेटिंग प्रकार कैसे प्राप्त करें?

int a; 
int b; 
asm("nop": "=r"(a), "r"(b), "g"(30)); 

मैं LLVM :: InlineAssembly :: getAsmString() फ़ंक्शन का उपयोग कर एएसएम स्ट्रिंग प्राप्त कर सकते हैं "nop", और मैं भी LLVM का उपयोग कर की कमी "rr शिशु मृत्यु दर" जानकारी प्राप्त कर सकते हैं: : InlineAsm :: ParseConstraints फ़ंक्शन मान को फ़ंक्शन और पुन: सक्रिय करते हैं। लेकिन मेरा सवाल यह है कि मैं एएसएम ऑपरेटिंग जानकारी नहीं प्राप्त कर सकता, विशेष रूप से एएसएम ऑपरेटरों प्रकार (एक पूर्णांक प्रकार है, बी इंटरजर प्रकार है, 30 निरंतर int है)।

तो क्या किसी को पता है कि एएसएम ऑपरेटिंग जानकारी प्राप्त करने का कोई तरीका है?

उत्तर

0

LLVM में, InlineAsmValue का एक उपवर्ग है, और संबद्ध मान हमेशा प्रकार की है सूचक करने वाली समारोह। उस मेक-अप फ़ंक्शन की सामग्री एएसएम कोड ही है।

तो ऑपरेटर के प्रकारों को प्राप्त करने के लिए आप इसका विश्लेषण करने के लिए एक सूचक के साथ ही विश्लेषण करते हैं। आपके पास एक आसान FunctionType *InlineAsm::getFunctionType() const है जो आधा काम करता है।

शेष आउटपुट तर्क और FunctionType::params() प्राप्त करने के लिए या इनपुट तर्क प्राप्त करने के लिए Type * FunctionType::getReturnType() बाकी है।

संबंधित मुद्दे