bgt
pseudolyszt.net obejmuje bgt i inne instrukcje RISC-V w większych szczegółach.
Opis
bgt to rozgałęzienie, które następuje, gdy jedna wartość jest większa od drugiej. Jego nazwa oznacza branch if greater than (rozgałęzienie, jeśli większe niż). Poniższa instrukcja skacze do etykiety, gdy rs1 jest ściśle większe od rs2, porównując je jako wartości ze znakiem.
bgt rs1, rs2, label
Żadne z sześciu podstawowych rozgałęzień RISC-V nie sprawdza, czy jest większe niż. To, czy a jest większe od b, to to samo pytanie co to, czy b jest mniejsze od a przy zamienionych operandach. bgt to pseudoinstrukcja, a asembler przepisuje ją jako blt z odwróconymi operandami. Sprzęt pozostaje prostszy, a porównanie nadal można zapisać w kierunku, który czyta się naturalnie. Bazowe rozgałęzienie mniejsze-niż opisano w blt.
Sięgnij po bgt, gdy warunek czyta się naturalnie w tym kierunku, na przykład aby wykonać skok, gdy wartość przekracza maksimum, gdy długość jest większa niż przeznaczona dla niej przestrzeń, albo przy wyborze większej z dwóch ścieżek.
Podręcznik RISC-V podaje, że bgt, bgtu, ble i bleu można zsyntetyzować, odwracając operandy do blt, bltu, bge i bgeu.
Ściśle to słowo kluczowe. bgt nie wykonuje rozgałęzienia, gdy obie wartości są równe. Aby uwzględnić także równe wartości, użyj bge, które rozgałęzia się przy większe lub równe. Błędy o jeden w pętlach i sprawdzeniach zwykle wynikają z tego rozróżnienia. Porównanie jest ze znakiem. Dla danych bez znaku ta sama zamiana dotyczy bltu.
Rozwija się do
blt rs2, rs1, label
Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.
Przykład
li t0, 5 li t1, 2 bgt t0, t1, done # 5 > 2, so jump to 'done'
