xref: /minix3/lib/libc/arch/powerpc/sys/sbrk.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc/*	$NetBSD: sbrk.S,v 1.13 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: sbrk.S,v 1.13 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)
112fe8fb19SBen Gras
122fe8fb19SBen Gras#ifdef WEAK_ALIAS
132fe8fb19SBen GrasWEAK_ALIAS(sbrk, _sbrk)
142fe8fb19SBen Gras#endif
152fe8fb19SBen Gras
162fe8fb19SBen GrasENTRY(_sbrk)
1784d9c625SLionel Sambuc#ifdef __PIC__
18*0a6a1f1dSLionel Sambuc	mflr	%r0
19*0a6a1f1dSLionel Sambuc	bcl	20,31,.LPIC0
20*0a6a1f1dSLionel Sambuc.LPIC0:	mflr	%r5
21*0a6a1f1dSLionel Sambuc	mtlr	%r0
22*0a6a1f1dSLionel Sambuc	addis	%r8,%r5,(_C_LABEL(__curbrk)-.LPIC0)@ha
23*0a6a1f1dSLionel Sambuc	ldptru	%r6,(_C_LABEL(__curbrk)-.LPIC0)@l(%r8)
242fe8fb19SBen Gras#else
25*0a6a1f1dSLionel Sambuc	lis	%r8,_C_LABEL(__curbrk)@ha
26*0a6a1f1dSLionel Sambuc	ldptru	%r6,_C_LABEL(__curbrk)@l(%r8)	# r6 = old break, r5 = &curbrk
272fe8fb19SBen Gras#endif
282fe8fb19SBen Gras	add	%r3,%r3,%r6
292fe8fb19SBen Gras	mr	%r7,%r3				# r7 = new break
302fe8fb19SBen Gras	_DOSYSCALL(break)			# break(new_break)
312fe8fb19SBen Gras	bso	1f
322fe8fb19SBen Gras	mr	%r3,%r6				# set return value
33*0a6a1f1dSLionel Sambuc	stptr	%r7,0(%r8)			# record new break
342fe8fb19SBen Gras	blr
352fe8fb19SBen Gras1:
36*0a6a1f1dSLionel Sambuc	BRANCH_TO_CERROR()
372fe8fb19SBen GrasEND(_sbrk)
38