You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/04/24 14:05:56 UTC

svn commit: r531893 - in /harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared: mkernel.cpp mkernel.h

Author: varlax
Date: Tue Apr 24 05:05:54 2007
New Revision: 531893

URL: http://svn.apache.org/viewvc?view=rev&rev=531893
Log:
Documented CPUID::isSSE2Supported and fixed IPF compilation

Modified:
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.cpp
    harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.h

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.cpp?view=diff&rev=531893&r1=531892&r2=531893
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.cpp Tue Apr 24 05:05:54 2007
@@ -190,24 +190,28 @@
 #endif    
 }
 
-
+#if defined(_EM64T_)
 bool CPUID::isSSE2Supported() {
-//uncomment to test on SSE2 PC:
-//  if (true) return false;
-#if defined (_EM64T_) || defined(_IA64_)
     return true;
-#else
-
+}
+#elif defined(_IA32_) //older IA-32
+bool CPUID::isSSE2Supported() {
+    /*
+     * cpuid instruction: 
+     * - takes 0x1 on eax,
+     * - returns standard features flags in edx, bit 26 is SSE2 flag
+     * - clobbers ebx, ecx
+     */
     unsigned int fflags =0;
 #ifdef _WIN32
     __asm {
-        mov    eax, 0x1  //returns standard features flags in edx, bit 26 is SSE2 flag
+        mov    eax, 0x1
         cpuid
         mov    fflags, edx
     };
-#elif PLATFORM_POSIX
+#elif defined (__linux__)
     unsigned int stub;
-
+    //ebx must be restored for -fPIC
      __asm__ __volatile__ (
             "push %%ebx; cpuid; mov %%ebx, %%edi; pop %%ebx" :
                 "=a" (stub),
@@ -215,12 +219,11 @@
                 "=c" (stub),
                 "=d" (fflags) : "a" (0x1));
 #else
-#error 0  
+#error "Need assembly code to query CPUID on this platform"
 #endif
     bool res = ((fflags & (1<<26))!=0);
     return res;
-
-#endif
 }
+#endif //older IA-32
 
 }; // ~namespace Jitrino

Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.h?view=diff&rev=531893&r1=531892&r2=531893
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/shared/mkernel.h Tue Apr 24 05:05:54 2007
@@ -574,7 +574,10 @@
 class CPUID {
     CPUID(){}
 public:
+#if defined(_IA32_) || defined(_EM64T_)
+    /** SSE2 is an extension of the IA-32 architecture, since 2000. */
     static bool isSSE2Supported();
+#endif
 };
 
 }; // ~namespace Jitrino