From 8913c8fc142c7b2d45cf17cd6030423d1b3798fb Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 5 Jan 2006 08:17:35 +0000 Subject: [PATCH] Patch from Michael Bonfils to add CPUID support for x86 Solaris. --- src/cpuinfo/SDL_cpuinfo.c | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index c0a00c708..524bfaeb2 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -116,6 +116,36 @@ CPUid by definition. But it's nice to be able to prove it. :) */ mov has_CPUID,1 ; We have CPUID support done: } +#elif defined(__sun) && defined(__x86) + __asm ( +" pushfl \n" +" popl %eax \n" +" movl %eax,%ecx \n" +" xorl $0x200000,%eax \n" +" pushl %eax \n" +" popfl \n" +" pushfl \n" +" popl %eax \n" +" xorl %ecx,%eax \n" +" jz 1f \n" +" movl $1,-8(%ebp) \n" +"1: \n" + ); +#elif defined(__sun) && defined(__amd64) + __asm ( +" pushfq \n" +" popq %rax \n" +" movq %rax,%rcx \n" +" xorl $0x200000,%eax \n" +" pushq %rax \n" +" popfq \n" +" pushfq \n" +" popq %rax \n" +" xorl %ecx,%eax \n" +" jz 1f \n" +" movl $1,-8(%rbp) \n" +"1: \n" + ); #endif return has_CPUID; } @@ -152,6 +182,23 @@ static __inline__ int CPU_getCPUIDFeatures() mov features, edx done: } +#elif defined(__sun) && (defined(__x86) || defined(__amd64)) + __asm( +" movl %ebx,%edi\n" +" xorl %eax,%eax \n" +" cpuid \n" +" cmpl $1,%eax \n" +" jl 1f \n" +" xorl %eax,%eax \n" +" incl %eax \n" +" cpuid \n" +#ifdef __i386 +" movl %edx,-8(%ebp) \n" +#else +" movl %edx,-8(%rbp) \n" +#endif +"1: \n" +" movl %edi,%ebx\n" ); #endif return features; } @@ -186,6 +233,23 @@ static __inline__ int CPU_getCPUIDFeaturesExt() mov features,edx done: } +#elif defined(__sun) && ( defined(__i386) || defined(__amd64) ) + __asm ( +" movl %ebx,%edi\n" +" movl $0x80000000,%eax \n" +" cpuid \n" +" cmpl $0x80000001,%eax \n" +" jl 1f \n" +" movl $0x80000001,%eax \n" +" cpuid \n" +#ifdef __i386 +" movl %edx,-8(%ebp) \n" +#else +" movl %edx,-8(%rbp) \n" +#endif +"1: \n" +" movl %edi,%ebx\n" + ); #endif return features; }