|
>CpuInfoX64 ディレクトリには cpuid.asm が入っているように、readmsr, writemsr, rdtsc に対応する命令があるにもかかわらず何故か cpuid に対応する命令がない!?
>
ん、これじゃないの?
何で、頭に "__temp"なんてのがついているか判りませんが。
最適化 /Og(Free Buildのデフォ)を指定すると第2パラメータが消失するようだし、
これも 何れなくなるのかな?
-----
; 391 : ULONG dwEAX;
; 392 : ULONG dwREGs[4];
; 393 :
; 394 : dwEAX = 1; // 適当な数字
00023 c7 44 24 18 01
00 00 00 mov DWORD PTR dwEAX$[rsp], 1
; 395 : __temp_cpuid(&dwREGs[0], dwEAX);
0002b 8b 44 24 18 mov eax, DWORD PTR dwEAX$[rsp] <- 消失します。
0002f 0f a2 cpuid
00031 44 8b c3 mov r8d, ebx
00034 4c 8d 4c 24 08 lea r9, QWORD PTR dwREGs$[rsp]
00039 41 89 01 mov DWORD PTR [r9], eax
0003c 48 8d 44 24 08 lea rax, QWORD PTR dwREGs$[rsp]
00041 44 89 40 04 mov DWORD PTR [rax+4], r8d
00045 48 8d 44 24 08 lea rax, QWORD PTR dwREGs$[rsp]
0004a 89 48 08 mov DWORD PTR [rax+8], ecx
0004d 48 8d 44 24 08 lea rax, QWORD PTR dwREGs$[rsp]
00052 89 50 0c mov DWORD PTR [rax+12], edx
----
>この問題には 64bit 化に取り掛かかり始めたときに結構苦労しています。百歩譲ってインラインアセンブラが使えないのはいいとしても、書き方が昔(386)とだいぶ違うので難儀しました。
>
同感です。せっかくレジスタが増えたのに・・
ml64.exe も多言語とインターフェリス周りを含めてイマイチだし
|
|