Index: test/fpu/sse1/test.c
===================================================================
--- test/fpu/sse1/test.c	(revision 8fe379b5e8cfba710a9a77b943fc5f4ad82bb8a8)
+++ test/fpu/sse1/test.c	(revision 8f2153be63f6407e45f93d58a8ffff855f01cc0b)
@@ -45,5 +45,5 @@
 static waitq_t can_start;
 
-static void testit(void *data)
+static void testit1(void *data)
 {
 	int i;
@@ -75,4 +75,34 @@
 }
 
+static void testit2(void *data)
+{
+	int i;
+	volatile long long j;
+	double e,d,le,f;
+	int arg __attribute__((aligned(16))) = (int)((__native) data);
+	int after_arg __attribute__((aligned(16)));
+	
+	waitq_sleep(&can_start);
+
+	for (i = 0; i<ATTEMPTS; i++) {
+		__asm__ volatile (
+			"movlpd	%0, %%xmm2"
+			:"=m"(arg)
+			);
+
+		scheduler();
+		__asm__ volatile (
+			"movlpd %%xmm2, %0"
+			:"=m"(after_arg)
+			);
+		
+		if(arg != after_arg)
+			panic("tid%d: arg(%d) != %d\n", 
+			      THREAD->tid, arg, after_arg);
+	}
+
+	atomic_inc(&threads_ok);
+}
+
 
 void test(void)
@@ -86,9 +116,13 @@
 	printf("Creating %d threads... ", THREADS);
 
-	for (i=0; i<THREADS; i++) {  
-		if (!(t = thread_create(testit, (void *)((__native)i), TASK, 0)))
+	for (i=0; i<THREADS/2; i++) {  
+		if (!(t = thread_create(testit1, (void *)((__native)i*2), TASK, 0)))
+			panic("could not create thread\n");
+		thread_ready(t);
+		if (!(t = thread_create(testit2, (void *)((__native)i*2+1), TASK, 0)))
 			panic("could not create thread\n");
 		thread_ready(t);
 	}
+
 	printf("ok\n");
 	
