bgeu
lyszt.net obejmuje bgeu i inne instrukcje RISC-V w większych szczegółach.
Format kodowania
Opis
bgeu to wersja bge bez znaku i przeciwieństwo bltu. Nazwa oznacza branch if greater than or equal, unsigned (skok, jeśli większe lub równe, bez znaku). Skacze do etykiety, gdy rs1 jest co najmniej równe rs2, przy czym oba są odczytywane jako liczby nieujemne. Zobacz bge dla samego porównania i bltu dla tego, co zmienia brak znaku.
Z bgeu rodzina liczy sześć rozgałęzień. Są trzy pytania: równość, mniejsze niż oraz większe lub równe, a dwa ostatnie występują w wersji ze znakiem i bez znaku. beq i bne sprawdzają równość, blt i bge porównują wartości ze znakiem, a bltu i bgeu porównują wartości bez znaku. Te sześć, wraz z zamianą operandów dla kierunków większe niż oraz mniejsze lub równe, pokrywa każde porównanie potrzebne programowi.
bgeu nadaje się do ograniczeń na wielkości, które nie mogą być ujemne. Przykłady to wyjście z pętli, gdy pozycja osiągnie koniec, odrzucenie indeksu, który osiągnął rozmiar tablicy, oraz skok do procedury obsługi, gdy długość osiągnie pojemność. Porównywanie adresów pamięci używa bltu i bgeu, ponieważ adresy są bez znaku, a wersje ze znakiem dają tam błędne wyniki.
Podręcznik RISC-V mówi, że granice tablicy ze znakiem można sprawdzić pojedynczym rozgałęzieniem bez znaku, ponieważ każdy ujemny indeks porównuje się jako większy od każdej nieujemnej granicy. bgeu i bltu to dwie formy tego sprawdzenia.
Poniższa linia wykonuje połączone sprawdzenie granic w jednej instrukcji.
bgeu i, n, error
Wychwytuje indeks, który jest zbyt duży lub ujemny, ponieważ ujemny indeks jest odczytywany jako ogromna wartość bez znaku i nie przechodzi testu.
Przykład
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
