299 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define .adf4, .adf8, .sbf4, .sbf8, .mlf4, .mlf8, .dvf4, .dvf8
 | 
						|
.define .ngf4, .ngf8, .fif4, .fif8, .fef4, .fef8
 | 
						|
.define .cif4, .cif8, .cuf4, .cuf8, .cfi, .cfu, .cff4, .cff8
 | 
						|
.define .cmf4, .cmf8
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
 | 
						|
!	$Id$
 | 
						|
 | 
						|
!	Implement interface to floating point package for M68881
 | 
						|
 | 
						|
	.sect .text
 | 
						|
.adf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.s (sp),fp0
 | 
						|
	fadd.s	4(sp),fp0
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.adf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.d (sp),fp0
 | 
						|
	fadd.d	8(sp),fp0
 | 
						|
	fmove.d	fp0,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.sbf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.s (sp),fp0
 | 
						|
	fmove.s	4(sp),fp1
 | 
						|
	fsub	fp0,fp1
 | 
						|
	fmove.s	fp1,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.sbf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.d (sp),fp0
 | 
						|
	fmove.d	8(sp),fp1
 | 
						|
	fsub	fp0,fp1
 | 
						|
	fmove.d	fp1,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.mlf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.s (sp),fp0
 | 
						|
	fmul.s	4(sp),fp0
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.mlf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.d (sp),fp0
 | 
						|
	fmul.d	8(sp),fp0
 | 
						|
	fmove.d	fp0,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.dvf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.s (sp),fp0
 | 
						|
	fmove.s	4(sp),fp1
 | 
						|
	fdiv	fp0,fp1
 | 
						|
	fmove.s	fp1,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.dvf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.d (sp),fp0
 | 
						|
	fmove.d	8(sp),fp1
 | 
						|
	fdiv	fp0,fp1
 | 
						|
	fmove.d	fp1,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.ngf4:
 | 
						|
	fmove.s	4(sp),fp0
 | 
						|
	fneg	fp0
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	rts
 | 
						|
 | 
						|
.ngf8:
 | 
						|
	fmove.d	4(sp),fp0
 | 
						|
	fneg	fp0
 | 
						|
	fmove.d	fp0,4(sp)
 | 
						|
	rts
 | 
						|
 | 
						|
.fif4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	(sp),a1
 | 
						|
	fmove.s	4(sp),fp0
 | 
						|
	fmove.s	8(sp),fp1
 | 
						|
	fmul	fp0,fp1
 | 
						|
	fintrz	fp1,fp0
 | 
						|
	fsub	fp0,fp1
 | 
						|
	fmove.s	fp1,4(a1)
 | 
						|
	fmove.s	fp0,(a1)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.fif8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	(sp),a1
 | 
						|
	fmove.d	4(sp),fp0
 | 
						|
	fmove.d	12(sp),fp1
 | 
						|
	fmul	fp0,fp1
 | 
						|
	fintrz	fp1,fp0
 | 
						|
	fsub	fp0,fp1
 | 
						|
	fmove.d	fp1,8(a1)
 | 
						|
	fmove.d	fp0,(a1)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.fef4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	(sp),a1
 | 
						|
	fmove.s	4(sp),fp0
 | 
						|
	fgetexp	fp0,fp1
 | 
						|
	fmove.l	fpsr,d0
 | 
						|
	and.l	#0x2000,d0	! set if Infinity
 | 
						|
	beq	1f
 | 
						|
	move.l	#129,(a1)
 | 
						|
	fmove.s	4(sp),fp0
 | 
						|
	fblt	2f
 | 
						|
	move.l	#0x3f000000,4(a1)
 | 
						|
	jmp	(a0)
 | 
						|
2:
 | 
						|
	move.l	#0xbf000000,4(a1)
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	fmove.l	fp1,d0
 | 
						|
	add.l	#1,d0
 | 
						|
	fgetman	fp0
 | 
						|
	fbne	1f
 | 
						|
	clr.l	d0
 | 
						|
	bra	2f
 | 
						|
1:
 | 
						|
	fmove.l	#2,fp1
 | 
						|
	fdiv	fp1,fp0
 | 
						|
