mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
1.8 KiB
124 lines
1.8 KiB
/* 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
|
|
|