fence
يغطي lyszt.net fence وتعليمات RISC-V الأخرى بمزيد من التفصيل.
الوصف
تُستخدم تعليمات FENCE لترتيب إدخال/إخراج الأجهزة ووصولات الذاكرة كما تراها قلوب RISC-V الأخرى والأجهزة الخارجية أو المعالجات المساعدة. يمكن ترتيب أي مجموعة من إدخال الجهاز (I) وإخراج الجهاز (O) وقراءات الذاكرة (R) وكتابات الذاكرة (W) بالنسبة إلى أي مجموعة من نفس العناصر. بشكل غير رسمي، لا يمكن لأي قلب RISC-V آخر أو جهاز خارجي ملاحظة أي عملية في مجموعة successor التالية لـ FENCE قبل أي عملية في مجموعة predecessor السابقة لـ FENCE. يوفر memorymodel وصفًا دقيقًا لنموذج اتساق ذاكرة RISC-V.
ترتب تعليمات FENCE أيضًا قراءات وكتابات الذاكرة التي يقوم بها القلب كما تُلاحظ من خلال قراءات وكتابات الذاكرة التي يقوم بها جهاز خارجي. ومع ذلك، لا ترتب تعليمات FENCE ملاحظات الأحداث التي يقوم بها جهاز خارجي باستخدام أي آلية إشارة أخرى.
ستحدد EEI عمليات الإدخال/الإخراج الممكنة، وعلى وجه الخصوص، عناوين الذاكرة التي عند الوصول إليها بواسطة تعليمات التحميل والتخزين ستُعامَل وتُرتَّب كعمليات إدخال الجهاز وإخراج الجهاز على التوالي بدلاً من قراءات وكتابات الذاكرة. على سبيل المثال، عادةً ما يتم الوصول إلى أجهزة الإدخال/الإخراج المعيّنة للذاكرة باستخدام تحميلات وتخزينات غير مخزّنة مؤقتًا تُرتَّب باستخدام البتتين I و O بدلاً من البتتين R و W. قد تصف امتدادات مجموعة التعليمات أيضًا تعليمات إدخال/إخراج جديدة ستُرتَّب أيضًا باستخدام البتتين I و O في تعليمة FENCE.
ترميز وضع السياج
يحدد حقل وضع FENCE fm دلالات تعليمة FENCE. ترتب FENCE (مع fm=0000) جميع عمليات الذاكرة في مجموعة predecessor الخاصة بها قبل جميع عمليات الذاكرة في مجموعة successor الخاصة بها.
تُرمَّز تعليمة FENCE.TSO كتعليمة FENCE مع fm=1000 وpredecessor=RW وsuccessor=RW. ترتب FENCE.TSO جميع عمليات التحميل في مجموعة predecessor الخاصة بها قبل جميع عمليات الذاكرة في مجموعة successor الخاصة بها، وجميع عمليات التخزين في مجموعة predecessor الخاصة بها قبل جميع عمليات التخزين في مجموعة successor الخاصة بها. هذا يترك عمليات التخزين non-AMO في مجموعة predecessor الخاصة بـ FENCE.TSO's غير مرتبة مع تحميلات non-AMO في مجموعة successor الخاصة بها.
الحقول غير المستخدمة في تعليمات FENCE --rs1 and rd-- محجوزة لسياجات أدق في الامتدادات المستقبلية. للتوافق الأمامي، يجب على التنفيذات الأساسية تجاهل هذه الحقول#، ويجب على البرمجيات القياسية تصفير هذه الحقول. وبالمثل، فإن العديد من إعدادات fm ومجموعات predecessor/successor محجوزة أيضًا للاستخدام المستقبلي. يجب على التنفيذات الأساسية معاملة جميع هذه التكوينات المحجوزة كتعليمات FENCE (مع fm=0000)، ويجب على البرمجيات القياسية استخدام التكوينات غير المحجوزة فقط.