Index: kernel/arch/amd64/include/mm/page.h
===================================================================
--- kernel/arch/amd64/include/mm/page.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/amd64/include/mm/page.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -177,5 +177,5 @@
 #define PFERR_CODE_ID		(1 << 4)
 
-static inline int get_pt_flags(pte_t *pt, size_t i)
+static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
 {
 	pte_t *p = &pt[i];
Index: kernel/arch/amd64/src/cpu/cpu.c
===================================================================
--- kernel/arch/amd64/src/cpu/cpu.c	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/amd64/src/cpu/cpu.c	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -130,5 +130,5 @@
 	CPU->arch.vendor = VendorUnknown;
 	if (has_cpuid()) {
-		cpuid(0, &info);
+		cpuid(INTEL_CPUID_LEVEL, &info);
 
 		/*
@@ -150,5 +150,5 @@
 		}
 				
-		cpuid(1, &info);
+		cpuid(INTEL_CPUID_STANDARD, &info);
 		CPU->arch.family = (info.cpuid_eax >> 8) & 0xf;
 		CPU->arch.model = (info.cpuid_eax >> 4) & 0xf;
Index: kernel/arch/ia32/include/cpu.h
===================================================================
--- kernel/arch/ia32/include/cpu.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/include/cpu.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -50,4 +50,5 @@
 #include <arch/pm.h>
 #include <arch/asm.h>
+#include <arch/cpuid.h>
 
 typedef struct {
@@ -56,4 +57,6 @@
 	unsigned int model;
 	unsigned int stepping;
+	cpuid_feature_info fi;
+
 	tss_t *tss;
 	
Index: kernel/arch/ia32/include/cpuid.h
===================================================================
--- kernel/arch/ia32/include/cpuid.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/include/cpuid.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -63,5 +63,7 @@
 
 struct __cpuid_feature_info {
-	unsigned 			: 23;
+	unsigned      : 11;
+	unsigned sep  :  1;
+	unsigned      : 11;
 	unsigned mmx  :  1;
 	unsigned fxsr :  1;
Index: kernel/arch/ia32/include/mm/page.h
===================================================================
--- kernel/arch/ia32/include/mm/page.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/include/mm/page.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -146,5 +146,5 @@
 #define PFERR_CODE_RSVD		(1 << 3)	
 
-static inline int get_pt_flags(pte_t *pt, size_t i)
+static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
 {
 	pte_t *p = &pt[i];
Index: kernel/arch/ia32/src/boot/boot.S
===================================================================
--- kernel/arch/ia32/src/boot/boot.S	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/src/boot/boot.S	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -85,12 +85,4 @@
 	pse_supported:
 	
-	bt $(INTEL_SEP), %edx
-	jc sep_supported
-	
-		movl $sep_msg, %esi
-		jmp error_halt
-	
-	sep_supported:
-
 #include "vesa_prot.inc"
 
@@ -225,4 +217,2 @@
 	.asciz "Page Size Extension not supported. System halted."
 
-sep_msg:
-	.asciz "SYSENTER/SYSEXIT not supported. System halted."
Index: kernel/arch/ia32/src/cpu/cpu.c
===================================================================
--- kernel/arch/ia32/src/cpu/cpu.c	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/src/cpu/cpu.c	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -92,5 +92,4 @@
 void cpu_arch_init(void)
 {
-	cpuid_feature_info fi;
 	cpuid_extended_feature_info efi;
 	cpu_info_t info;
@@ -102,15 +101,15 @@
 	CPU->fpu_owner = NULL;
 	
-	cpuid(1, &info);
+	cpuid(INTEL_CPUID_STANDARD, &info);
 	
-	fi.word = info.cpuid_edx;
+	CPU->arch.fi.word = info.cpuid_edx;
 	efi.word = info.cpuid_ecx;
 	
-	if (fi.bits.fxsr)
+	if (CPU->arch.fi.bits.fxsr)
 		fpu_fxsr();
 	else
 		fpu_fsr();
 	
-	if (fi.bits.sse) {
+	if (CPU->arch.fi.bits.sse) {
 		asm volatile (
 			"mov %%cr4, %[help]\n"
@@ -122,6 +121,8 @@
 	}
 	
-	/* Setup fast SYSENTER/SYSEXIT syscalls */
-	syscall_setup_cpu();
+	if (CPU->arch.fi.bits.sep) {
+		/* Setup fast SYSENTER/SYSEXIT syscalls */
+		syscall_setup_cpu();
+	}
 }
 
@@ -132,5 +133,5 @@
 	CPU->arch.vendor = VendorUnknown;
 	if (has_cpuid()) {
-		cpuid(0, &info);
+		cpuid(INTEL_CPUID_LEVEL, &info);
 
 		/*
@@ -150,5 +151,5 @@
 			CPU->arch.vendor = VendorIntel;
 		
-		cpuid(1, &info);
+		cpuid(INTEL_CPUID_STANDARD, &info);
 		CPU->arch.family = (info.cpuid_eax >> 8) & 0x0f;
 		CPU->arch.model = (info.cpuid_eax >> 4) & 0x0f;
Index: kernel/arch/ia32/src/proc/scheduler.c
===================================================================
--- kernel/arch/ia32/src/proc/scheduler.c	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/src/proc/scheduler.c	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -61,6 +61,8 @@
 	    SP_DELTA];
 	
-	/* Set kernel stack for CP3 -> CPL0 switch via SYSENTER */
-	write_msr(IA32_MSR_SYSENTER_ESP, kstk);
+	if (CPU->arch.fi.bits.sep) {
+		/* Set kernel stack for CP3 -> CPL0 switch via SYSENTER */
+		write_msr(IA32_MSR_SYSENTER_ESP, kstk);
+	}
 	
 	/* Set kernel stack for CPL3 -> CPL0 switch via interrupt */
Index: kernel/arch/ia32/src/userspace.c
===================================================================
--- kernel/arch/ia32/src/userspace.c	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ia32/src/userspace.c	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -70,6 +70,6 @@
 		"movl %[uarg], %%eax\n"
 		
-		/* %ebx is defined to hold pcb_ptr - set it to 0 */
-		"xorl %%ebx, %%ebx\n"
+		/* %edi is defined to hold pcb_ptr - set it to 0 */
+		"xorl %%edi, %%edi\n"
 		
 		"iret\n"
Index: kernel/arch/mips32/include/mm/page.h
===================================================================
--- kernel/arch/mips32/include/mm/page.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/mips32/include/mm/page.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -141,5 +141,5 @@
 #include <arch/exception.h>
 
-static inline int get_pt_flags(pte_t *pt, size_t i)
+static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
 {
 	pte_t *p = &pt[i];
Index: kernel/arch/ppc32/include/mm/page.h
===================================================================
--- kernel/arch/ppc32/include/mm/page.h	(revision 5f678b1cc94b4f085d978e9abf075070da605a36)
+++ kernel/arch/ppc32/include/mm/page.h	(revision 5a4fef9166269adb2f4c2650c7bbc9f3b70f56ba)
@@ -131,5 +131,5 @@
 #include <arch/interrupt.h>
 
-static inline int get_pt_flags(pte_t *pt, size_t i)
+static inline unsigned int get_pt_flags(pte_t *pt, size_t i)
 {
 	pte_t *p = &pt[i];
