divu
يغطي lyszt.net divu وتعليمات RISC-V الأخرى بمزيد من التفصيل.
تنسيق الترميز
الوصف
divu تُجري قسمة غير مُوقَّعة. يمكن تفسير البتات الـ32 للسجل بطريقتين. في القراءة المُوقَّعة، تشير البتة العليا إلى عدد سالب، لذا تمثل البتات قيمًا تتراوح من نحو -2 مليار إلى +2 مليار. في القراءة غير المُوقَّعة، لا توجد قيم سالبة، وتعدّ البتات من 0 إلى نحو 4 مليارات. لا تتغير البتات. التفسير وحده هو الذي يتغير.
يعامل div مدخلاته كقيم مُوقَّعة، بينما يعاملها divu كقيم غير مُوقَّعة. قرب الحد الأعلى للنطاق ينتج الاثنان نتائج مختلفة. السجل الذي تكون جميع بتاته مضبوطة على 1 هو -1 بالنسبة إلى div و4,294,967,295 بالنسبة إلى divu.
يناسب divu القيم التي لا يمكن أن تكون سالبة: مواضع المصفوفات، والأحجام بالبايت، وعدد الحلقات، وإحداثيات البكسل. بمجرد أن تتجاوز إحدى هذه القيم نحو 2 مليار، يعيد div المُوقَّع نتائج خاطئة. تُشغَّل البتة العليا، وتجعل القراءة المُوقَّعة القيمة سالبة.
يعرّف دليل RISC-V خارج قسمة القسمة غير المُوقَّعة على صفر بأنه جميع البتات مضبوطة، والباقي بأنه يساوي المقسوم. وفقًا للدليل، لا يمكن أن يحدث تجاوز سعة في القسمة غير المُوقَّعة. جميع البتات مضبوطة هي أكبر عدد غير مُوقَّع، ودوائر القسمة غير المُوقَّعة البسيطة تنتجه من تلقاء نفسها. لهذا اختاره الدليل.
تُعيد القسمة على صفر أكبر قيمة غير مُوقَّعة، مع ضبط جميع البتات. إذا كان المقسوم عليه قوة للعدد اثنين، فإن الإزاحة المنطقية إلى اليمين (srli) تقسم بشكل أسرع. الإزاحة إلى اليمين بمقدار 3 تقسم عددًا غير مُوقَّع على 8.
مثال
li t0, -2 li t1, 2 divu t2, t0, t1 # t2 = 2147483647 (t0 read as unsigned)
