다른게 아니라 MMX명령어셋 인식용의 소스가 있어서 이걸
GCC인라인 어셈블리로 바꿔서 컴파일을 할려고 했는데 플래그 레지스터 조작부에서
걸려버리는군요.
일단 집어넣을 소스는 이것입니다.
unsigned long CheckMMX(void)
{
unsigned long flag = 0;
_asm{
push edx
push ecx
pushfd
pop eax
xor eax, 00200000h
push eax
popfd
pushfd
pop ebx
cmp eax, ebx
jnz non_mmx
mov eax, 0
cpuid
cmp eax, 0
jz non_mmx
mov eax, 1
cpuid
and edx, 00800000h
jz non_mmx
mov flag, 1
non_mmx:
pop ecx
pop edx
}
return(flag);
}
다른부분은 인라인 어셈블리로 다 전환을 했는데
pushfd
popfd
이 두놈에서 걸려버립니다.
플래그레지스터를 스택에 집어넣고 빼는 명령어인데
저대로 써도 안되는데 pushl로 레지스터를
직접 지정하려고해도 플래그레지스터를 GCC인라인 어셈블리에서
뭘로 지정하는지를 모르겠습니다.
구글로 긁어보긴 했습니다만 해당하는 정보를 찾지 못했습니다.
혹시 C함수만으로 MMX명령어셋의 인식 방법이
있거나 GCC인라인 어셈블러상의 플래그 레지스터 조작용 명령어를
아시는 분이 있으시면 답변을 부탁드립니다.
* neolith님에 의해서 게시물 이동되었습니다 (2004-10-10 01:06)