diff --git a/SkeinPyPy/skeinforge_application/skeinforge.py b/SkeinPyPy/skeinforge_application/skeinforge.py index 33279a9..9afb64e 100755 --- a/SkeinPyPy/skeinforge_application/skeinforge.py +++ b/SkeinPyPy/skeinforge_application/skeinforge.py @@ -579,6 +579,14 @@ class SkeinforgeRepository: 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: diff --git a/build.sh b/build.sh index 675b5b8..5240d64 100755 --- a/build.sh +++ b/build.sh @@ -110,6 +110,15 @@ fi #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 diff --git a/checkSSE2/Makefile b/checkSSE2/Makefile new file mode 100644 index 0000000..02d7b57 --- /dev/null +++ b/checkSSE2/Makefile @@ -0,0 +1,6 @@ +CC ?= gcc +TARGET ?= checkSSE2 + +$(TARGET): main.c + $(CC) -o $(TARGET) main.c -Os + diff --git a/checkSSE2/main.c b/checkSSE2/main.c new file mode 100644 index 0000000..9c66aa9 --- /dev/null +++ b/checkSSE2/main.c @@ -0,0 +1,21 @@ +#include +#include + +//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