GCC는 비트 테스트(x86 BT)를 생성합니까?

GCC는 비트 테스트(x86 BT)를 생성합니까?

GCC 소스 코드를 검색해 보면 다음과 같은 내용이 보입니다.

BT내 목표는 GCC가 , BTS, BTR를 생성하는지 여부에 관계없이 스스로 답을 찾는 것입니다 BTC. 위의 항목을 시작 BT하고 찾았지만 해당 항목이 어디에 사용되는지 찾을 수 없습니다. GCC는 명령어를 생성합니까 BT?

이 버그 보고서에서이제 해결됐으니 이제 해결됐네요그런데 이 명령은 어디에 표시되나요?

답변1

이 상수는 i386 기계 정의 파일에서 사용됩니다 gcc/config/i386/i386.md.핵심 지시문 자체는 여기에 정의되어 있습니다., 또한 다음과 같은 다양한 조합을 정의합니다.이것ANDBTR.

기계 정의를 사용하는 방법을 알아보려면 다음을 참조하세요.해당 매뉴얼.개요다음 요약을 제공하십시오.

컴파일러에서는 세 가지 주요 변환이 발생합니다.

  1. 프런트 엔드는 소스 코드를 읽고 구문 분석 트리를 구축합니다.
  2. 구문 분석 트리는 명명된 명령어 패턴을 기반으로 RTL insn 목록을 생성하는 데 사용됩니다.
  3. insn 목록은 RTL 템플릿과 일치하여 어셈블리 코드를 생성합니다.

명령어 정의는 두 번째 변환에서 RTL 명령어를 생성하고 세 번째 변환에서 결과 어셈블리 코드를 생성하는 데 사용됩니다.

BT 실행 지침을 보려면:

#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");
    }
  }
}

을 사용하면 -O2GCC btl7.3.1이 생성됩니다.

관련 정보