67 lines
		
	
	
	
		
			929 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			929 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.global fif8, Fd0, Fd1, Fd80000000, Fs80000000, Fs0
 | 
						|
 | 
						|
.align 8
 | 
						|
Fd0:
 | 
						|
.double 0r0
 | 
						|
Fd1:
 | 
						|
.double 0r1
 | 
						|
FxE15:
 | 
						|
.word 0x43300000, 0x0	! magic const: (a.b + x) - x == a.0
 | 
						|
Fd80000000:
 | 
						|
.align 8
 | 
						|
.double 0r4294967296
 | 
						|
Fs80000000:
 | 
						|
.single 0r4294967296
 | 
						|
Fs0:
 | 
						|
.single 0r0
 | 
						|
 | 
						|
fif8:
 | 
						|
	ld	[%l0], %f0
 | 
						|
	ld	[%l0+4], %f1
 | 
						|
	ld	[%l0+8], %f2
 | 
						|
	ld	[%l0+12], %f3
 | 
						|
	fmuld	%f0, %f2, %f0
 | 
						|
	fmovs	%f0, %f6
 | 
						|
	fmovs	%f1, %f7
 | 
						|
	set	Fd0, %o0
 | 
						|
	ldd	[%o0], %f8
 | 
						|
	fcmpd	%f0, %f8
 | 
						|
	nop
 | 
						|
	fbuge,a	1f
 | 
						|
	mov	%g0, %o1
 | 
						|
	set	1, %o1
 | 
						|
	fnegs	%f0, %f0
 | 
						|
1:
 | 
						|
	set	FxE15, %o0
 | 
						|
	ldd	[%o0], %f10
 | 
						|
	fcmpd	%f0, %f10
 | 
						|
	nop
 | 
						|
	fbuge	2f
 | 
						|
	nop
 | 
						|
	faddd	%f0, %f10, %f4
 | 
						|
	fsubd	%f4, %f10, %f4
 | 
						|
	fsubd	%f0, %f4, %f2
 | 
						|
	set	Fd1, %o0
 | 
						|
	ldd	[%o0], %f12
 | 
						|
4:	fcmpd	%f2, %f12
 | 
						|
	nop
 | 
						|
	fbge,a	4b
 | 
						|
	fsubd	%f2, %f12, %f2
 | 
						|
5:	fcmpd	%f2, %f8
 | 
						|
	nop
 | 
						|
	fbl,a	5b
 | 
						|
	faddd	%f2, %f12, %f2
 | 
						|
	fsubd	%f0, %f2, %f0
 | 
						|
2:
 | 
						|
	tst	%o1
 | 
						|
	bz	3f
 | 
						|
	nop
 | 
						|
	fnegs	%f0, %f0
 | 
						|
3:
 | 
						|
	fsubd	%f6, %f0, %f2
 | 
						|
	st	%f0, [%l0]
 | 
						|
	st	%f1, [%l0+4]
 | 
						|
	st	%f2, [%l0+8]
 | 
						|
	st	%f3, [%l0+12]
 | 
						|
	retl
 | 
						|
	nop
 |