Index: arch/ia32/Makefile.inc
===================================================================
--- arch/ia32/Makefile.inc	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/ia32/Makefile.inc	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -45,5 +45,6 @@
 	arch/drivers/i8259.c \
 	arch/drivers/ega.c \
-	arch/boot/boot.S
+	arch/boot/boot.S \
+	arch/fpu_context.c
 
 
Index: arch/ia32/src/context.s
===================================================================
--- arch/ia32/src/context.s	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/ia32/src/context.s	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -80,22 +80,2 @@
 
 
-fpu_context_save:
-        ret
-
-fpu_context_restore:
-        ret
-
-fpu_lazy_context_save:
-	pushl %eax
-        mov 8(%esp),%eax
-        fxsave (%eax)
-        popl %eax
-        ret
-
-fpu_lazy_context_restore:
-	pushl %eax
-        mov 8(%esp),%eax
-        fxrstor (%eax)
-        popl %eax
-        ret
-
Index: arch/ia32/src/fpu_context.c
===================================================================
--- arch/ia32/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
+++ arch/ia32/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -0,0 +1,63 @@
+/*
+#
+# Copyright (C) 2005 Jakub Vana
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+*/
+
+#include <fpu_context.h>
+
+void fpu_context_save(void)
+{
+}
+
+
+void fpu_context_restore()
+{
+}
+
+
+void fpu_lazy_context_save()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxsave (%eax)
+        popl %eax
+        ret
+*/	
+}
+
+void fpu_lazy_context_restore()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxrstor (%eax)
+        popl %eax
+        ret
+*/	
+}
Index: arch/ia32/src/proc/scheduler.c
===================================================================
--- arch/ia32/src/proc/scheduler.c	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/ia32/src/proc/scheduler.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -32,5 +32,5 @@
 #include <arch.h>
 
-void before_thread_runs(void)
+void before_thread_runs_arch(void)
 {
 	CPU->arch.tss->esp0 = (__address) &THREAD->kstack[THREAD_STACK_SIZE-8];
Index: arch/ia64/Makefile.inc
===================================================================
--- arch/ia64/Makefile.inc	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/ia64/Makefile.inc	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -19,4 +19,7 @@
 	arch/fake.s \
 	arch/putchar.c \
-	arch/context.S \
-	arch/ia64.c
+	arch/ia64.c \
+	arch/fpu_context.c
+	arch/context.S 
+	
+
Index: arch/ia64/src/fake.s
===================================================================
--- arch/ia64/src/fake.s	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/ia64/src/fake.s	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -32,5 +32,5 @@
 .global asm_delay_loop
 .global userspace
-.global before_thread_runs
+.global before_thread_runs_arch
 .global arch_late_init
 .global arch_post_mm_init
@@ -50,5 +50,5 @@
 .global panic
 
-before_thread_runs:
+before_thread_runs_arch:
 userspace:
 calibrate_delay_loop:
Index: arch/ia64/src/fpu_context.c
===================================================================
--- arch/ia64/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
+++ arch/ia64/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -0,0 +1,63 @@
+/*
+#
+# Copyright (C) 2005 Jakub Vana
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+*/
+
+#include <fpu_context.h>
+
+void fpu_context_save(void)
+{
+}
+
+
+void fpu_context_restore()
+{
+}
+
+
+void fpu_lazy_context_save()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxsave (%eax)
+        popl %eax
+        ret
+*/	
+}
+
+void fpu_lazy_context_restore()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxrstor (%eax)
+        popl %eax
+        ret
+*/	
+}
Index: arch/mips/Makefile.inc
===================================================================
--- arch/mips/Makefile.inc	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/mips/Makefile.inc	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -31,3 +31,4 @@
 	arch/mm/frame.c \
 	arch/mm/page.c \
-	arch/mm/tlb.c
+	arch/mm/tlb.c \
+	arch/fpu_context.c
Index: arch/mips/src/fake.s
===================================================================
--- arch/mips/src/fake.s	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/mips/src/fake.s	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -33,7 +33,7 @@
 .global asm_delay_loop
 .global userspace
-.global before_thread_runs
+.global _before_thread_runs_arch
 
-before_thread_runs:
+before_thread_runs_arch:
 userspace:
 calibrate_delay_loop:
Index: arch/mips/src/fpu_context.c
===================================================================
--- arch/mips/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
+++ arch/mips/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -0,0 +1,63 @@
+/*
+#
+# Copyright (C) 2005 Jakub Vana
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+*/
+
+#include <fpu_context.h>
+
+void fpu_context_save(void)
+{
+}
+
+
+void fpu_context_restore()
+{
+}
+
+
+void fpu_lazy_context_save()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxsave (%eax)
+        popl %eax
+        ret
+*/	
+}
+
+void fpu_lazy_context_restore()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxrstor (%eax)
+        popl %eax
+        ret
+*/	
+}
Index: arch/powerpc/Makefile.inc
===================================================================
--- arch/powerpc/Makefile.inc	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ arch/powerpc/Makefile.inc	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -12,3 +12,4 @@
 
 arch_sources= \
-	arch/powerpc.c
+	arch/powerpc.c \
+	arch/fpu_context.c
Index: arch/powerpc/src/fpu_context.c
===================================================================
--- arch/powerpc/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
+++ arch/powerpc/src/fpu_context.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -0,0 +1,63 @@
+/*
+#
+# Copyright (C) 2005 Jakub Vana
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+*/
+
+#include <fpu_context.h>
+
+void fpu_context_save(void)
+{
+}
+
+
+void fpu_context_restore()
+{
+}
+
+
+void fpu_lazy_context_save()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxsave (%eax)
+        popl %eax
+        ret
+*/	
+}
+
+void fpu_lazy_context_restore()
+{
+/*
+	pushl %eax
+        mov 8(%esp),%eax
+        fxrstor (%eax)
+        popl %eax
+        ret
+*/	
+}
Index: include/context.h
===================================================================
--- include/context.h	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ include/context.h	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -31,7 +31,11 @@
 
 #include <typedefs.h>
+#include "fpu_context.h"
+
 
 extern int context_save(context_t *c);
 extern void context_restore(context_t *c) __attribute__ ((noreturn));
 
+
+
 #endif
Index: include/fpu_context.h
===================================================================
--- include/fpu_context.h	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
+++ include/fpu_context.h	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -0,0 +1,11 @@
+
+#ifndef fpu_context_h
+#define fpu_context_h
+
+extern void fpu_context_save(void);
+extern void fpu_context_restore(void);
+extern void fpu_lazy_context_save(void);
+extern void fpu_lazy_context_restore(void);
+
+
+#endif /*fpu_context_h*/
Index: include/proc/scheduler.h
===================================================================
--- include/proc/scheduler.h	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ include/proc/scheduler.h	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -61,4 +61,5 @@
  
 extern void before_thread_runs(void);
+extern void before_thread_runs_arch(void);
 
 #endif
Index: src/proc/scheduler.c
===================================================================
--- src/proc/scheduler.c	(revision c4a5207f05f8398ffc6519019a44b3e5275c72fc)
+++ src/proc/scheduler.c	(revision 0ca6faab9890ef6efb2b277aba7b8ab51cb5ba17)
@@ -55,4 +55,11 @@
 volatile int nrdy;
 
+void before_thread_runs(void)
+{
+	before_thread_runs_arch(); 
+	fpu_context_restore();
+}
+
+
 void scheduler_init(void)
 {
