BOOL32 doStuff() {
return TRUE;
}
НКУ 2,95 для VxWorks 5.x, компиляции приведенного выше кода с -O0
для 32-битных x86, генерируемых следующим кодом:GCC генерирует бесполезные инструкции?
doStuff:
0e9de190: push %ebp
0e9de191: mov %esp,%ebp
308 return TRUE;
0e9de193: mov $0x1,%eax
0e9de198: jmp 0xe9de1a0 <doStuff+16>
312 {
0e9de19a: lea 0x0(%esi),%esi
// The JMP jumps here
0e9de1a0: mov %ebp,%esp
0e9de1a2: pop %ebp
0e9de1a3: ret
Все выглядит нормально, пока инструкции JMP и LEA. Для чего они?
Я предполагаю, что это своего рода выравнивание, но я не уверен в этом.
я сделал бы что-то вроде этого:
doStuff:
0e9de190: push %ebp
0e9de191: mov %esp,%ebp
308 return TRUE;
0e9de193: mov $0x1,%eax
0e9de1XX: mov %ebp,%esp
0e9de1XX: pop %ebp
0e9de1XX: ret
0e9de1XX: fill with lea 0x0, %esi
Какой код вы пишете, который в конечном итоге был переведен в сборку, сгенерированную выше? Вы должны включить эту информацию, чтобы увеличить шансы получить помощь. – ray
Вы скомпилировались с оптимизацией? Какая платформа/ОС? – rubenvb
Добавлена информация, что это поможет – maxbit89