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