1*0a6a1f1dSLionel Sambuc/* $NetBSD: brk.S,v 1.1 2014/09/03 19:34:26 matt Exp $ */ 2*0a6a1f1dSLionel Sambuc 3*0a6a1f1dSLionel Sambuc#include "SYS.h" 4*0a6a1f1dSLionel Sambuc 5*0a6a1f1dSLionel Sambuc#if defined(LIBC_SCCS) && !defined(lint) 6*0a6a1f1dSLionel Sambuc__RCSID("$NetBSD: brk.S,v 1.1 2014/09/03 19:34:26 matt Exp $") 7*0a6a1f1dSLionel Sambuc#endif /* LIBC_SCCS && !lint */ 8*0a6a1f1dSLionel Sambuc 9*0a6a1f1dSLionel Sambuc .hidden _C_LABEL(__curbrk) 10*0a6a1f1dSLionel Sambuc .hidden _C_LABEL(__minbrk) 11*0a6a1f1dSLionel Sambuc .globl _C_LABEL(__curbrk) 12*0a6a1f1dSLionel Sambuc .globl _C_LABEL(__minbrk) 13*0a6a1f1dSLionel Sambuc .globl _C_LABEL(_end) 14*0a6a1f1dSLionel Sambuc 15*0a6a1f1dSLionel Sambuc#ifdef WEAK_ALIAS 16*0a6a1f1dSLionel SambucWEAK_ALIAS(brk, _brk) 17*0a6a1f1dSLionel Sambuc#endif 18*0a6a1f1dSLionel Sambuc .data 19*0a6a1f1dSLionel Sambuc .p2align 2 20*0a6a1f1dSLionel Sambuc_C_LABEL(__minbrk): 21*0a6a1f1dSLionel Sambuc .long _C_LABEL(_end) 22*0a6a1f1dSLionel Sambuc_C_LABEL(__curbrk): 23*0a6a1f1dSLionel Sambuc .long _C_LABEL(_end) 24*0a6a1f1dSLionel Sambuc 25*0a6a1f1dSLionel Sambuc .text 26*0a6a1f1dSLionel SambucENTRY(_brk) 27*0a6a1f1dSLionel Sambuc#ifdef __PIC__ 28*0a6a1f1dSLionel Sambuc l.or r8,r9,r0 29*0a6a1f1dSLionel Sambuc PIC_GOTSETUP(r7) 30*0a6a1f1dSLionel Sambuc l.or r9,r8,r0 31*0a6a1f1dSLionel Sambuc l.movhi r6,gotoffhi(_C_LABEL(__minbrk)) 32*0a6a1f1dSLionel Sambuc l.ori r6,r6,gotofflo(_C_LABEL(__minbrk)) 33*0a6a1f1dSLionel Sambuc l.add r6,r6,r7 34*0a6a1f1dSLionel Sambuc#else 35*0a6a1f1dSLionel Sambuc l.movhi r6,hi(_C_LABEL(__minbrk)) 36*0a6a1f1dSLionel Sambuc l.ori r6,r6,lo(_C_LABEL(__minbrk)) 37*0a6a1f1dSLionel Sambuc#endif 38*0a6a1f1dSLionel Sambuc l.lwz r5,0(r6) # r5 = __minbrk 39*0a6a1f1dSLionel Sambuc l.sfgts r5,r3 # if (__minbrk <= r3) 40*0a6a1f1dSLionel Sambuc l.cmov r5,r5,r3 # choose larger 41*0a6a1f1dSLionel Sambuc l.or r3,r5,r0 # new break value 42*0a6a1f1dSLionel Sambuc _DOSYSCALL(break) # assume, that r5 is kept 43*0a6a1f1dSLionel Sambuc l.bf _C_LABEL(__cerror) 44*0a6a1f1dSLionel Sambuc l.nop 45*0a6a1f1dSLionel Sambuc l.sw __SIZEOF_POINTER__(r6),r5 46*0a6a1f1dSLionel Sambuc l.xor r11, r11, r11 # return 0 47*0a6a1f1dSLionel Sambuc l.jr lr # return 0 48*0a6a1f1dSLionel Sambuc l.nop 49*0a6a1f1dSLionel SambucEND(_brk) 50