bgeu

bgeu

تجميع RISC-V مرجع

يغطي lyszt.net bgeu وتعليمات RISC-V الأخرى بمزيد من التفصيل.

تنسيق الترميز

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

الوصف

bgeu هو النسخة غير المُوقَّعة من bge وعكس bltu. الاسم يعني branch if greater than or equal, unsigned. يقفز إلى التسمية عندما يكون rs1 أكبر من أو يساوي rs2، مع قراءة كليهما كأعداد غير سالبة. راجع bge للمقارنة وbltu لما تغيّره عدم الإشارة.

مع bgeu تصبح لهذه العائلة ستة فروع. هناك ثلاثة أسئلة: التساوي، وأصغر من، وأكبر من أو يساوي، ويأتي الأخيران بصيغة مُوقَّعة وأخرى غير مُوقَّعة. يختبر beq وbne التساوي، ويقارن blt وbge القيم المُوقَّعة، ويقارن bltu وbgeu القيم غير المُوقَّعة. هذه الستة، مع تبديل المعاملين لاتجاهي أكبر من وأصغر من أو يساوي، تغطي كل مقارنة يحتاجها البرنامج.

يناسب bgeu الحدود المفروضة على كميات لا يمكن أن تكون سالبة. من الأمثلة الخروج من حلقة عندما يبلغ موضع ما النهاية، ورفض فهرس بلغ حجم المصفوفة، والتفرع إلى معالج عندما يبلغ طول ما السعة. تُستخدم bltu وbgeu لمقارنة عناوين الذاكرة، لأن العناوين غير مُوقَّعة، وتعطي النسخ المُوقَّعة نتائج خاطئة هناك.

يقول دليل RISC-V إن حدود المصفوفة المُوقَّعة يمكن فحصها بفرع غير مُوقَّع واحد، لأن أي فهرس سالب يُقارَن كأكبر من أي حد غير سالب. وbgeu وbltu هما الصيغتان لهذا الفحص.

ينفذ السطر التالي فحص الحدود المدمج في تعليمة واحدة.

bgeu i, n, error

يلتقط فهرسًا كبيرًا جدًا أو سالبًا، لأن الفهرس السالب يُقرأ كقيمة غير مُوقَّعة ضخمة ويفشل في الاختبار.

مثال

li t0, -1
li t1, 1
bgeu t0, t1, done   # t0 read as unsigned is huge, so jump to 'done'