以下は、次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コマンドをリストします。
説明する
直接バイト値に基づいて最初と2番目のソースオペランドから選択して、2つの4ワードキャリーなし乗算を実行します。ビッ
したがって、PCLMULのサポートを見るとき、これはPCLMULQDQの略語であると仮定します。 2つの64ビットレジスタを使用して2つの64ビットレジスタを乗算した結果を格納する代わりに、結果は128ビットレジスタに格納されます。したがって、名前はキャリーフリー乗算です。他の命令は2つの異なるレジスタを使用して結果を格納し、アセンブリプログラマはプログラムで使用される最終結果を特定するために追加の手順を実行する必要があります。ただし、キャリーのない乗算の場合、結果はより大きなレジスタに格納されます。この命令(PCLMULQDQ)では、2つの64ビット数を掛けた結果が128ビットレジスタに格納されます。この命令は、CPUでも使用できる128ビットXMMレジスタを使用します。