loadcpu: Added SNB-optimized spinloop.
[utils.git] / loadcpu.c
index ca39f7f..68e0429 100644 (file)
--- a/loadcpu.c
+++ b/loadcpu.c
@@ -4,6 +4,31 @@
 #include <errno.h>
 #include <pthread.h>
 
+static void *spin_snb(void *uu)
+{
+    char __attribute__((aligned(32))) m[2][32];
+    
+    asm("vpxor %%xmm1, %%xmm1, %%xmm1;\n"
+       "vpxor %%xmm2, %%xmm2, %%xmm2;\n"
+       "0:\n"
+       "vmovaps (%0), %%ymm0;\n"
+       "vmovaps %%ymm1, (%1);\n"
+       "vaddps %%ymm1, %%ymm1, %%ymm2\n"
+       "vmulps %%ymm3, %%ymm3, %%ymm4\n"
+       "vmovaps (%0), %%ymm0;\n"
+       "vmovaps %%xmm1, (%1);\n"
+       "vaddps %%ymm1, %%ymm1, %%ymm2\n"
+       "vmulps %%ymm3, %%ymm3, %%ymm4\n"
+       "vmovaps (%0), %%ymm0;\n"
+       "vaddps %%ymm1, %%ymm1, %%ymm2\n"
+       "vmulps %%ymm3, %%ymm3, %%ymm4\n"
+       "jmp 0b;\n"
+       :
+       : "r" (&m[0]), "r" (&m[1])
+       : "rax", "rcx");
+    abort();
+}
+
 static void *spin(void *uu)
 {
     while(1) {