Да. Мы переставляем l oop для выхода снизу, с условной ветвью:
add x22, x0, x0 # i =0
j loopStart
loop: Condition code # Retrieving arr[i] and storing it into register x10
addi x22, x22, 1 # i = i+1
loopStart:
sll x11, x22, 2
add x11, x22, x11
lw x10, 0(x11)
bne x10, x21, loop # Comparing arr[i] to value
exit: ...
Хотя это то же самое количество команд, одна - безусловная ветвь - больше не находится внутри l oop.
Далее мы можем преобразовать l oop в указатели следующим образом:
p=arr;
while (*p != value) p++;
i=p-arr;
Это удалит вычисление индексации внутри l oop.