t's a bit embarrasing that some of this was undone until recently, but we now
[reactos.git] / reactos / boot / freeldr / freeldr / arch / powerpc / boot.s
1 .section ".text"
2 .extern PpcInit
3 .globl _start
4 .globl call_ofw
5 _start:
6 sync
7 isync
8
9 lis %r1,stackend@ha
10 addi %r1,%r1,stackend@l
11
12 /* Store ofw call addr */
13 mr %r21,%r5
14 lis %r10,ofw_call_addr@ha
15 stw %r5,ofw_call_addr@l(%r10)
16
17 bl zero_registers
18
19 /* Zero CTR */
20 mtcr %r31
21
22 lis %r3,PpcInit@ha
23 addi %r3,%r3,PpcInit@l
24 mtlr %r3
25
26 /* Check for ofw */
27 lis %r3,ofw_call_addr@ha
28 lwz %r3,ofw_call_addr@l(%r3)
29 cmpw %r3,%r31 /* Zero? */
30 mr %r3,%r31
31 beq initfp
32
33 lis %r3,call_ofw@ha
34 addi %r3,%r3,call_ofw@l
35 b bootme
36
37 initfp:
38 /* Enabling FP at this point won't hurt, and the varargs scheme we're
39 * using now requires it. */
40 mfmsr %r0
41 ori %r0,%r0,8192
42 mtmsr %r0
43
44 bootme:
45 blr
46
47 zero_registers:
48 xor %r2,%r2,%r2
49 mr %r0,%r2
50 mr %r3,%r2
51
52 mr %r4,%r2
53 mr %r5,%r2
54 mr %r6,%r2
55 mr %r7,%r2
56
57 mr %r8,%r2
58 mr %r9,%r2
59 mr %r10,%r2
60 mr %r11,%r2
61
62 mr %r12,%r2
63 mr %r13,%r2
64 mr %r14,%r2
65 mr %r15,%r2
66
67 mr %r12,%r2
68 mr %r13,%r2
69 mr %r14,%r2
70 mr %r15,%r2
71
72 mr %r16,%r2
73 mr %r17,%r2
74 mr %r18,%r2
75 mr %r19,%r2
76
77 mr %r20,%r2
78 mr %r21,%r2
79 mr %r22,%r2
80 mr %r23,%r2
81
82 mr %r24,%r2
83 mr %r25,%r2
84 mr %r26,%r2
85 mr %r27,%r2
86
87 mr %r28,%r2
88 mr %r29,%r2
89 mr %r30,%r2
90 mr %r31,%r2
91
92 blr
93
94 ofw_memory_size:
95 .long 0
96 .long 0
97 .long 0
98 .long 0
99
100 .align 4
101 stack:
102 .space 0x4000
103 stackend:
104 .long 0,0,0,0
105
106 .globl _bss
107 .section ".bss2"
108 _bss:
109 .long 0
110
111 .align 4