다음을 통해 공유


OPTION AVXENCODING

AVX 명령의 기본 인코딩을 선택합니다.

구문

OPTION AVXENCODING:선택

배경

Intel AVX 및 AVX-512 지침은 다른 Intel 아키텍처 지침과 다르게 인코딩됩니다. 명령 접두사 바이트 및 opcode 리드인 바이트를 사용하여 명령을 선택하는 대신 단일 멀티바이트 접두사를 사용합니다. 이 접두사는 추가 레지스터 피연산자를 인코딩할 수 있습니다. 64비트 모드에서는 다른 피연산자에 대해 레지스터 8~15를 선택하는 비트도 있으며 REX 접두사는 필요하지 않습니다.

세 가지 멀티 바이트 접두사를 사용합니다. AVX 명령은 3바이트 VEX 접두사로 인코딩할 수 있습니다. 여기서 두 번째 및 세 번째 바이트는 실행된 특정 작업을 선택하는 데 도움이 됩니다. 3 바이트 VEX 접두사에 있는 일부 필드에 특정 값이 있는 경우 VEX 접두사 2 바이트 형식을 대신 사용할 수 있습니다. 마지막으로, 일부 AVX 명령에는 AVX-512 양식도 있으며 4 바이트 EVEX 접두사로 인코딩됩니다. EVEX 접두사에는 512비트 벡터 길이 및 AVX-512 지침과 관련된 기타 옵션을 선택하는 추가 필드가 있습니다.

일부 AVX 지침은 최대 세 가지 방법으로 인코딩될 수 있으므로 사용할 양식을 선택하는 규칙이 있습니다. 지시 OPTION AVXENCODING 문은 사용할 규칙 집합을 선택하는 데 사용됩니다.

기본 설정

기본 설정 인코딩 기본 설정 우선 순위
PREFER_FIRST 가능한 경우 첫 번째 정의된 양식을 사용합니다.
PREFER_VEX 인코딩을 기본 설정으로 사용하여 VEX 인코딩합니다 EVEX .
PREFER_VEX3 인코딩에 기본 설정으로 3 바이트 VEX 인코딩을 EVEX 사용합니다.
PREFER_EVEX 인코딩을 기본 설정으로 사용하여 EVEX 인코딩합니다 VEX .
NO_EVEX 를 사용하여 EVEX인코딩하지 마세요.

AVXENCODING 순서는 명령 접두사 양식이 명령에 대해 지정되지 않은 경우에만 적용됩니다. 명령 접두사를 명시적으로 코딩하면 옵션보다 AVXENCODING 우선합니다. 예를 들어 지정된 evex vpmaddwd 경우에도 OPTION AVXENCODING:no_EVEX -prefixed VPMADDWD 를 사용합니다EVEX.

어셈블리 원본이 인코딩 기본 설정을 PREFER_FIRST 선택하는 데 사용하지 OPTION AVXENCODING 않는 경우 규칙은 기본적으로 사용됩니다. 이러한 규칙에 따라 MASM(Microsoft Macro Assembler)에 추가된 가장 빠른 명령 인코딩이 우선하며, 이러한 가능성 중에는 가장 짧은 접두사 형식의 인코딩이 선호됩니다. 이러한 규칙은 나중에 새 명령 양식이 추가될 경우 MASM에서 어셈블된 코드가 동일한 개체 코드를 계속 생성하도록 합니다.

규칙은 PREFER_VEX 인코딩 VEX 을 시도하기 전에 항상 접두사로 인코딩 EVEX하려고 시도합니다. 가능하면 3 바이트 형식 대신 2 바이트 형식 VEX 이 사용됩니다.

기본 설정은 PREFER_VEX3 항상 인코딩을 시도하기 전에 3 바이트 VEX 접두사로 EVEX인코딩하려고 시도합니다. 2 바이트 형식은 VEX 사용되지 않습니다.

PREFER_EVEX 옵션은 항상 접두사를 EVEX 사용하여 인코딩을 시도하며 명령에 AVX-512 양식이 없는 경우에만 사용 VEX 하려고 합니다.

기본 설정은 NO_EVEX 접두사를 사용하여 VEX 인코딩하려고 합니다. AVX-512 명령 양식은 허용되지 않습니다. 이 옵션을 사용하면 AVX-512가 전혀 지원되지 않는 플랫폼에서 사용할 코드를 어셈블할 수 있습니다.

OPTION AVXENCODING 지시문은 Visual Studio 2019 버전 16.7 이상에서 사용할 수 있습니다.

예시

이 예제에서는 VPDPBUSD VPMADDWD 옵션의 작동 방식을 AVXENCODING 보여 줍니다. VPDPBUSD는 AVX-512 지원 VPMADDWD 없이 플랫폼에 대해 VEX로 인코딩된 형식으로 처음 정의EVEX되었으며 AVX 및 AVX-512로 확장되었습니다. 예제 어셈블의 목록 출력은 모드 변경이 AVXENCODING 각 명령에 대해 생성된 개체 코드에 미치는 영향을 보여 줍니다. 각 명령의 접두사는 '/"로 끝납니다.

 00000000  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000006  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:no_EVEX
 0000000A  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 0000000F  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX
 00000013  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000018  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX3
 0000001C  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000021  C4 E1 69/ F5 CB        vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_EVEX
 00000026  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 0000002C  62 F1 6D 08/ F5        vpmaddwd xmm1, xmm2, xmm3
           CB

                                  option avxencoding:prefer_first
 00000032  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000038  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

참고 항목

옵션(MASM)
지시문 참조