11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * arch/alpha/boot/head.S
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * initial bootloader stuff..
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.set noreorder
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	__start
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	__start
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds__start:
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	br	$29,2f
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds2:	ldgp	$29,0($29)
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	jsr	$26,start_kernel
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	call_pal PAL_halt
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end __start
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 5
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	wrent
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	wrent
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldswrent:
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	call_pal PAL_wrent
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ret ($26)
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end wrent
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 5
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	wrkgp
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	wrkgp
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldswrkgp:
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	call_pal PAL_wrkgp
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ret ($26)
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end wrkgp
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 5
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	switch_to_osf_pal
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	switch_to_osf_pal
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsswitch_to_osf_pal:
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	subq	$30,128,$30
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.frame	$30,128,$26
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$26,0($30)
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$1,8($30)
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$2,16($30)
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$3,24($30)
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$4,32($30)
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$5,40($30)
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$6,48($30)
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$7,56($30)
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$8,64($30)
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$9,72($30)
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$10,80($30)
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$11,88($30)
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$12,96($30)
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$13,104($30)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$14,112($30)
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$15,120($30)
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$30,0($17)	/* save KSP in PCB */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bis	$30,$30,$20	/* a4 = KSP */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	br	$17,1f
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$26,0($30)
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$1,8($30)
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$2,16($30)
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$3,24($30)
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$4,32($30)
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$5,40($30)
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$6,48($30)
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$7,56($30)
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$8,64($30)
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$9,72($30)
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$10,80($30)
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$11,88($30)
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$12,96($30)
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$13,104($30)
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$14,112($30)
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldq	$15,120($30)
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addq	$30,128,$30
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ret ($26)
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1:	call_pal PAL_swppal
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end	switch_to_osf_pal
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 3
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	tbi
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	tbi
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstbi:
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	call_pal PAL_tbi
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ret	($26)
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end tbi
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 3
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	halt
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	halt
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldshalt:
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	call_pal PAL_halt
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end halt
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* $16 - new stack page */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align 3
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	move_stack
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.ent	move_stack
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmove_stack:
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.prologue 0
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	lda	$0, 0x1fff($31)
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	and	$0, $30, $1			/* Stack offset */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	or	$1, $16, $16			/* New stack pointer */
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mov	$30, $1
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mov	$16, $2
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1:	ldq	$3, 0($1)			/* Move the stack */
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addq	$1, 8, $1
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stq	$3, 0($2)
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	and	$0, $1, $4
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	addq	$2, 8, $2
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bne	$4, 1b
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mov	$16, $30
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ret	($26)
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.end move_stack
123