O GCC gera testes de bit (x86 BT)?

0

Pesquisando a fonte do GCC, vejo coisas como

Meu objetivo é obter uma resposta para mim mesmo se o GCC gerar ou não BT , BTS , BTR e BTC . Comecei com BT e encontrei as coisas acima, mas não consigo encontrar onde elas são usadas. O GCC gera BT instruções?

Parece que a partir deste relatório de bug, desde que foi resolvido, agora , mas onde esta instrução é mostrada?

    
por Evan Carroll 25.09.2018 / 02:46

1 resposta

1

Essas constantes são usadas no arquivo de definição de máquina i386, gcc/config/i386/i386.md ; as instruções básicas são definidas aqui , e uma O número de combinações também é definido, como este AND / BTR one .

Para entender como as definições de máquina são usadas, consulte o manual correspondente . A visão geral fornece o seguinte resumo:

There are three main conversions that happen in the compiler:

  1. The front end reads the source code and builds a parse tree.
  2. The parse tree is used to generate an RTL insn list based on named instruction patterns.
  3. The insn list is matched against the RTL templates to produce assembler code.

Uma definição de instrução é usada para gerar a instrução RTL na segunda conversão e também para produzir o código assembly resultante na terceira conversão.

Para ver as instruções do BT em ação:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  if (argc > 2) {
    int x = atoi(argv[1]);
    int n = atoi(argv[2]);
    if (x & (1 << n)) {
      printf("Set");
    }
  }
}

Com -O2 , que gera btl para mim com o GCC 7.3.1.

    
por 25.09.2018 / 03:46