| This is the assembler source code for amiga 68000
| It assumes Lattice-C is used. (v5.04 or higher)
| Written by S. Fishman

	.text

	.globl	_global_precision
	.globl	_P_ADDC		|make the linker know we're here

_P_ADDC:	link	a6,#0
	moveml	d4-d5/a0-a1,a7@-	
	movel	a6@(8),a0	
	movel	a6@(12),a1	
	movel	a6@(16),d4
	sne	d4		
	moveql	#0,d5
	movew	_global_precision,d5
	asll	#2,d5		
	addl	d5,a0	
	addl	d5,a1
	asrl	#2,d5		
	subl	#1,d5	
	asrb	#1,d4	
add_loop:	addxl	a1@-,a0@-	
	dbra	d5,add_loop
	scs	d0		
	extw	d0
	extl	d0		
	moveml	a7@+,d4-d5/a0-a1	
	unlk	a6		|get A6 & A7 back
	rts

	.globl	_P_SUBB		

_P_SUBB:	link	a6,#0
	moveml	d4-d5/a0-a1,a7@-	
	movel	a6@(8),a0	
	movel	a6@(12),a1	
	movel	a6@(16),d4
	sne	d4		|fix old borrow bits
	moveql	#0,d5
	movew	_global_precision,d5
	asll	#2,d5	
	addl	d5,a0
	addl	d5,a1		
	asrl	#2,d5	
	subl	#1,d5
	asrb	#1,d4		
sub_loop:	subxl	a1@-,a0@-	|come'n, let's do it !!!
	dbra	d5,sub_loop
	scs	d0		
	extw	d0
	extl	d0		
	moveml	a7@+,d4-d5/a0-a1	
	unlk	a6	
	rts

	.globl	_P_ROTL		

_P_ROTL:	link	a6,#0	
	moveml	d4-d5/a0,a7@-
	movel	a6@(8),a0	
	movel	a6@(12),d4
	moveql	#0,d5
	movew	_global_precision,d5
	asll	#1,d5		
				
	subl	#2,d5	
	aslw	a0@+
	scs	d0		
	extw	d0
	extl	d0		
rotl_loop:	aslw	a0@+
	bcc	rotl_no_carry
	bset	#0,a0@(-3)	
rotl_no_carry:	dbra	d5,rotl_loop	
	tstl	d4		
	beq	rotl_no_old_carry
	bset	#0,a0@(-1)	
rotl_no_old_carry:
	moveml	a7@+,d4-d5/a0	
	unlk	a6		
	rts

	.globl     _P_SETP    

_P_SETP:	rts
	| END

