summaryrefslogtreecommitdiff
path: root/sys/src/libc/alpha/getfcr.s
blob: 06df5de98ff6975bd5c53f956c98a5a301cafe1b (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
#define	EXCB	WORD	$0x60000400		/* until 7a/7l catch up */

TEXT	getfsr(SB), $8
	EXCB
	MOVT	FPCR, F0
	EXCB
	MOVT	F0, tmp-8(SP)
	MOVL	tmp-4(SP), R1
	MOVQ	$0x01e00000, R2
	AND		R2, R1, R0
	RET

TEXT	setfsr(SB), $8
	MOVQ	$0x01e00000, R2
	EXCB
	MOVT	FPCR, F0
	EXCB
	MOVT	F0, tmp-8(SP)
	MOVL	tmp-4(SP), R1
	ANDNOT	R2, R1, R3
	AND		R2, R0, R4
	OR		R3, R4, R5
	MOVL	R5, tmp-4(SP)
	MOVT	tmp-8(SP), F0
	EXCB
	MOVT	F0, FPCR
	EXCB
	RET

TEXT	getfcr(SB), $8
	EXCB
	MOVT	FPCR, F0
	EXCB
	MOVT	F0, tmp-8(SP)
	MOVL	tmp-4(SP), R1
	MOVQ	$0x700c0000, R2
	AND		R2, R1, R0
	XOR		R2, R0
	RET

TEXT	setfcr(SB), $8
	MOVQ	$0x700c0000, R2
	XOR		R2, R0
	EXCB
	MOVT	FPCR, F0
	EXCB
	MOVT	F0, tmp-8(SP)
	MOVL	tmp-4(SP), R1
	ANDNOT	R2, R1, R3
	AND		R2, R0, R4
	OR		R3, R4, R5
	MOVL	R5, tmp-4(SP)
	MOVT	tmp-8(SP), F0
	EXCB
	MOVT	F0, FPCR
	EXCB
	RET