Borland C++ Builder FAQ - Определение набора расширенных инструкций поддерживающий процессором

ОГЛАВЛЕНИЕ


Определение набора расширенных инструкций поддерживающий процессором

// Введите следующий код:
Memo1->Lines->Add("Поддерживаемые инструкции:");

DWORD brt; bool AMD,MMX; __asm
{
    mov eax,1
    cpuid
    mov brt,edx
}
if(brt&(1<<23))
{
    MMX=true;
    Memo1->Lines->Add("MMX");
}
if(brt&(1<<25))
{
    if(brt&(1<<24))
    {
        __try
        {
            __asm xorps xmm0, xmm0
            Memo1->Lines->Add("SSE");
        }
        __except(EXCEPTION_EXECUTE_HANDLER){}
       
        if(brt&(1<<26))
        {
            __try
            {
                __asm xorpd xmm0,xmm0
                Memo1->Lines->Add("SSE2");
            } __except(EXCEPTION_EXECUTE_HANDLER){}
        }
    }
}

__asm
{
    mov eax,0x80000000
    cpuid
    cmp eax,0x80000000
    jc notamd
    mov eax,0x80000001
    cpuid
    mov brt,edx
    mov AMD,1
    notamd:
}

if(AMD)
if((MMX)&&(brt&(1<<31)))
Memo1->Lines->Add("3DNOW!");