GCC генерирует плохой код?

Ключи:
-m64 -ffreestanding -nostdlib -mcmodel=large -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -pedantic


Такие обычно рекомендуют для разработки ядра. Игрался с ключами, не помогло.

Простая заготовка:
inline thread_t* schedule(thread_t* current, tss_t* tss) {
	tss->rsp[0] = sizeof(x86_64_state_t)+(uint64_t)current;
	return current;
}


превращается в:
0000000000000000 <schedule>:
   0:	55                   	push   %rbp
   1:	48 89 e5             	mov    %rsp,%rbp
   4:	48 89 7d f8          	mov    %rdi,-0x8(%rbp)
   8:	48 89 75 f0          	mov    %rsi,-0x10(%rbp)
   c:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  10:	48 8d 90 b0 01 00 00 	lea    0x1b0(%rax),%rdx
  17:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
  1b:	48 89 50 04          	mov    %rdx,0x4(%rax)
  1f:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  23:	5d                   	pop    %rbp
  24:	c3                   	retq


Во первых не инлайнит, но ладно. Это же можно написать в три строки с одним обращением к памяти. Может я не знаю какого-то волшебного ключа, или это GCC так оптимизирует. Можно такие места переписать на ассемблере, но все же хочется что-то от компилятора добиться.
  • Вопрос задан
  • 4333 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
turboNOMAD
@turboNOMAD
Ознакомьтесь:
gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Вообще, документация самого GCC — намного более надежный источник информации, чем неназванные дяди, которые что-то там «обычно рекомендуют».
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы