self.executeTitle = 'Skeinforge a file...'
def getPyPyExe(self):
+ if platform.system() == "Windows":
+ checkSSE2exe = os.path.dirname(os.path.abspath(__file__)) + "/checkSSE2.exe"
+ if os.path.exists(checkSSE2exe):
+ if subprocess.call(checkSSE2exe) != 0:
+ print "*****************************************************"
+ print "* Your CPU is lacking SSE2 support, cannot use PyPy *"
+ print "*****************************************************"
+ return False
if platform.system() == "Windows":
pypyExe = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../pypy/pypy.exe"));
else:
#add Skeinforge
cp -a SkeinPyPy ${TARGET_DIR}/SkeinPyPy
+#Add the SSE2 check if we can build it
+if [ $BUILD_TARGET = "win32" ]; then
+ WINCC=`whereis i386-mingw32-gcc`
+ if [ "$WINCC" != "" ]; then
+ make -C checkSSE2 CC=${WINCC} TARGET=checkSSE2.exe
+ cp checkSSE2/checkSSE2.exe ${TARGET_DIR}/SkeinPyPy
+ fi
+fi
+
#add printrun
mv Printrun ${TARGET_DIR}/Printrun
--- /dev/null
+CC ?= gcc
+TARGET ?= checkSSE2
+
+$(TARGET): main.c
+ $(CC) -o $(TARGET) main.c -Os
+
--- /dev/null
+#include <stdlib.h>
+#include <stdio.h>
+
+//Read CPU flags, and return 0 if we support SSE2, else return 1
+//See: http://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
+
+int main(int argc, char** argv)
+{
+ int features;
+
+ //Read the CPU features.
+ asm("mov $1, %%eax\n"
+ "cpuid\n"
+ "mov %%edx, %0"
+ : "=r"(features) : : "%eax", "%edx", "%ecx");
+
+ //Check bit 26, this indicates SSE2 support
+ if (features & (1 << 26))
+ return 0;
+ return 1;
+}
\ No newline at end of file