xref: /plan9-contrib/sys/src/libc/amd64/main9p.s (revision 272efad760864ee41cfe633b56aea9b4f5cf3ae7)
1*272efad7SDavid du Colombier#define NPRIVATES	16
2*272efad7SDavid du Colombier
3*272efad7SDavid du ColombierTEXT _mainp(SB), 1, $(2*8+NPRIVATES*8)
4*272efad7SDavid du Colombier	MOVQ	AX, _tos(SB)		/* _tos = arg */
5*272efad7SDavid du Colombier	LEAQ	16(SP), AX
6*272efad7SDavid du Colombier	MOVQ	AX, _privates(SB)
7*272efad7SDavid du Colombier	MOVL	$NPRIVATES, _nprivates(SB)
8*272efad7SDavid du Colombier
9*272efad7SDavid du Colombier	CALL	_profmain(SB)		/* _profmain(); */
10*272efad7SDavid du Colombier
11*272efad7SDavid du Colombier	MOVQ	_tos+0(SB), DX		/* _tos->prof.pp = _tos->prof.next; */
12*272efad7SDavid du Colombier	MOVQ	8(DX), CX
13*272efad7SDavid du Colombier	MOVQ	CX, (DX)
14*272efad7SDavid du Colombier
15*272efad7SDavid du Colombier	MOVL	inargc-8(FP), RARG	/* main(argc, argv); */
16*272efad7SDavid du Colombier	LEAQ	inargv+0(FP), AX
17*272efad7SDavid du Colombier	MOVQ	AX, 8(SP)
18*272efad7SDavid du Colombier	CALL	main(SB)
19*272efad7SDavid du Colombier
20*272efad7SDavid du Colombierloop:
21*272efad7SDavid du Colombier	MOVQ	$_exits<>(SB), RARG
22*272efad7SDavid du Colombier	CALL	exits(SB)
23*272efad7SDavid du Colombier	MOVQ	$_profin(SB), AX	/* force loading of profile */
24*272efad7SDavid du Colombier	JMP	loop
25*272efad7SDavid du Colombier
26*272efad7SDavid du ColombierTEXT	_savearg(SB), 1, $0
27*272efad7SDavid du Colombier	MOVQ	RARG, AX
28*272efad7SDavid du Colombier	RET
29*272efad7SDavid du Colombier
30*272efad7SDavid du ColombierTEXT	_saveret(SB), 1, $0
31*272efad7SDavid du Colombier	RET
32*272efad7SDavid du Colombier
33*272efad7SDavid du ColombierTEXT	_restorearg(SB), 1, $0
34*272efad7SDavid du Colombier	RET				/* we want RARG in RARG */
35*272efad7SDavid du Colombier
36*272efad7SDavid du ColombierTEXT	_callpc(SB), 1, $0
37*272efad7SDavid du Colombier	MOVQ	8(RARG), AX
38*272efad7SDavid du Colombier	RET
39*272efad7SDavid du Colombier
40*272efad7SDavid du ColombierDATA	_exits<>+0(SB)/4, $"main"
41*272efad7SDavid du ColombierGLOBL	_exits<>+0(SB), $5
42