Перейдя через главу 3 этой книги под названием Архитектура компьютерных систем: перспектива программиста, говорится, что реализация типа
testl %eax, %eax
cmovne (%eax), %edx
неверно, потому что, если предсказание терпит неудачу, у нас будет NULL разыменование. Также указано, что мы должны использовать код ветвления.
Тем не менее, не будет ли использование условных переходов привести к одному результату? Например:
.L1:
jmp *%eax
testl %eax, %eax
jne .L1
Можно ли обмануть gcc для вывода чего-то подобного для x86-32? Предположим, у меня есть массив указателей на функции, некоторые из которых действительны, а некоторые нет, и я называю каждый из них не NULL.