다음은 다음 flags
에서 가져온 것입니다 /proc/cpuinfo
.
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm
constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf
pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid
sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida
arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
분명히 pclmulqdq
플래그가 있지만 이것이 PCLMUL 명령어 세트 지원을 의미하는지 확실하지 않습니다. 이 플래그가 무엇을 의미하는지, 또는 PCLMUL에 해당하는 플래그가 무엇인지 어떻게 알 수 있나요?
답변1
답변2
Intel 64 IA-32 명령어 세트 참조에는 PCLMUL 명령어 목록이 제공되지 않습니다. 그러나 Intel은 다음과 같이 설명된 PCLMULQDQ 명령을 나열합니다.
설명하다
직접 바이트 값을 기준으로 첫 번째 및 두 번째 소스 피연산자에서 선택하여 두 개의 4워드 캐리 없는 곱셈을 수행합니다. 비트 4와 0은 표 4-13에 따라 사용할 각 피연산자의 64비트 절반을 선택하는 데 사용되며, 직접 바이트의 다른 비트는 무시됩니다(Intel 64 IA-32 명령어 세트 참조, 볼륨 II).
따라서 PCLMUL 지원을 볼 때 이것이 단지 PCLMULQDQ의 약어라고 가정하십시오. 두 개의 64비트 레지스터를 사용하여 두 개의 64비트 레지스터를 곱한 결과를 저장하는 대신 결과는 128비트 레지스터에 저장됩니다. 따라서 이름은 캐리 프리 곱셈입니다. 다른 명령어는 두 개의 서로 다른 레지스터를 사용하여 결과를 저장하며 어셈블리 프로그래머는 프로그램에 사용할 최종 결과를 파악하기 위해 추가 단계를 수행해야 합니다. 그러나 캐리 없는 곱셈의 경우 결과는 더 큰 레지스터에 저장됩니다. 이 명령어(PCLMULQDQ)에서는 두 개의 64비트 숫자를 곱한 결과가 128비트 레지스터에 저장됩니다. 이 명령어는 CPU에서도 사용할 수 있는 128비트 XMM 레지스터를 사용합니다.