2:
 | 
						|
	fmove.s	fp0,4(a1)
 | 
						|
	move.l	d0,(a1)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.fef8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	(sp),a1
 | 
						|
	fmove.d	4(sp),fp0
 | 
						|
	fgetexp	fp0,fp1
 | 
						|
	fmove.l	fpsr,d0
 | 
						|
	and.l	#0x2000,d0	! set if Infinity
 | 
						|
	beq	1f
 | 
						|
	move.l	#1025,(a1)
 | 
						|
	fmove.d	4(sp),fp0
 | 
						|
	fblt	2f
 | 
						|
	move.l	#0x3fe00000,4(a1)
 | 
						|
	clr.l	8(a1)
 | 
						|
	jmp	(a0)
 | 
						|
2:
 | 
						|
	move.l	#0xbfe00000,4(a1)
 | 
						|
	clr.l	8(a1)
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	fmove.l	fp1,d0
 | 
						|
	add.l	#1,d0
 | 
						|
	fgetman	fp0
 | 
						|
	fbne	1f
 | 
						|
	clr.l	d0
 | 
						|
	bra	2f
 | 
						|
1:
 | 
						|
	fmove.l	#2,fp1
 | 
						|
	fdiv	fp1,fp0
 | 
						|
2:
 | 
						|
	fmove.d	fp0,4(a1)
 | 
						|
	move.l	d0,(a1)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cif4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.l	4(sp),fp0
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cif8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.l	4(sp),fp0
 | 
						|
	fmove.d	fp0,(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cuf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.l	4(sp),fp0
 | 
						|
	tst.l	4(sp)
 | 
						|
	bge	1f
 | 
						|
	fsub.l	#-2147483648,fp0
 | 
						|
	fsub.l	#-2147483648,fp0
 | 
						|
1:
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cuf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.l	4(sp),fp0
 | 
						|
	tst.l	4(sp)
 | 
						|
	bge	1f
 | 
						|
	fsub.l	#-2147483648,fp0
 | 
						|
	fsub.l	#-2147483648,fp0
 | 
						|
1:
 | 
						|
	fmove.d	fp0,(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cfi:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	4(sp),d0
 | 
						|
	cmp.l	#4,d0
 | 
						|
	bne	1f
 | 
						|
	fmove.s	8(sp),fp0
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	fmove.d	8(sp),fp0
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,12(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cfu:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	move.l	4(sp),d0
 | 
						|
	cmp.l	#4,d0
 | 
						|
	bne	1f
 | 
						|
	fmove.s	8(sp),fp0
 | 
						|
	fabs	fp0
 | 
						|
	cmp.l	#0x4f000000,8(sp)
 | 
						|
	bge	2f
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
2:
 | 
						|
	fadd.l	#-2147483648,fp0
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,d0
 | 
						|
	bchg	#31,d0
 | 
						|
	move.l	d0,8(sp)
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	fmove.d	8(sp),fp0
 | 
						|
	fabs	fp0
 | 
						|
	cmp.l	#0x41e00000,8(sp)
 | 
						|
	bge	1f
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,12(sp)
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	fadd.l	#-2147483648,fp0
 | 
						|
	fintrz	fp0,fp0
 | 
						|
	fmove.l	fp0,d0
 | 
						|
	bchg	#31,d0
 | 
						|
	move.l	d0,12(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cff4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.d	(sp),fp0
 | 
						|
	fmove.s	fp0,4(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cff8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	fmove.s	(sp),fp0
 | 
						|
	fmove.d	fp0,(sp)
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cmf4:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	clr.l	d0
 | 
						|
	fmove.s	(sp),fp0
 | 
						|
	fmove.s	4(sp),fp1
 | 
						|
	fcmp	fp0,fp1
 | 
						|
	fbeq	2f
 | 
						|
	fblt	1f
 | 
						|
	add.l	#1,d0
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	sub.l	#1,d0
 | 
						|
2:
 | 
						|
	jmp	(a0)
 | 
						|
 | 
						|
.cmf8:
 | 
						|
	move.l	(sp)+,a0
 | 
						|
	clr.l	d0
 | 
						|
	fmove.d	(sp),fp0
 | 
						|
	fmove.d	8(sp),fp1
 | 
						|
	fcmp	fp0,fp1
 | 
						|
	fbeq	2f
 | 
						|
	fblt	1f
 | 
						|
	add.l	#1,d0
 | 
						|
	jmp	(a0)
 | 
						|
1:
 | 
						|
	sub.l	#1,d0
 | 
						|
2:
 | 
						|
	jmp	(a0)
 |