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:
- The front end reads the source code and builds a parse tree.
- The parse tree is used to generate an RTL insn list based on named instruction patterns.
- 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.