bltu
lyszt.net bltu और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।
एन्कोडिंग प्रारूप
विवरण
bltu वही शाखा निष्पादित करता है जो blt करता है, लेकिन दोनों रजिस्टरों को अहस्ताक्षरित (unsigned) के रूप में पढ़ता है। यह नाम branch if less than, unsigned का संक्षिप्त रूप है। शाखा तब ली जाती है जब rs1, rs2 से कम हो, और दोनों मानों को 0 से लगभग 4 अरब तक की गैर-ऋणात्मक संख्याओं के रूप में पढ़ा जाता है। blt पृष्ठ स्वयं शाखा का वर्णन करता है। यह पृष्ठ बताता है कि अहस्ताक्षरित पठन का अपना अलग निर्देश क्यों है।
वही 32 बिट्स अलग-अलग संख्याओं को निरूपित करते हैं, यह इस पर निर्भर करता है कि शीर्ष बिट को चिह्न के रूप में पढ़ा जाता है या मान के भाग के रूप में। blt बिट्स को हस्ताक्षरित (signed) के रूप में पढ़ता है और bltu उन्हें अहस्ताक्षरित के रूप में पढ़ता है, और दोनों पठन असहमत होते हैं। सभी बिट्स 1 पर सेट वाला रजिस्टर blt के लिए -1 है, एक बहुत छोटा मान, और bltu के लिए सबसे बड़ा संभव मान। गलत निर्देश चुनने पर बिना किसी त्रुटि संदेश के गलत उत्तर मिलता है।
bltu हर उस चीज़ के लिए उपयुक्त है जो ऋणात्मक नहीं हो सकती, जैसे मेमोरी पते, आकार, गणनाएँ और स्थितियाँ। पतों की तुलना हस्ताक्षरित blt से करना तब विफल हो जाता है जब कोई पता इतना बड़ा हो जाए कि उसका शीर्ष बिट सेट हो जाए, क्योंकि हस्ताक्षरित पठन उसे ऋणात्मक बना देता है।
RISC-V मैनुअल इसी रेंज जाँच का उल्लेख करता है। हस्ताक्षरित ऐरे बाउंड को एक ही bltu से जाँचा जा सकता है, क्योंकि कोई भी ऋणात्मक इंडेक्स किसी भी गैर-ऋणात्मक बाउंड से बड़ा तुलना करता है।
एक ही bltu जाँचता है कि कोई इंडेक्स रेंज में है, कम से कम 0 और आकार n से कम।
bltu i, n, ok
यदि i ऋणात्मक है, तो उसका अहस्ताक्षरित पठन एक बहुत बड़ी संख्या होती है और परीक्षण विफल हो जाता है, इसलिए एक अहस्ताक्षरित तुलना बहुत बड़े और ऋणात्मक दोनों मामलों को पकड़ लेती है।
उदाहरण
li t0, 1 li t1, -1 bltu t0, t1, done # t1 read as unsigned is huge, so jump to 'done'
