diff options
Diffstat (limited to 'gcc/config/ip2k/libgcc.S')
-rw-r--r-- | gcc/config/ip2k/libgcc.S | 1532 |
1 files changed, 0 insertions, 1532 deletions
diff --git a/gcc/config/ip2k/libgcc.S b/gcc/config/ip2k/libgcc.S deleted file mode 100644 index 1af9ef873ce..00000000000 --- a/gcc/config/ip2k/libgcc.S +++ /dev/null @@ -1,1532 +0,0 @@ -; libgcc.S for the Ubicom IP2k architecture. -; -; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. -; Contributed by Red Hat, Inc and Ubicom, Inc. -; -; This file is part of GNU CC. -; -; GNU CC is free software; you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation; either version 2, or (at your option) -; any later version. -; -; In addition to the permissions in the GNU General Public License, the -; Free Software Foundation gives you unlimited permission to link the -; compiled version of this file with other programs, and to distribute -; those programs without any restriction coming from the use of this -; file. (The General Public License restrictions do apply in other -; respects; for example, they cover modification of the file, and -; distribution when not linked into another program.) -; -; GNU CC is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with GNU CC; see the file COPYING. If not, write to -; the Free Software Foundation, 59 Temple Place - Suite 330, -; Boston, MA 02111-1307, USA. */ - -/******************************************************* - load byte from arbitrary memory - address passed in first bank register, result in W - -*******************************************************/ - .macro movb to, from - mov w, \from - mov \to, w - .endm - - -#if defined (L_indcall) -/* __indcall - given register containing an address, call the function - * at that address. - */ - - .sect .pram.libgcc,"ax" - .global __indcall - .func _indcall,__indcall - -__indcall: - page 1f - call 1f -1: pop callh ; Get the call target - pop calll - ret ; Transfer to new function - - .endfunc -#endif - - -#if defined (L_mulhi3) - .sect .pram.libgcc,"ax" - .global __mulhi3 - .func _mulhi3, __mulhi3 - -__mulhi3: - mov w, 2(SP) ; First upper half partial product - mulu w, 3(SP) - mov 3(SP), w - mov w, 1(SP) ; Second upper half partial product - mulu w, 4(SP) - add 3(SP), w - mov w, 2(SP) ; Lower half partial product - mulu w, 4(SP) - mov 4(SP), w - mov w, MULH - add 3(SP), w - - mov w, #2 ; Adjust the stack leaving the result to - add spl, w ; be popped off later. - ret - - .endfunc - -#endif /* defined (L_mulhi3) */ - -#if defined (L_mulsi3) -/******************************************************* - Multiplication 32 x 32 -*******************************************************/ - - .sect .text.libgcc,"ax" - .global __mulsi3 - .func _mulsi3, __mulsi3 - -__mulsi3: - clr $80 ; Assume zero result - clr $81 - clr $82 - clr $83 - -2: mov w, 1(sp) - or w, 2(sp) - or w, 3(sp) - or w, 4(sp) - snz ; Any more significant bits to multiply? - page 3f - jmp 3f - - sb 4(sp), 0 ; Check LSB of multiplier - page 1f ; zero => scale multiplicand & multiplier - jmp 1f - - mov w, 8(sp) ; Accumulate product - add $83, w - mov w, 7(sp) - addc $82, w - mov w, 6(sp) - addc $81, w - mov w, 5(sp) - addc $80, w -1: clrb status, 0 ; scale multiplier down - rr 1(sp) - rr 2(sp) - rr 3(sp) - rr 4(sp) - clrb status, 0 - rl 8(sp) - rl 7(sp) - rl 6(sp) - rl 5(sp) - page 2b - jmp 2b - -3: mov w, #8 - add spl ,w - ret - - .endfunc - -#endif /* defined (L_mulsi3) */ - -#if defined (L_muldi3) -/******************************************************* - Multiplication 64 x 64 -*******************************************************/ - - .sect .text.libgcc,"ax" - .global __muldi3 - .func _muldi3, __muldi3 - -__muldi3: - clr $80 ; Assume zero result - clr $81 - clr $82 - clr $83 - clr $84 - clr $85 - clr $86 - clr $87 - -2: mov w, 1(sp) - or w, 2(sp) - or w, 3(sp) - or w, 4(sp) - or w, 5(sp) - or w, 6(sp) - or w, 7(sp) - or w, 8(sp) - snz ; Any more significant bits to multiply? - page 3f - jmp 3f - - sb 8(sp), 0 ; Check LSB of multiplier - page 1f ; zero => scale multiplicand & multiplier - jmp 1f - - mov w, 16(sp) ; Accumulate product - add $87, w - mov w, 15(sp) - addc $86, w - mov w, 14(sp) - addc $85, w - mov w, 13(sp) - addc $84, w - mov w, 12(sp) - addc $83, w - mov w, 11(sp) - addc $82, w - mov w, 10(sp) - addc $81, w - mov w, 9(sp) - addc $80, w - -1: clrb status, 0 ; scale multiplier down - rr 1(sp) - rr 2(sp) - rr 3(sp) - rr 4(sp) - rr 5(sp) - rr 6(sp) - rr 7(sp) - rr 8(sp) - clrb status, 0 - rl 16(sp) - rl 15(sp) - rl 14(sp) - rl 13(sp) - rl 12(sp) - rl 11(sp) - rl 10(sp) - rl 9(sp) - page 2b - jmp 2b - -3: mov w, #16 - add spl, w - ret - - .endfunc - -#endif /* defined (L_muldi3) */ - -#if defined (L_divmodhi4) -#define arg1h 1(SP) -#define arg1l 2(SP) -#define arg2h 3(SP) -#define arg2l 4(SP) -#define resl $81 -#define resh $80 -#define reml $83 -#define remh $82 -#define tmp_var $84 -#define cnt $85 -#define arg1_sign $86 -#define res_sign $87 - - .sect .text.libgcc,"ax" - .global __divmodhi4 - .func _divmodhi4, __divmodhi4 - -__divmodhi4: - mov w,arg2h - mov res_sign,w - mov w,arg1h - mov arg1_sign,w - xor res_sign,w - - sb arg1h,7 - page 1f - jmp 1f - - not arg1h - not arg1l - incsnz arg1l - inc arg1h - -1: sb arg2h, 7 - page 1f - jmp 1f - - not arg2h - not arg2l - incsnz arg2l - inc arg2h - -1: page __udivmodhi4 ; Do the unsigned div/mod - call __udivmodhi4 - - sb arg1_sign, 7 - page 1f - jmp 1f - - not reml - not remh - incsnz reml - inc remh - -1: sb res_sign, 7 - ret - - not resl - not resh - incsnz resl - inc resh - ret - - .endfunc - -#undef arg1h -#undef arg1l -#undef arg2h -#undef arg2l -#undef resl -#undef resh -#undef reml -#undef remh -#undef tmp_var -#undef cnt -#undef arg1_sign -#undef res_sign - -#endif /* defined (L_divmodhi4) */ - -#if defined (L_udivmodhi4) - -#define arg1h 1(SP) -#define arg1l 2(SP) -#define arg2h 3(SP) -#define arg2l 4(SP) -#define resl $81 -#define resh $80 -#define reml $83 -#define remh $82 -#define tmp_var $84 -#define cnt $85 - - .sect .text.libgcc,"ax" - .global __udivmodhi4 - .func _udivmodhi4, __udivmodhi4 - -__udivmodhi4: - clr reml - clr remh - mov w, #17 - mov cnt,w - clrb status, 0 - page 1f - jmp 1f - -2: rl reml - rl remh - mov w, arg2l - sub w, reml - mov tmp_var, w - mov w, arg2h - subc w, remh - sc - page 1f - jmp 1f - mov remh, w - mov w, tmp_var - mov reml, w - -1: rl arg1l - rl arg1h - decsz cnt - page 2b - jmp 2b - - pop resh - pop resl - mov w, #2 - add spl, w - ret - - .endfunc - -#undef arg1h -#undef arg1l -#undef arg2h -#undef arg2l -#undef resl -#undef resh -#undef reml -#undef remh -#undef tmp_var -#undef cnt - -#endif /* defined (L_udivmodhi4) */ - -#if defined (L_divmodsi4) - -#define arg1a 1(SP) -#define arg1b 2(SP) -#define arg1c 3(SP) -#define arg1d 4(SP) - -#define arg2a 5(SP) -#define arg2b 6(SP) -#define arg2c 7(SP) -#define arg2d 8(SP) - -#define resa $80 -#define resb $81 -#define resc $82 -#define resd $83 - -#define rema $84 -#define remb $85 -#define remc $86 -#define remd $87 - -#define tmp_var $88 -#define tmp_var1 $89 -#define tmp_var2 $8a -#define cnt $8b -#define arg1_sign $8c -#define res_sign $8d - - .sect .text.libgcc,"ax" - .global __divmodsi4 - .func _divmodsi4, __divmodsi4 - -__divmodsi4: - mov w, arg2a - mov res_sign, w - mov w, arg1a - mov arg1_sign, w - xor res_sign, w - - sb arg1a, 7 - page 1f - jmp 1f - - not arg1d - not arg1c - not arg1b - not arg1a - incsnz arg1d - incsz arg1c - page 1f - jmp 1f - incsnz arg1b - inc arg1a - -1: sb arg2a, 7 - page 1f - jmp 1f - - not arg2d - not arg2c - not arg2b - not arg2a - incsnz arg2d - incsz arg2c - page 1f - jmp 1f - incsnz arg2b - inc arg2a - -1: page __udivmodsi4 ; Do the unsigned div/mod. - call __udivmodsi4 - - sb arg1_sign, 7 - page 1f - jmp 1f - - not remd - not remc - not remb - not rema - incsnz remd - incsz remc - page 1f - jmp 1f - incsnz remb - inc rema - -1: sb res_sign, 7 - ret - - not resd - not resc - not resb - not resa - incsnz resd - incsz resc - ret - incsnz resb - inc resa - ret - - .endfunc - -#undef arg1a -#undef arg1b -#undef arg1c -#undef arg1d - -#undef arg2a -#undef arg2b -#undef arg2c -#undef arg2d - -#undef resa -#undef resb -#undef resc -#undef resd - -#undef rema -#undef remb -#undef remc -#undef remd - -#undef tmp_var -#undef tmp_var1 -#undef tmp_var2 -#undef cnt -#undef arg1_sign -#undef res_sign - -#endif /* defined (L_divmodsi4) */ - -#if defined (L_udivmodsi4) -#define arg1a 1(SP) -#define arg1b 2(SP) -#define arg1c 3(SP) -#define arg1d 4(SP) - -#define arg2a 5(SP) -#define arg2b 6(SP) -#define arg2c 7(SP) -#define arg2d 8(SP) - -#define resa $80 -#define resb $81 -#define resc $82 -#define resd $83 - -#define rema $84 -#define remb $85 -#define remc $86 -#define remd $87 - -#define tmp_var $88 -#define tmp_var1 $89 -#define tmp_var2 $8a -#define cnt $8b - - .sect .text.libgcc,"ax" - .global __udivmodsi4 - .func _udivmodsi4, __udivmodsi4 - -__udivmodsi4: - clr remd - clr remc - clr remb - clr rema - mov w, #33 - mov cnt, w - clrb status, 0 - page 1f - jmp 1f - -2: rl remd - rl remc - rl remb - rl rema - mov w, arg2d - sub w, remd - mov tmp_var, w - mov w, arg2c - subc w, remc - mov tmp_var1, w - mov w, arg2b - subc w, remb - mov tmp_var2, w - mov w, arg2a - subc w, rema - sc - page 1f - jmp 1f - - mov rema, w - mov w, tmp_var2 - mov remb, w - mov w, tmp_var1 - mov remc, w - mov w, tmp_var - mov remd, w - -1: rl arg1d - rl arg1c - rl arg1b - rl arg1a - decsz cnt - page 2b - jmp 2b - - pop resa - pop resb - pop resc - pop resd - mov w, #4 - add spl, w - ret - - .endfunc - -#undef arg1a -#undef arg1b -#undef arg1c -#undef arg1d - -#undef arg2a -#undef arg2b -#undef arg2c -#undef arg2d - -#undef resa -#undef resb -#undef resc -#undef resd - -#undef rema -#undef remb -#undef remc -#undef remd - -#undef tmp_var -#undef tmp_var1 -#undef tmp_var2 -#undef cnt - -#endif /* defined (L_udivmodsi4) */ - -#if defined (L_divmoddi4) - -#define arg1s 1(SP) -#define arg1t 2(SP) -#define arg1u 3(SP) -#define arg1v 4(SP) -#define arg1w 5(SP) -#define arg1x 6(SP) -#define arg1y 7(SP) -#define arg1z 8(SP) - -#define arg2s 9(SP) -#define arg2t 10(SP) -#define arg2u 11(SP) -#define arg2v 12(SP) -#define arg2w 13(SP) -#define arg2x 14(SP) -#define arg2y 15(SP) -#define arg2z 16(SP) - -#define ress $80 -#define rest $81 -#define resu $82 -#define resv $83 -#define resw $84 -#define resx $85 -#define resy $86 -#define resz $87 - -#define rems $88 -#define remt $89 -#define remu $8a -#define remv $8b -#define remw $8c -#define remx $8d -#define remy $8e -#define remz $8f - -#define tmp_var $90 -#define tmp_var1 $91 -#define tmp_var2 $92 -#define tmp_var3 $93 -#define tmp_var4 $94 -#define tmp_var5 $95 -#define tmp_var6 $96 -#define cnt $97 - - .sect .text.libgcc,"ax" - .global __divmoddi4 - .func _divmoddi4, __divmoddi4 - -__divmoddi4: - rl w, arg2s ; Use MULH to track sign bits. - rl MULH - rl w, arg1s - rl WREG - xor MULH, w - rl w, arg1s - rl MULH - - sb arg1s, 7 - page 1f - jmp 1f - - not arg1s - not arg1t - not arg1u - not arg1v - not arg1w - not arg1x - not arg1y - not arg1z - incsnz arg1z - incsz arg1y - page 1f - jmp 1f - incsnz arg1x - incsz arg1w - page 1f - jmp 1f - incsnz arg1v - incsz arg1u - page 1f - jmp 1f - incsnz arg1t - inc arg1s - -1: sb arg2s, 7 - page 1f - jmp 1f - - not arg2s - not arg2t - not arg2u - not arg2v - not arg2w - not arg2x - not arg2y - not arg2z - incsnz arg2z - incsz arg2y - page 1f - jmp 1f - incsnz arg2x - incsz arg2w - page 1f - jmp 1f - incsnz arg2v - incsz arg2u - page 1f - jmp 1f - incsnz arg2t - inc arg2s - -1: page __udivmoddi4 ; Do the unsigned div/mod. - call __udivmoddi4 - - sb MULH, 0 ; Look at the save sign bit for arg 1. - page 1f - jmp 1f - - not rems - not remt - not remu - not remv - not remw - not remx - not remy - not remz - incsnz remz - incsz remy - page 1f - jmp 1f - incsnz remx - incsz remw - page 1f - jmp 1f - incsnz remv - incsz remu - page 1f - jmp 1f - incsnz remt - inc rems - -1: sb MULH, 1 - ret - - not ress - not rest - not resu - not resv - not resw - not resx - not resy - not resz - incsnz resz - incsz resy - ret - incsnz resx - incsz resw - ret - incsnz resv - incsz resu - ret - incsnz rest - inc ress - ret - - .endfunc - -#undef arg1s -#undef arg1t -#undef arg1u -#undef arg1v -#undef arg1w -#undef arg1x -#undef arg1y -#undef arg1z - -#undef arg2s -#undef arg2t -#undef arg2u -#undef arg2v -#undef arg2w -#undef arg2x -#undef arg2y -#undef arg2z - -#undef ress -#undef rest -#undef resu -#undef resv -#undef resw -#undef resx -#undef resy -#undef resz - -#undef rems -#undef remt -#undef remu -#undef remv -#undef remw -#undef remx -#undef remy -#undef remz - -#undef tmp_var -#undef tmp_var1 -#undef tmp_var2 -#undef tmp_var3 -#undef tmp_var4 -#undef tmp_var5 -#undef tmp_var6 -#undef cnt - -#endif /* defined (L_divmoddi4) */ - -#if defined (L_udivmoddi4) -#define arg1s 1(SP) -#define arg1t 2(SP) -#define arg1u 3(SP) -#define arg1v 4(SP) -#define arg1w 5(SP) -#define arg1x 6(SP) -#define arg1y 7(SP) -#define arg1z 8(SP) - -#define arg2s 9(SP) -#define arg2t 10(SP) -#define arg2u 11(SP) -#define arg2v 12(SP) -#define arg2w 13(SP) -#define arg2x 14(SP) -#define arg2y 15(SP) -#define arg2z 16(SP) - -#define ress $80 -#define rest $81 -#define resu $82 -#define resv $83 -#define resw $84 -#define resx $85 -#define resy $86 -#define resz $87 - -#define rems $88 -#define remt $89 -#define remu $8a -#define remv $8b -#define remw $8c -#define remx $8d -#define remy $8e -#define remz $8f - -#define tmp_var $90 -#define tmp_var1 $91 -#define tmp_var2 $92 -#define tmp_var3 $93 -#define tmp_var4 $94 -#define tmp_var5 $95 -#define tmp_var6 $96 -#define cnt $97 - - .sect .text.libgcc,"ax" - .global __udivmoddi4 - .func _udivmoddi4, __udivmoddi4 - -__udivmoddi4: - clr rems - clr remt - clr remu - clr remv - clr remw - clr remx - clr remy - clr remz - mov w, #65 - mov cnt, w - clrb status, 0 - page 1f - jmp 1f - -2: rl remz - rl remy - rl remx - rl remw - rl remv - rl remu - rl remt - rl rems - mov w, arg2z - sub w, remz - mov tmp_var, w - mov w, arg2y - subc w, remy - mov tmp_var1, w - mov w, arg2x - subc w, remx - mov tmp_var2, w - mov w, arg2w - subc w, remw - mov tmp_var3, w - mov w, arg2v - subc w, remv - mov tmp_var4, w - mov w, arg2u - subc w, remu - mov tmp_var5, w - mov w, arg2t - subc w, remt - mov tmp_var6, w - mov w, arg2s - subc w, rems - sc - page 1f - jmp 1f - - mov rems, w - mov w, tmp_var6 - mov remt, w - mov w, tmp_var5 - mov remu, w - mov w, tmp_var4 - mov remv, w - mov w, tmp_var3 - mov remw, w - mov w, tmp_var2 - mov remx, w - mov w, tmp_var1 - mov remy, w - mov w, tmp_var - mov remz, w - -1: rl arg1z - rl arg1y - rl arg1x - rl arg1w - rl arg1v - rl arg1u - rl arg1t - rl arg1s - decsz cnt - page 2b - jmp 2b - - pop ress - pop rest - pop resu - pop resv - pop resw - pop resx - pop resy - pop resz - mov w, #8 - add spl, w - ret - - .endfunc - -#undef arg1s -#undef arg1t -#undef arg1u -#undef arg1v -#undef arg1w -#undef arg1x -#undef arg1y -#undef arg1z - -#undef arg2s -#undef arg2t -#undef arg2u -#undef arg2v -#undef arg2w -#undef arg2x -#undef arg2y -#undef arg2z - -#undef ress -#undef rest -#undef resu -#undef resv -#undef resw -#undef resx -#undef resy -#undef resz - -#undef rems -#undef remt -#undef remu -#undef remv -#undef remw -#undef remx -#undef remy -#undef remz - -#undef tmp_var -#undef tmp_var1 -#undef tmp_var2 -#undef tmp_var3 -#undef tmp_var4 -#undef tmp_var5 -#undef tmp_var6 -#undef cnt - -#endif /* defined (L_udivmoddi4) */ - -#define LT #0 -#define EQ #1 -#define GT #2 - -#if defined(L_cmphi2) -#define arg1l 2(sp) -#define arg1h 1(sp) -#define arg2l 4(sp) -#define arg2h 3(sp) - - .sect .text.libgcc,"ax" - .global __cmphi2 - .global __cmp_ret - .global __cmpqi_ret - .func _cmphi2, __cmphi2 - -__cmphi2: - mov w,arg1l - sub w,arg2l - snz - page 2f - jmp 2f - mov w,arg1h -1: - subc w,arg2h - clr arg2l - rl arg2l - snb arg1h,7 - setb arg2l,2 - snb arg2h,7 - setb arg2l,1 - mov w,#3 - -__cmp_ret: - add spl,w ; sign1 - pop wreg ; sign2 - -__cmpqi_ret: - add pcl,w ; carry of arg1 - arg2 - retw GT ; [000] arg1 > arg2 - retw LT ; [001] arg1 < arg2 - retw GT ; [010] arg1 > arg2 - retw GT ; [011] arg1 > arg2 - retw LT ; [100] arg1 < arg2 - retw LT ; [101] arg1 < arg2 - retw GT ; [110] arg1 > arg2 - retw LT ; [111] arg1 < arg2 -2: - mov w,arg1h - cse w,arg2h - page 1b - jmp 1b - mov w,#4 - add spl,w - retw EQ - - .endfunc -#undef arg1l -#undef arg1h -#undef arg2l -#undef arg2h -#endif /* L_cmphi2 */ - -#if defined(L_cmpqi2) -#define arg1 1(sp) -#define arg2 2(sp) - - .sect .text.libgcc,"ax" - .global __cmpqi2 - .func _cmpqi2, __cmpqi2 - -__cmpqi2: - mov w, arg1 - sub w, arg2 - snz - page 2f - jmp 2f - - clr wreg - rl wreg - snb arg1, 7 - setb wreg, 2 - snb arg2, 7 - setb wreg, 1 - inc spl - inc spl - page __cmpqi_ret - jmp __cmpqi_ret - -2: mov w, #2 - add spl, w - retw EQ - - .endfunc -#undef arg1l -#undef arg2l -#endif /* L_cmpqi2 */ - -#if defined(L_cmpsi2) -#define arg1d 4(sp) -#define arg1c 3(sp) -#define arg1b 2(sp) -#define arg1a 1(sp) -#define arg2d 8(sp) -#define arg2c 7(sp) -#define arg2b 6(sp) -#define arg2a 5(sp) - - .sect .text.libgcc,"ax" - .global __cmpsi2 - .func _cmpsi2, __cmpsi2 - -__cmpsi2: - mov w, arg1d - sub w, arg2d - snz - page 2f - jmp 2f - -1: mov w, arg1c - subc w, arg2c - mov w, arg1b - subc w, arg2b - mov w, arg1a - subc w, arg2a - - clr arg2d - rl arg2d - snb arg1a, 7 - setb arg2d, 2 - snb arg2a, 7 - setb arg2d, 1 - mov w, #7 - page __cmp_ret - jmp __cmp_ret - -2: mov w, arg1c - cse w, arg2c - page 1b - jmp 1b - - mov w, arg1b - cse w, arg2b - page 1b - jmp 1b - - mov w, arg1a - cse w, arg2a - page 1b - jmp 1b - - mov w, #8 - add spl, w - retw EQ - - .endfunc - -#undef arg1d -#undef arg1c -#undef arg1b -#undef arg1a -#undef arg2d -#undef arg2c -#undef arg2b -#undef arg2a -#endif /* L_cmpsi2 */ - -#if defined(L_cmpdi2) -#define arg1z 8(sp) -#define arg1y 7(sp) -#define arg1x 6(sp) -#define arg1w 5(sp) -#define arg1v 4(sp) -#define arg1u 3(sp) -#define arg1t 2(sp) -#define arg1s 1(sp) - -#define arg2z 16(sp) -#define arg2y 15(sp) -#define arg2x 14(sp) -#define arg2w 13(sp) -#define arg2v 12(sp) -#define arg2u 11(sp) -#define arg2t 10(sp) -#define arg2s 9(sp) - - .sect .text.libgcc,"ax" - .global __cmpdi2 - .func _cmpdi2, __cmpdi2 - -__cmpdi2: - mov w, arg1z - sub w, arg2z - snz - page 2f - jmp 2f - -1: mov w, arg1y - subc w, arg2y - mov w, arg1x - subc w, arg2x - mov w, arg1w - subc w, arg2w - mov w, arg1v - subc w, arg2v - mov w, arg1u - subc w, arg2u - mov w, arg1t - subc w, arg2t - mov w, arg1s - subc w, arg2s - clr arg2z - rl arg2z - snb arg1s, 7 - setb arg2z, 2 - snb arg2s, 7 - setb arg2z, 1 - mov w, #15 - page __cmp_ret - jmp __cmp_ret - -2: mov w, arg1y - cse w, arg2y - page 1b - jmp 1b - - mov w, arg1x - cse w, arg2x - page 1b - jmp 1b - - mov w, arg1w - cse w, arg2w - page 1b - jmp 1b - - mov w, arg1v - cse w, arg2v - page 1b - jmp 1b - - mov w, arg1u - cse w, arg2u - page 1b - jmp 1b - - mov w, arg1t - cse w, arg2t - page 1b - jmp 1b - - mov w, arg1s - cse w, arg2s - page 1b - jmp 1b - - mov w, #16 - add spl, w - retw EQ - - .endfunc - -#undef arg1z -#undef arg1y -#undef arg1x -#undef arg1w -#undef arg1v -#undef arg1u -#undef arg1t -#undef arg1s -#undef arg2z -#undef arg2y -#undef arg2x -#undef arg2w -#undef arg2v -#undef arg2u -#undef arg2t -#undef arg2s - -#endif /* L_cmpdi2 */ - -#if defined(L_cmpdi2_dp) - .sect .text.libgcc,"ax" - .global __cmpdi2_dp - .func _cmpdi2_dp, __cmpdi2_dp - -__cmpdi2_dp: - push 7(dp) - push 6(dp) - push 5(dp) - push 4(dp) - push 3(dp) - push 2(dp) - push 1(dp) - push (dp) - page __cmpdi2 - jmp __cmpdi2 - - .endfunc -#endif /* L_cmpdi2_dp */ - -#if defined(L_fp_pop_args_ret) - .sect .pram.libgcc,"ax" - .global __fp_pop_args_ret - .global __pop_args_ret - .func __fp_pop_args_ret, __fp_pop_args_ret - -__fp_pop_args_ret: - pop 0xfd - pop 0xfe -__pop_args_ret: - pop callh - pop calll - add spl, w - ret - - .endfunc -#endif /* L_fp_pop_args_ret */ - -#if defined(L_leaf_fp_pop_args_ret) - .sect .pram.libgcc,"ax" - .global __leaf_fp_pop_args_ret - .func __leaf_fp_pop_args_ret, __leaf_fp_pop_args_ret - -__leaf_fp_pop_args_ret: - pop 0xfd - pop 0xfe - add spl, w - ret - - .endfunc -#endif /* L_leaf_fp_pop_args_ret */ - -#if defined(L_fp_pop2_args_ret) - .sect .pram.libgcc,"ax" - .global __fp_pop2_args_ret - .global __pop2_args_ret - .func __fp_pop2_args_ret, __fp_pop2_args_ret - -__fp_pop2_args_ret: - pop 0xfd - pop 0xfe -__pop2_args_ret: - mov w, #2 - pop callh - pop calll - add spl, w - ret - - .endfunc -#endif /* L_fp_pop2_args_ret */ - -#if defined(L_leaf_fp_pop2_args_ret) - .sect .pram.libgcc,"ax" - .global __leaf_fp_pop2_args_ret - .func __leaf_fp_pop2_args_ret, __leaf_fp_pop2_args_ret - -__leaf_fp_pop2_args_ret: - pop 0xfd - pop 0xfe - mov w, #2 - add spl, w - ret - - .endfunc -#endif /* L_leaf_fp_pop2_args_ret */ - -#if defined(L_movstrhi_countqi) - .sect .pram.libgcc,"ax" - .global __movstrhi_countqi - .func _movstrhi_countqi, __movstrhi_countqi - -__movstrhi_countqi: - push dph ; Save our pointer regs - push dpl - push iph - push ipl - - mov w, 5(SP) ; Get our dest pointer - mov dph, w - mov w, 6(SP) - mov dpl, w - mov w, 7(SP) ; And our source pointer - mov iph, w - mov w, 8(SP) - mov ipl, w - -1: push (IP) ; *dest++ = *src++ - pop 0(DP) - inc ipl - inc dpl - decsz 9(SP) ; Loop until completed - page 1b - jmp 1b - - pop ipl ; Restore our pointer regs - pop iph - pop dpl - pop dph - - mov w, #5 ; Tidy up our stack args - add spl, w - ret - - .endfunc -#endif - -#if defined(L_movstrhi_counthi) - .sect .text.libgcc,"ax" - .global __movstrhi_counthi - .func _movstrhi_counthi, __movstrhi_counthi - -__movstrhi_counthi: - push dph ; Save our pointer regs - push dpl - push iph - push ipl - - mov w, 5(SP) ; Get our dest pointer - mov dph, w - mov w, 6(SP) - mov dpl, w - mov w, 7(SP) ; And our source pointer - mov iph, w - mov w, 8(SP) - mov ipl, w - - test 10(SP) ; If we have a non-zero LSB then adjust the - sz ; MSB of the loop count to allow us to use - inc 9(SP) ; skip tricks! - -1: push (IP) ; *dest++ = *src++ - pop 0(DP) - inc ipl - inc dpl - decsnz 10(SP) ; Loop until completed - note the skip trick - decsz 9(SP) ; on the MSB! - page 1b - jmp 1b - - pop ipl ; Restore our pointer regs - pop iph - pop dpl - pop dph - - mov w, #6 ; Tidy up our stacked args. - add spl, w - ret - - .endfunc -#endif - -#if defined(L_exit) - .sect .text.libgcc,"ax" - .global __exit - .global _exit - .func _exit, __exit - .weak __exit - .weak _exit - -_exit: -__exit: - pop $88 - pop wreg - or w, $88 - push wreg - push #0 - push #1 - system ; Exit wreg - page __exit ; Never return - jmp __exit - - .endfunc -#endif - -#if defined(Labort) - .sect .text.libgcc,"ax" - .global _abort - .func abort, _abort - -_abort: - push #1 - push #0 - push #1 - system ; Exit 1 - ret - - .endfunc -#endif - -#if defined(Lwrite) - /* Dummy entrypoint to suppress problems with glue code. */ - .sect .text.libgcc,"ax" - .global _write - .func write, _write -;; -;; write (fil,buf,len) - say that write succeeds.... -;; -_write: - movb $80, 5(SP) - movb $81, 6(SP) ; Return length written - mov w, #6 - add spl, w - ret - - .endfunc -#endif - |