Вы ожидаете, что он развернет цикл до 1000 nop
с? Я сделал быстрый тест с gcc
, и я не вижу, чтобы (один) nop
исчез:
xorl %eax, %eax
.p2align 4,,7
.L2:
#APP
nop
#NO_APP
addl $1, %eax
cmpl $1000, %eax
jne .L2
С gcc -S -O3 -funroll-all-loops
Я вижу, что он развернул цикл 8 раз (таким образом, 8 nop
), но я думаю, что если вы хотите 1000, это будет проще всего сделать:
#define NOP10() asm("nop;nop;nop;nop;nop;nop;nop;nop;nop;nop")
А затем используйте NOP10(); ...