Index: arch/ppc32/loader/Makefile
===================================================================
--- arch/ppc32/loader/Makefile	(revision 1b08233a24b3fdbf15b8aa22006b5f8b6e6c0aea)
+++ arch/ppc32/loader/Makefile	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -54,4 +54,5 @@
 	ofw.c \
 	printf.c \
+	asm.S \
 	boot.S
 
Index: arch/ppc32/loader/asm.S
===================================================================
--- arch/ppc32/loader/asm.S	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
+++ arch/ppc32/loader/asm.S	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -0,0 +1,153 @@
+#
+# Copyright (C) 2006 Martin Decky
+# 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 "regname.h"
+#include "spr.h"
+
+.text
+
+.global memsetb
+.global memcpy
+.global halt
+.global jump_to_kernel
+
+memsetb:
+	rlwimi r5, r5, 8, 16, 23
+	rlwimi r5, r5, 16, 0, 15
+	
+	addi r14, r3, -4
+	
+	cmplwi 0, r4, 4
+	blt 7f
+	
+	stwu r5, 4(r14)
+	beqlr
+	
+	andi. r15, r14, 3
+	add r4, r15, r4
+	subf r14, r15, r14
+	srwi r15, r4, 2
+	mtctr r15
+	
+	bdz 6f
+	
+	1:
+		stwu r5, 4(r14)
+		bdnz 1b
+	
+	6:
+	
+	andi. r4, r4, 3
+	
+	7:
+	
+	cmpwi 0, r4, 0
+	beqlr
+	
+	mtctr r4
+	addi r6, r6, 3
+	
+	8:
+	
+	stbu r5, 1(r14)
+	bdnz 8b
+	
+	blr
+
+memcpy:
+	srwi. r7, r5, 3
+	addi r6, r3, -4
+	addi r4, r4, -4
+	beq	2f
+	
+	andi. r0, r6, 3
+	mtctr r7
+	bne 5f
+	
+	1:
+	
+	lwz r7, 4(r4)
+	lwzu r8, 8(r4)
+	stw r7, 4(r6)
+	stwu r8, 8(r6)
+	bdnz 1b
+	
+	andi. r5, r5, 7
+	
+	2:
+	
+	cmplwi 0, r5, 4
+	blt 3f
+	
+	lwzu r0, 4(r4)
+	addi r5, r5, -4
+	stwu r0, 4(r6)
+	
+	3:
+	
+	cmpwi 0, r5, 0
+	beqlr
+	mtctr r5
+	addi r4, r4, 3
+	addi r6, r6, 3
+	
+	4:
+	
+	lbzu r0, 1(r4)
+	stbu r0, 1(r6)
+	bdnz 4b
+	blr
+	
+	5:
+	
+	subfic r0, r0, 4
+	mtctr r0
+	
+	6:
+	
+	lbz r7, 4(r4)
+	addi r4, r4, 1
+	stb r7, 4(r6)
+	addi r6, r6, 1
+	bdnz 6b
+	subf r5, r0, r5
+	rlwinm. r7, r5, 32-3, 3, 31
+	beq 2b
+	mtctr r7
+	b 1b
+	
+halt:
+	b halt
+
+jump_to_kernel:
+	mfmsr r4
+	andis. r4, r4, (~MSR_DR | MSR_IR) >> 16
+	mtspr SPRN_SRR0, r3
+	mtspr SPRN_SRR1, r4
+	sync
+	RFI
Index: arch/ppc32/loader/asm.h
===================================================================
--- arch/ppc32/loader/asm.h	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
+++ arch/ppc32/loader/asm.h	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * 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.
+ */
+
+#ifndef __ASM_H__
+#define __ASM_H__
+
+void halt(void) __attribute__((noreturn));
+void jump_to_kernel(void *addr) __attribute__((noreturn));
+
+#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
+
+#endif
Index: arch/ppc32/loader/boot.S
===================================================================
--- arch/ppc32/loader/boot.S	(revision 1b08233a24b3fdbf15b8aa22006b5f8b6e6c0aea)
+++ arch/ppc32/loader/boot.S	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -1,4 +1,4 @@
 #
-# Copyright (C) 2005 Martin Decky
+# Copyright (C) 2006 Martin Decky
 # All rights reserved.
 #
Index: arch/ppc32/loader/main.c
===================================================================
--- arch/ppc32/loader/main.c	(revision 1b08233a24b3fdbf15b8aa22006b5f8b6e6c0aea)
+++ arch/ppc32/loader/main.c	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -30,12 +30,10 @@
 #include "printf.h"
 #include "ofw.h"
+#include "asm.h"
 
 #define KERNEL_LOAD_ADDRESS 0x800000
-#define KERNEL_SIZE ((unsigned int) &_binary_____________kernel_kernel_bin_end - (unsigned int) &_binary_____________kernel_kernel_bin_start)
-
-static void halt(void)
-{
-	while (1);
-}
+#define KERNEL_START &_binary_____________kernel_kernel_bin_start
+#define KERNEL_END &_binary_____________kernel_kernel_bin_end
+#define KERNEL_SIZE ((unsigned int) KERNEL_END - (unsigned int) KERNEL_START)
 
 void bootstrap(void)
@@ -48,5 +46,7 @@
 		halt();
 	}
+	memcpy(addr, KERNEL_START, KERNEL_SIZE);
 	
-	halt();
+	printf("Booting the kernel...\n");
+	jump_to_kernel(addr);
 }
Index: arch/ppc32/loader/regname.h
===================================================================
--- arch/ppc32/loader/regname.h	(revision 1b08233a24b3fdbf15b8aa22006b5f8b6e6c0aea)
+++ arch/ppc32/loader/regname.h	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -27,6 +27,6 @@
  */
 
-#ifndef __ppc32_REGNAME_H__
-#define __ppc32_REGNAME_H__
+#ifndef __REGNAME_H__
+#define __REGNAME_H__
 
 /* Condition Register Bit Fields */
Index: arch/ppc32/loader/spr.h
===================================================================
--- arch/ppc32/loader/spr.h	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
+++ arch/ppc32/loader/spr.h	(revision 5eb84ab5eac9daf9f14f20c74cb2965d9cadb5e1)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2006 Ondrej Palkovsky
+ * 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.
+ */
+
+#ifndef __SPR_H__
+#define __SPR_H__
+
+#define MSR_DR (1<<27)
+#define MSR_IR (1<<26)
+
+#define SPRN_SRR0  0x1a
+#define SPRN_SRR1  0x1b
+
+/* Works for PPC32 */
+#define L1_CACHE_BYTES (1 << 5)
+
+#endif
