125 lines
1.8 KiB
ArmAsm
125 lines
1.8 KiB
ArmAsm
|
/* 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
|