##
## vbcc-PowerOpen/WarpOS
##
## _lowlevel.s
## saves the initial system state and implements the lowlevel-exit function
##
## v1.1 29.10.98 phx
##	Initial stack frame is create with a NULL back chain pointer.
##	Keep stack 16-byte-aligned.
## v1.0 08.07.98 phx
##	Deleted definition of @_-symbols. vlink will create them on demand.
##	vbcc-WarpOS is ready for beta stage.
## v0.2 10.03.98 phx
##	Prefix for TOC symbols is "@_" and not "@".
## v0.1 03.03.98 phx
##
	.file	"_lowlevel.s"

	.text
	.sdreg	r2
	.extern	__main


	.align	3
	.global	__ppc_startup
__ppc_startup:
# r3 = argc
# r4 = argv
	stw	r1,init_stk(r2)		# save initial stack pointer
	li	r5,0			# create initial stack frame
	stwu	r5,-32(r1)		# NULL: back chain ends here
	mflr	r0
	stw	r0,8(r1)		# save initial LR
	stwu	r1,-32(r1)
	bl	__main			# call _main(int argc,char *argv[])

# prog. didn't quit by exit, set return code = 0
	li	r3,0

	.type	__ppc_startup,@function
	.size	__ppc_startup,$-__ppc_startup


	.global	__exit
__exit:
# r3 = return code
	lwz	r1,init_stk(r2)
	lwz	r0,-24(r1)
	mtlr	r0
	blr				# return to m68k with rc in r3

	.type	__exit,@function
	.size	__exit,$-__exit


	.tocd
init_stk:
	.long	0
