xref: /minix3/lib/libc/arch/powerpc/sys/brk.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc/*	$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $	*/
22fe8fb19SBen Gras
32fe8fb19SBen Gras#include "SYS.h"
42fe8fb19SBen Gras
52fe8fb19SBen Gras#if defined(LIBC_SCCS) && !defined(lint)
6*0a6a1f1dSLionel Sambuc__RCSID("$NetBSD: brk.S,v 1.14 2014/08/23 02:24:22 matt Exp $")
72fe8fb19SBen Gras#endif /* LIBC_SCCS && !lint */
82fe8fb19SBen Gras
9*0a6a1f1dSLionel Sambuc	.hidden	_C_LABEL(__curbrk)
102fe8fb19SBen Gras	.globl	_C_LABEL(__curbrk)
11*0a6a1f1dSLionel Sambuc	.hidden	_C_LABEL(__minbrk)
122fe8fb19SBen Gras	.globl	_C_LABEL(__minbrk)
132fe8fb19SBen Gras	.globl	_C_LABEL(_end)
142fe8fb19SBen Gras
152fe8fb19SBen Gras#ifdef WEAK_ALIAS
162fe8fb19SBen GrasWEAK_ALIAS(brk, _brk)
172fe8fb19SBen Gras#endif
182fe8fb19SBen Gras
192fe8fb19SBen Gras	.data
20*0a6a1f1dSLionel Sambuc	.p2align 2
212fe8fb19SBen Gras_C_LABEL(__minbrk):
22*0a6a1f1dSLionel Sambuc	.long	_C_LABEL(_end)
23*0a6a1f1dSLionel Sambuc_C_LABEL(__curbrk):
24*0a6a1f1dSLionel Sambuc	.long	_C_LABEL(_end)
252fe8fb19SBen Gras
262fe8fb19SBen GrasENTRY(_brk)
2784d9c625SLionel Sambuc#ifdef __PIC__
28*0a6a1f1dSLionel Sambuc	mflr	%r0
29*0a6a1f1dSLionel Sambuc	bcl	20,31,.LPIC0
30*0a6a1f1dSLionel Sambuc.LPIC0:	mflr    %r9
31*0a6a1f1dSLionel Sambuc	mtlr	%r0
32*0a6a1f1dSLionel Sambuc	addis	%r9,%r9,(_C_LABEL(__minbrk)-.LPIC0)@ha
33*0a6a1f1dSLionel Sambuc	ldptru	%r5,(_C_LABEL(__minbrk)-.LPIC0)@l(%r9)	# r5 = &_end
342fe8fb19SBen Gras#else
35*0a6a1f1dSLionel Sambuc	lis	%r9,_C_LABEL(__minbrk)@ha
36*0a6a1f1dSLionel Sambuc	ldptru	%r5,_C_LABEL(__minbrk)@l(%r9)	# r5 = &_end
372fe8fb19SBen Gras#endif
38*0a6a1f1dSLionel Sambuc	cmpptrl	%r5,%r3			# if (__minbrk <= r3)
39*0a6a1f1dSLionel Sambuc#ifdef __PPC_ISEL__
40*0a6a1f1dSLionel Sambuc	iselgt	%r3,%r5,%r3
41*0a6a1f1dSLionel Sambuc#else
422fe8fb19SBen Gras	bgt	0f
432fe8fb19SBen Gras	mr	%r5,%r3			# r5 = r3
442fe8fb19SBen Gras0:
452fe8fb19SBen Gras	mr	%r3,%r5			# new break value
462fe8fb19SBen Gras#endif
47*0a6a1f1dSLionel Sambuc	_DOSYSCALL(break)		# assume that r5 is preserved
48*0a6a1f1dSLionel Sambuc	bso	1f
49*0a6a1f1dSLionel Sambuc	stptr	%r5,__SIZEOF_POINTER__(%r9)
502fe8fb19SBen Gras	blr				# return 0
512fe8fb19SBen Gras
522fe8fb19SBen Gras1:
53*0a6a1f1dSLionel Sambuc	BRANCH_TO_CERROR()
542fe8fb19SBen GrasEND(_brk)
55