다른게 아니라 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)