;
; Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
; Contributed by Red Hat, Inc and Ubicom, Inc.
;
; This file is part of GCC.
;
; GCC 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.)
;
; GCC 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 GCC; 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
	.global	__pop2_args_ret
	.func	__fp_pop2_args_ret, __fp_pop2_args_ret

__fp_pop2_args_ret:
	mov	w, #2
__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__pop2_args_ret)
	.sect	.pram.libgcc,"ax"
	.global	__pop2_args_ret
	.func	__pop2_args_ret, __pop2_args_ret

__pop2_args_ret:
	mov	w, #2
	pop	callh
	pop	calll
	add	spl, w
	ret

	.endfunc
#endif /* L__pop2_args_ret */

#if defined(L_leaf_fp_pop_args_ret)
	.sect	.pram.libgcc,"ax"
	.global	__leaf_fp_pop_args_ret, __leaf_fp_pop2_args_ret
	.func	__leaf_fp2_pop_args_ret, __leaf_fp_pop2_args_ret

__leaf_fp_pop2_args_ret:
	mov	w, #2
__leaf_fp_pop_args_ret:
	pop	0xfd
	pop	0xfe
	add	spl, w
	ret

	.endfunc
#endif /* L_leaf_fp_pop_args_ret */

#if defined(L_movmemhi_countqi)
	.sect	.pram.libgcc,"ax"
	.global	__movmemhi_countqi
	.func	_movmemhi_countqi, __movmemhi_countqi

__movmemhi_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_movmemhi_counthi)
	.sect	.text.libgcc,"ax"
	.global	__movmemhi_counthi
	.func	_movmemhi_counthi, __movmemhi_counthi

__movmemhi_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 nonzero 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 entry point 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
