summaryrefslogtreecommitdiff
path: root/sys/src/boot/alphapc/l.s
blob: 487be5891a1a0411cd028c8bc639d76730d4a564 (plain)
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
#include "mem.h"
#include "vmspal.h"

#define SP		R30

TEXT	_main(SB), $-8
	MOVQ	$setSB(SB), R29
	MOVQ	$edata(SB), R1
	MOVQ	$end(SB), R2
loop2:
	MOVQ	R31, (R1)
	ADDQ	$8, R1
	CMPUGT	R1, R2, R3
	BEQ	R3, loop2

	JSR	main(SB)

TEXT	firmware(SB), $-8
	CALL_PAL $PALhalt
	MOVQ	$_divq(SB), R31		/* touch _divq etc.; doesn't need to execute */
	MOVQ	$_divl(SB), R31		/* touch _divl etc.; doesn't need to execute */
	RET

TEXT	mb(SB), $-8
	MB
	RET

TEXT	icflush(SB), $-8
	CALL_PAL $PALimb
	RET

TEXT	tlbflush(SB), $-8
	CALL_PAL $PALmtpr_tbia
	RET

TEXT	gendispatch(SB), $-8
	MOVQ	8(FP), R16
	MOVQ	16(FP), R17
	MOVQ	24(FP), R18
	MOVQ	32(FP), R19
	MOVQ	40(FP), R20
	MOVQ	R26, R1
	JSR	(R0)
	MOVQ	R1, R26
	RET					/* 7a bug: should be RET (R1) */

TEXT	rdv(SB), $-8
	MOVQ	(R0), R0
	RET

TEXT	wrv(SB), $-8
	MOVQ	8(FP), R1
	MOVQ	R1, (R0)
	RET

TEXT	ipl(SB), $-8
	CALL_PAL $PALmfpr_ipl
	RET

TEXT	mces(SB), $-8
	CALL_PAL $PALmfpr_mces
	RET

TEXT	setipl(SB), $-8
	MOVQ	R0, R16
	CALL_PAL $PALmtpr_ipl
	RET

TEXT	setmces(SB), $-8
	MOVQ	R0, R16
	CALL_PAL $PALmtpr_mces
	RET

TEXT	ldqp(SB), $-8
	MOVQ	R0, R16
	CALL_PAL $PALldqp
	RET

TEXT	stqp(SB), $-8
	MOVQ	R0, R16
	MOVQ	8(FP), R17
	CALL_PAL $PALstqp
	RET

TEXT	getptbr(SB), $-8
	CALL_PAL $PALmfpr_ptbr
	RET

TEXT	swppal(SB), $-8
	MOVQ	R0, R16			/* which PALcode */
	MOVQ	8(FP), R17		/* new PC */
	MOVQ	16(FP), R18		/* PCBB (physical) */
	MOVQ	24(FP), R19		/* VPTB */
	MOVQ	32(FP), R20		/* new KSP */
	CALL_PAL $PALswppal
	RET

TEXT	pcc_cnt(SB), $-8
	MOVQ	PCC, R1
	MOVL	R1, R0
	RET