fence
lyszt.net fence और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
विवरण
FENCE निर्देशों का उपयोग डिवाइस I/O और मेमोरी एक्सेस को क्रमबद्ध करने के लिए किया जाता है, जैसा कि अन्य RISC-V हार्ट्स और बाहरी डिवाइस या कोप्रोसेसर द्वारा देखा जाता है। डिवाइस इनपुट (I), डिवाइस आउटपुट (O), मेमोरी रीड्स (R), और मेमोरी राइट्स (W) का कोई भी संयोजन इन्हीं के किसी भी संयोजन के संबंध में क्रमबद्ध किया जा सकता है। अनौपचारिक रूप से, कोई भी अन्य RISC-V हार्ट या बाहरी डिवाइस FENCE से पहले के predecessor सेट में किसी भी ऑपरेशन से पहले FENCE के बाद के successor सेट में किसी भी ऑपरेशन को नहीं देख सकता। memorymodel RISC-V मेमोरी कंसिस्टेंसी मॉडल का सटीक विवरण प्रदान करता है।
FENCE निर्देश हार्ट द्वारा किए गए मेमोरी रीड्स और राइट्स को भी क्रमबद्ध करते हैं, जैसा कि बाहरी डिवाइस द्वारा किए गए मेमोरी रीड्स और राइट्स द्वारा देखा जाता है। हालाँकि, FENCE निर्देश किसी अन्य सिग्नलिंग तंत्र का उपयोग करके बाहरी डिवाइस द्वारा किए गए इवेंट्स के अवलोकनों को क्रमबद्ध नहीं करते हैं।
EEI यह परिभाषित करेगा कि कौन से I/O ऑपरेशन संभव हैं, और विशेष रूप से, लोड और स्टोर निर्देशों द्वारा एक्सेस किए जाने पर कौन से मेमोरी पते क्रमशः मेमोरी रीड्स और राइट्स के बजाय डिवाइस इनपुट और डिवाइस आउटपुट ऑपरेशन के रूप में माने और क्रमबद्ध किए जाएंगे। उदाहरण के लिए, मेमोरी-मैप्ड I/O डिवाइस आमतौर पर अनकैश्ड लोड और स्टोर के साथ एक्सेस किए जाएंगे जो R और W बिट्स के बजाय I और O बिट्स का उपयोग करके क्रमबद्ध होते हैं। इंस्ट्रक्शन-सेट एक्सटेंशन नए I/O निर्देशों का भी वर्णन कर सकते हैं जो FENCE निर्देश में I और O बिट्स का उपयोग करके क्रमबद्ध किए जाएंगे।
Fence मोड एन्कोडिंग
FENCE मोड फ़ील्ड fm FENCE निर्देश की सिमैंटिक्स को परिभाषित करता है। एक FENCE (fm=0000 के साथ) अपने predecessor सेट में सभी मेमोरी ऑपरेशन्स को अपने successor सेट में सभी मेमोरी ऑपरेशन्स से पहले क्रमबद्ध करता है।
एक FENCE.TSO निर्देश fm=1000, predecessor=RW, और successor=RW के साथ FENCE निर्देश के रूप में एन्कोड किया जाता है। FENCE.TSO अपने predecessor सेट में सभी लोड ऑपरेशन्स को अपने successor सेट में सभी मेमोरी ऑपरेशन्स से पहले क्रमबद्ध करता है, और अपने predecessor सेट में सभी स्टोर ऑपरेशन्स को अपने successor सेट में सभी स्टोर ऑपरेशन्स से पहले क्रमबद्ध करता है। यह FENCE.TSO's predecessor सेट में non-AMO स्टोर ऑपरेशन्स को इसके successor सेट में non-AMO लोड्स के साथ अक्रमबद्ध छोड़ देता है।
FENCE निर्देशों में अप्रयुक्त फ़ील्ड्स--rs1 and rd--भविष्य के एक्सटेंशन्स में बारीक-दाने वाले fences के लिए आरक्षित हैं। फ़ॉरवर्ड कम्पैटिबिलिटी के लिए, बेस इम्प्लीमेंटेशन्स इन फ़ील्ड्स को अनदेखा करेंगे#, और मानक सॉफ़्टवेयर इन फ़ील्ड्स को शून्य करेगा। इसी तरह, कई fm और predecessor/successor सेट सेटिंग्स भी भविष्य के उपयोग के लिए आरक्षित हैं। बेस इम्प्लीमेंटेशन्स ऐसे सभी आरक्षित कॉन्फ़िगरेशन्स को FENCE निर्देशों (fm=0000 के साथ) के रूप में मानेंगे, और मानक सॉफ़्टवेयर केवल गैर-आरक्षित कॉन्फ़िगरेशन्स का उपयोग करेगा।