summaryrefslogtreecommitdiff
path: root/emu/Plan9/asm-arm.s
blob: a6fbc071e2a5d67c16621df8d50f2d60e55114d1 (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
/* for VFP */
#define VMRS(fp, cpu) WORD $(0xeef00a10 | (fp)<<16 | (cpu)<<12) /* FP → arm */
#define VMSR(cpu, fp) WORD $(0xeee00a10 | (fp)<<16 | (cpu)<<12) /* arm → FP */

#define Fpscr 1

	TEXT	tramp(SB), 1, $0
	MOVW	fn+4(FP), R1		/* func to exec */
	MOVW	arg+8(FP), R2		/* argument */
	SUB	$8, R0			/* new stack */
	MOVW	R0, SP
	MOVW	R2, R0
	BL	(R1)

	MOVW	$0, R0
	BL	_exits(SB)
	RET

	TEXT	vstack(SB), 1, $0
	MOVW	ustack(SB), SP
	BL		exectramp(SB)
	RET

	TEXT	FPsave(SB), 1, $0
	VMRS(Fpscr, 1)
	MOVW	R1, 0(R0)
	RET

	TEXT	FPrestore(SB), 1, $0
	MOVW	(R0), R0
	VMSR(0, Fpscr)
	RET