xref: /plan9/sys/src/libc/mips/main9p.s (revision 76a51bbfeb38f900d220158ac11ead554452ed25)
180ee5cbfSDavid du Colombier#define NPRIVATES	16
280ee5cbfSDavid du Colombier
380ee5cbfSDavid du ColombierTEXT	_mainp(SB), 1, $(16 + NPRIVATES*4)
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier	MOVW	$setR30(SB), R30
6*76a51bbfSDavid du Colombier	/* _tos = arg */
7e288d156SDavid du Colombier	MOVW	R1, _tos(SB)
880ee5cbfSDavid du Colombier
980ee5cbfSDavid du Colombier	MOVW	$p-64(SP), R1
1080ee5cbfSDavid du Colombier	MOVW	R1, _privates(SB)
1180ee5cbfSDavid du Colombier	MOVW	$NPRIVATES, R1
1280ee5cbfSDavid du Colombier	MOVW	R1, _nprivates(SB)
1380ee5cbfSDavid du Colombier
14*76a51bbfSDavid du Colombier	/* _profmain(); */
153e12c5d1SDavid du Colombier	JAL	_profmain(SB)
16*76a51bbfSDavid du Colombier	/* _tos->prof.pp = _tos->prof.next; */
17*76a51bbfSDavid du Colombier	MOVW	_tos(SB), R1
18*76a51bbfSDavid du Colombier	MOVW	4(R1), R2
19*76a51bbfSDavid du Colombier	MOVW	R2, 0(R1)
20*76a51bbfSDavid du Colombier	/* main(argc, argv); */
213e12c5d1SDavid du Colombier	MOVW	inargc-4(FP), R1
223e12c5d1SDavid du Colombier	MOVW	$inargv+0(FP), R2
233e12c5d1SDavid du Colombier	MOVW	R1, 4(R29)
243e12c5d1SDavid du Colombier	MOVW	R2, 8(R29)
253e12c5d1SDavid du Colombier	JAL	main(SB)
263e12c5d1SDavid du Colombierloop:
273e12c5d1SDavid du Colombier	MOVW	$exits<>(SB), R1
283e12c5d1SDavid du Colombier	MOVW	R1, 4(R29)
293e12c5d1SDavid du Colombier	JAL	exits(SB)
303e12c5d1SDavid du Colombier	MOVW	$_profin(SB), R0	/* force loading of profile */
313e12c5d1SDavid du Colombier	JMP	loop
323e12c5d1SDavid du Colombier
333e12c5d1SDavid du ColombierTEXT	_savearg(SB), 1, $0
343e12c5d1SDavid du Colombier	RET
353e12c5d1SDavid du Colombier
363e12c5d1SDavid du ColombierTEXT	_callpc(SB), 1, $0
373e12c5d1SDavid du Colombier	MOVW	argp-4(FP), R1
383e12c5d1SDavid du Colombier	RET
393e12c5d1SDavid du Colombier
403e12c5d1SDavid du ColombierDATA	exits<>+0(SB)/4, $"main"
413e12c5d1SDavid du ColombierGLOBL	exits<>+0(SB), $5
42