Nazdar,
mám procesor Intel Pentium G860 který podle dokumentace podporuje MMX technologii. Když sem to však testoval pomocí CPUID instrukce, vypadla na mne 0 (prej nepodporuje). Zkusil sem zkusmo hodit nějakou MMX instrukci do kódu a vše šlapalo. Zajímalo by mne zdali je to bug a nebo má chyba.
#include <stdio.h>
#include <stdlib.h>
#define EAX 1
#define EBX 2
#define ECX 3
#define EDX 4
int CPUinf(int leaf,int bitIndex,int registerToMine);
int main()
{
printf("%d",CPUinf(1,23,EDX));
printf("\n");
return 0;
}
a samotný ASM kód funkce :
// CPUinf
.globl CPUinf
CPUinf:
push r8
mov eax , edi
mov r8d , 1
cpuid
cmp rdx , 1
je A
cmp rdx , 2
je B
cmp rdx , 3
je C
cmp rdx , 4
je D
A:
bt eax , esi
jmp end
B:
bt ebx , esi
jmp end
C:
bt ecx , esi
jmp end
D:
bt edx , esi
jmp end
end:
cmovc eax , r8d
mov r8d , 0
cmovnc eax , r8d
pop r8
ret
// end
BTW -> kompilujte to s 64 bit GCC, jinak neručím za funkčnost (z důvodu volací konvence).