Qual é mais rápido: if (bool) ou if (int)?

Qual valor é melhor usar? Booleano verdadeiro ou inteiro 1?

O tópico acima me fez fazer algumas experiências combool eint emif condição. Por curiosidade, escrevi este programa:

int f(int i) 
{
    if ( i ) return 99;   //if(int)
    else  return -99;
}
int g(bool b)
{
    if ( b ) return 99;   //if(bool)
    else  return -99;
}
int main(){}

g++ intbool.cpp -S gera código asm para cada função da seguinte maneira:

asm code forf(int)

__Z1fi:
   LFB0:
         pushl  %ebp
   LCFI0:
          movl  %esp, %ebp
   LCFI1:
          cmpl  $0, 8(%ebp)
          je    L2
          movl  $99, %eax
          jmp   L3
   L2:
          movl  $-99, %eax
   L3:
          leave
   LCFI2:
          ret

asm code forg(bool)

__Z1gb:
   LFB1:
          pushl %ebp
   LCFI3:
          movl  %esp, %ebp
   LCFI4:
          subl  $4, %esp
   LCFI5:
          movl  8(%ebp), %eax
          movb  %al, -4(%ebp)
          cmpb  $0, -4(%ebp)
          je    L5
          movl  $99, %eax
          jmp   L6
   L5:
          movl  $-99, %eax
   L6:
          leave
   LCFI6:
          ret

urpreendentemente,g(bool) gera maisasm instruções! Isso significa queif(bool) é um pouco mais lento queif(int)? Eu costumava pensarbool foi especialmente projetado para ser usado em declarações condicionais, comoif, então eu estava esperandog(bool) para gerar menos instruções asm, tornandog(bool) mais eficiente e rápido.

EDITAR

Não estou usando nenhum sinalizador de otimização a partir de agora. Mas mesmo na ausência dela, por que gera mais asm parag(bool) é uma pergunta para a qual estou procurando uma resposta razoável. Também devo lhe dizer que-O2 flag de otimização gera exatamente o mesmo ASM. Mas essa não é a questão. A pergunta é o que eu perguntei.

questionAnswers(8)

yourAnswerToTheQuestion