Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/alpha/boot/head.S
26426 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* arch/alpha/boot/head.S
4
*
5
* initial bootloader stuff..
6
*/
7
8
#include <asm/pal.h>
9
10
.set noreorder
11
.globl __start
12
.ent __start
13
__start:
14
br $29,2f
15
2: ldgp $29,0($29)
16
jsr $26,start_kernel
17
call_pal PAL_halt
18
.end __start
19
20
.align 5
21
.globl wrent
22
.ent wrent
23
wrent:
24
.prologue 0
25
call_pal PAL_wrent
26
ret ($26)
27
.end wrent
28
29
.align 5
30
.globl wrkgp
31
.ent wrkgp
32
wrkgp:
33
.prologue 0
34
call_pal PAL_wrkgp
35
ret ($26)
36
.end wrkgp
37
38
.align 5
39
.globl switch_to_osf_pal
40
.ent switch_to_osf_pal
41
switch_to_osf_pal:
42
subq $30,128,$30
43
.frame $30,128,$26
44
stq $26,0($30)
45
stq $1,8($30)
46
stq $2,16($30)
47
stq $3,24($30)
48
stq $4,32($30)
49
stq $5,40($30)
50
stq $6,48($30)
51
stq $7,56($30)
52
stq $8,64($30)
53
stq $9,72($30)
54
stq $10,80($30)
55
stq $11,88($30)
56
stq $12,96($30)
57
stq $13,104($30)
58
stq $14,112($30)
59
stq $15,120($30)
60
.prologue 0
61
62
stq $30,0($17) /* save KSP in PCB */
63
64
bis $30,$30,$20 /* a4 = KSP */
65
br $17,1f
66
67
ldq $26,0($30)
68
ldq $1,8($30)
69
ldq $2,16($30)
70
ldq $3,24($30)
71
ldq $4,32($30)
72
ldq $5,40($30)
73
ldq $6,48($30)
74
ldq $7,56($30)
75
ldq $8,64($30)
76
ldq $9,72($30)
77
ldq $10,80($30)
78
ldq $11,88($30)
79
ldq $12,96($30)
80
ldq $13,104($30)
81
ldq $14,112($30)
82
ldq $15,120($30)
83
addq $30,128,$30
84
ret ($26)
85
1: call_pal PAL_swppal
86
.end switch_to_osf_pal
87
88
.align 3
89
.globl tbi
90
.ent tbi
91
tbi:
92
.prologue 0
93
call_pal PAL_tbi
94
ret ($26)
95
.end tbi
96
97
.align 3
98
.globl halt
99
.ent halt
100
halt:
101
.prologue 0
102
call_pal PAL_halt
103
.end halt
104
105
/* $16 - new stack page */
106
.align 3
107
.globl move_stack
108
.ent move_stack
109
move_stack:
110
.prologue 0
111
lda $0, 0x1fff($31)
112
and $0, $30, $1 /* Stack offset */
113
or $1, $16, $16 /* New stack pointer */
114
mov $30, $1
115
mov $16, $2
116
1: ldq $3, 0($1) /* Move the stack */
117
addq $1, 8, $1
118
stq $3, 0($2)
119
and $0, $1, $4
120
addq $2, 8, $2
121
bne $4, 1b
122
mov $16, $30
123
ret ($26)
124
.end move_stack
125
126