11.14Smatt/*	$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $	*/
21.1Sthorpej
31.1Sthorpej#include "SYS.h"
41.1Sthorpej
51.11Smatt#if defined(LIBC_SCCS) && !defined(lint)
61.14Smatt__RCSID("$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $")
71.11Smatt#endif /* LIBC_SCCS && !lint */
81.11Smatt
91.14Smatt	.hidden	_C_LABEL(__curbrk)
101.5Skleink	.globl	_C_LABEL(__curbrk)
111.14Smatt	.hidden	_C_LABEL(__minbrk)
121.5Skleink	.globl	_C_LABEL(__minbrk)
131.6Skleink	.globl	_C_LABEL(_end)
141.4Stsubai
151.8Skleink#ifdef WEAK_ALIAS
161.8SkleinkWEAK_ALIAS(brk, _brk)
171.8Skleink#endif
181.8Skleink
191.4Stsubai	.data
201.14Smatt	.p2align 2
211.5Skleink_C_LABEL(__minbrk):
221.14Smatt	.long	_C_LABEL(_end)
231.14Smatt_C_LABEL(__curbrk):
241.14Smatt	.long	_C_LABEL(_end)
251.1Sthorpej
261.8SkleinkENTRY(_brk)
271.13Sjoerg#ifdef __PIC__
281.14Smatt	mflr	%r0
291.14Smatt	bcl	20,31,.LPIC0
301.14Smatt.LPIC0:	mflr    %r9
311.14Smatt	mtlr	%r0
321.14Smatt	addis	%r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha
331.14Smatt	ldptru	%r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9)	# r5 = &_end
341.1Sthorpej#else
351.14Smatt	lis	%r9,_C_LABEL(__minbrk)@ha
361.14Smatt	ldptru	%r5,_C_LABEL(__minbrk)@l(%r9)	# r5 = &_end
371.4Stsubai#endif
381.14Smatt	cmpptrl	%r5,%r3			# if (__minbrk <= r3)
391.14Smatt#ifdef __PPC_ISEL__
401.14Smatt	iselgt	%r3,%r5,%r3
411.14Smatt#else
421.1Sthorpej	bgt	0f
431.10Smatt	mr	%r5,%r3			# r5 = r3
441.1Sthorpej0:
451.10Smatt	mr	%r3,%r5			# new break value
461.14Smatt#endif
471.14Smatt	_DOSYSCALL(break)		# assume that r5 is preserved
481.1Sthorpej	bso	1f
491.14Smatt	stptr	%r5,__SIZEOF_POINTER__(%r9)
501.1Sthorpej	blr				# return 0
511.1Sthorpej
521.1Sthorpej1:
531.14Smatt	BRANCH_TO_CERROR()
541.11SmattEND(_brk)
55