Plan 9 from Bell Labs’s /sys/src/ape/lib/ap/riscv64/main9.new.s

Copyright © 2021 Plan 9 Foundation
Distributed under the MIT License.
Download the Plan 9 distribution.


/* assume vlong alignment of SP */

#define NPRIVATES	16
#define FCSR		3

GLOBL	_tos(SB), $XLEN
GLOBL	_privates(SB), $XLEN
GLOBL	_nprivates(SB), $4

TEXT	_main(SB), 1, $(4*XLEN + NPRIVATES*XLEN)
	MOV	$setSB(SB), R3
	MOV	R0, CSR(FCSR)

	/* _tos = arg */
	MOV	R8, _tos(SB)

	MOV	$NPRIVATES, R9
	MOVW	R9, _nprivates(SB)
	MOV	$p-(NPRIVATES*XLEN)(SP), R9
	MOV	R9, _privates(SB)

	/* save inargc & inargv before _envsetup */
	MOVW	inargc-XLEN(FP), R8	/* argc */
	MOV	R8, (R9)		/* private storage on stack */
	MOV	$inargv+0(FP), R8
	MOV	R8, XLEN(R9)		/* private storage on stack */

	JAL	R1, _envsetup(SB)	/* may trash any register above R7 */

	/* exit(main(argc, argv, environ)); */
	MOV	_privates(SB), R9
	MOVW	(R9), R8		/* argc */
	MOVW	R8, XLEN(SP)
	MOV	XLEN(R9), R10
	MOV	R10, (2*XLEN)(SP)	/* argv */
	MOV	environ(SB), R10
	MOV	R10, (3*XLEN)(SP)	/* environ */
	JAL	R1, main(SB)

	JAL	R1, exit(SB)
	RET

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@plan9.bell-labs.com.