Blame view

kernel/linux-rt-4.4.41/arch/alpha/boot/head.S 1.76 KB
5113f6f70   김현기   kernel add
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
  /*
   * 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