Note: has_SIMD is not tested.


------------------------------------
int has_3DNow (void)
{
    __asm__ (
        "pushal \n"
        "pushfl \n"                             
        "popl  %eax \n"
        "movl  %eax,%ecx \n"
        "xorl  $0x00200000,%eax \n"
        "pushl %eax \n"
        "popfl \n"
        "pushfl \n"
        "popl  %eax \n"
        "cmpl  %ecx,%eax \n"
        "jz    NO_CPUID1 \n"

        "movl  $0x80000000,%eax \n"
        "CPUID \n"
        "cmpl  $0x80000000,%eax \n"
        "jbe   NO_EXTENDED_MSR1 \n"

        "movl  $0x80000001,%eax \n"
        "CPUID \n"
        "testl $0x80000000,%edx \n"
        "jz    NO_3DNow1 \n"
        "popal \n"
        "movl  $1,%eax \n"
        "jmp   return1 \n"
"NO_CPUID1: \n"
"NO_EXTENDED_MSR1: \n"
"NO_3DNow1: \n"
        "popal \n"
        "xorl  %eax,%eax \n"
"return1: \n"   
    );
    return;
}    

int has_MMX (void)
{
    __asm__ (
        "pushal \n"
        "pushfl \n"                             
        "popl  %eax \n"
        "movl  %eax,%ecx \n"
        "xorl  $0x00200000,%eax \n"
        "pushl %eax \n"
        "popfl \n"
        "pushfl \n"
        "popl  %eax \n"
        "cmpl  %ecx,%eax \n"
        "jz    NO_CPUID2 \n"

        "movl  $1,%eax \n"
        "CPUID \n"
        "testl $0x800000,%edx \n"
        "jz    NO_MMX2 \n"
        "popal \n"
        "movl  $1,%eax \n"
        "jmp   return2 \n"
"NO_CPUID2: \n"
"NO_MMX2: \n"
        "popal \n"
        "xorl  %eax,%eax \n"
"return2: \n"   
    );
    return;
}    

int has_SIMD (void)
{
    __asm__ (
        "pushal \n"
        "pushfl \n"                             
        "popl  %eax \n"
        "movl  %eax,%ecx \n"
        "xorl  $0x00200000,%eax \n"
        "pushl %eax \n"
        "popfl \n"
        "pushfl \n"
        "popl  %eax \n"
        "cmpl  %ecx,%eax \n"
        "jz    NO_CPUID3 \n"

        "movl  $1,%eax \n"
        "CPUID \n"
        "testl $0x2000000,%edx \n"
        "jz    NO_SIMD3 \n"
        "popal \n"
        "movl  $1,%eax \n"
        "jmp   return3 \n"
"NO_CPUID3: \n"
"NO_SIMD3: \n"
        "popal \n"
        "xorl  %eax,%eax \n"
"return3: \n"   
    );
    return;
}    
-------------------------------------------------------
-- 
Mit freundlichen Grüßen
Frank Klemm
 
eMail | [EMAIL PROTECTED]       home: [EMAIL PROTECTED]
phone | +49 (3641) 64-2721    home: +49 (3641) 390545
sMail | R.-Breitscheid-Str. 43, 07747 Jena, Germany

--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )

Reply via email to