Cette version(j'ai enlevé les structures pour pouvoir compiler):
void add_timer()
{
unsigned long flags;
spin_lock_irqsave(flags);
if (!timer_pending()) {
internal_add_timer();
spin_unlock_irqrestore(flags);
} else {
spin_unlock_irqrestore(flags);
printk("bug: kernel timer added twice at %p.\n",
__builtin_return_address(0));
}
}
produit la même sortie en assembleur que la version avec goto. Gcc est utilisé comme ça:
gcc -march=athlon-tbird -S -O2 t.c
Par contre comme ça:
gcc -S -O2 t.c
Il y a une ligne bizarre de plus qui semble inutile dans la version non goto:
addl 16,ドル %esp
movl %ebp, %esp
Voila, bien sûr ça peut être différent sur une autre architecture.
La balise blockquote marche pas, ou bien?
[^] # Re: Découvrez la communauté PHP
Posté par wmaker . En réponse à la dépêche Découvrez la communauté PHP. Évalué à 9.
Cette version(j'ai enlevé les structures pour pouvoir compiler): void add_timer() { unsigned long flags; spin_lock_irqsave(flags); if (!timer_pending()) { internal_add_timer(); spin_unlock_irqrestore(flags); } else { spin_unlock_irqrestore(flags); printk("bug: kernel timer added twice at %p.\n", __builtin_return_address(0)); } } produit la même sortie en assembleur que la version avec goto. Gcc est utilisé comme ça: gcc -march=athlon-tbird -S -O2 t.c Par contre comme ça: gcc -S -O2 t.c Il y a une ligne bizarre de plus qui semble inutile dans la version non goto: addl 16,ドル %esp movl %ebp, %esp Voila, bien sûr ça peut être différent sur une autre architecture. La balise blockquote marche pas, ou bien?