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