Fixes and additions
This commit is contained in:
		
							parent
							
								
									b4c5125c32
								
							
						
					
					
						commit
						4e0a99ef38
					
				
					 3 changed files with 136 additions and 4 deletions
				
			
		|  | @ -9,3 +9,4 @@ fef.s | ||||||
| nop.s | nop.s | ||||||
| shp.s | shp.s | ||||||
| trp.s | trp.s | ||||||
|  | cfu.s | ||||||
|  |  | ||||||
							
								
								
									
										62
									
								
								mach/sparc/libem/cfu.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								mach/sparc/libem/cfu.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | ||||||
|  | .global cfu4, cfu8 | ||||||
|  | 
 | ||||||
|  | .align 8
 | ||||||
|  | Fdmaxint: | ||||||
|  | .double 0r2147483648
 | ||||||
|  | Fsmaxint: | ||||||
|  | .single 0r2147483648
 | ||||||
|  | maxint: | ||||||
|  | .word	0x80000000
 | ||||||
|  | 
 | ||||||
|  | cfu4: | ||||||
|  | 	ld	[%l0], %f0 | ||||||
|  | 	set	Fsmaxint, %o0 | ||||||
|  | 	ld	[%o0], %f1 | ||||||
|  | 	fcmps	%f0, %f1 | ||||||
|  | 	nop | ||||||
|  | 	fbul	1f | ||||||
|  | 	nop | ||||||
|  | 	fsubs	%f0, %f1, %f0 | ||||||
|  | 	fstoi	%f0, %f1 | ||||||
|  | 	st	%f1,[%l0] | ||||||
|  | 	ld	[%l0],%o0 | ||||||
|  | 	set	maxint, %o1 | ||||||
|  | 	ld	[%o1],%o2 | ||||||
|  | 	add	%o0, %o2, %o0 | ||||||
|  | 	ba	2f | ||||||
|  | 	nop | ||||||
|  | 1: | ||||||
|  | 	fstoi	%f0, %f1 | ||||||
|  | 	st	%f1,[%l0] | ||||||
|  | 	ld	[%l0],%o0 | ||||||
|  | 2: | ||||||
|  | 	inc	4,%l0 | ||||||
|  | 	retl | ||||||
|  | 	nop | ||||||
|  | 
 | ||||||
|  | cfu8: | ||||||
|  | 	ld	[%l0], %f0 | ||||||
|  | 	ld	[%l0+4], %f1 | ||||||
|  | 	set	Fdmaxint, %o0 | ||||||
|  | 	ldd	[%o0], %f2 | ||||||
|  | 	fcmpd	%f0, %f2 | ||||||
|  | 	nop | ||||||
|  | 	fbul	1f | ||||||
|  | 	nop | ||||||
|  | 	fsubd	%f0, %f2, %f0 | ||||||
|  | 	fdtoi	%f0, %f2 | ||||||
|  | 	st	%f2,[%l0] | ||||||
|  | 	ld	[%l0],%o0 | ||||||
|  | 	set	maxint, %o1 | ||||||
|  | 	ld	[%o1],%o2 | ||||||
|  | 	add	%o0, %o2, %o0 | ||||||
|  | 	ba	2f | ||||||
|  | 	nop | ||||||
|  | 1: | ||||||
|  | 	fdtoi	%f0, %f2 | ||||||
|  | 	st	%f2,[%l0] | ||||||
|  | 	ld	[%l0],%o0 | ||||||
|  | 2: | ||||||
|  | 	inc	8,%l0 | ||||||
|  | 	retl | ||||||
|  | 	nop | ||||||
|  | @ -1,5 +1,74 @@ | ||||||
| .global dvu4
 | .global dvu4
 | ||||||
| .global dvi4
 | .global dvi4
 | ||||||
|  | .global mathdvi4
 | ||||||
|  | 
 | ||||||
|  | dvi4: | ||||||
|  | ! %o0' = %o0 / %o1 | ||||||
|  | ! %o1' = %o0 % %o1 | ||||||
|  | 	tst	%o1 | ||||||
|  | 	be	0f | ||||||
|  | 	clr	%o5 | ||||||
|  | 	tst	%o0 | ||||||
|  | 	bge	1f | ||||||
|  | 	nop | ||||||
|  | 	neg	%o0 | ||||||
|  | 	xor	%o5, 1, %o5 | ||||||
|  | 1: | ||||||
|  | 	tst	%o1 | ||||||
|  | 	bge	3f | ||||||
|  | 	nop | ||||||
|  | 	neg	%o1 | ||||||
|  | 	xor	%o5, 2, %o5 | ||||||
|  | 
 | ||||||
|  | 3:	/* div common */ | ||||||
|  | 	clr	%o2 | ||||||
|  | 	mov	%o1, %o3 | ||||||
|  | 	clr	%o4 | ||||||
|  | 
 | ||||||
|  | 4: | ||||||
|  | 	cmp	%o1, %o0 | ||||||
|  | 	bgeu	5f | ||||||
|  | 	nop | ||||||
|  | 	inc	%o4 | ||||||
|  | 	sll	%o1, 1, %o1 | ||||||
|  | 	b	4b | ||||||
|  | 	nop | ||||||
|  | 
 | ||||||
|  | 5: | ||||||
|  | 	sll	%o2, 1, %o2 | ||||||
|  | 	subcc	%o0, %o1, %o0 | ||||||
|  | 	bgeu	3f | ||||||
|  | 	nop | ||||||
|  | 	add	%o0, %o1, %o0 | ||||||
|  | 	b	4f | ||||||
|  | 	nop | ||||||
|  | 3: | ||||||
|  | 	inc	%o2 | ||||||
|  | 4: | ||||||
|  | 	srl	%o1, 1, %o1 | ||||||
|  | 	tst	%o4 | ||||||
|  | 	bz	5f | ||||||
|  | 	nop | ||||||
|  | 	dec	%o4 | ||||||
|  | 	b	5b | ||||||
|  | 	nop | ||||||
|  | 
 | ||||||
|  | 5: | ||||||
|  | 	andcc	%o5, 1, %g0 | ||||||
|  | 	bz	6f | ||||||
|  | 	nop | ||||||
|  | 	neg	%o0 | ||||||
|  | 	neg	%o2 | ||||||
|  | 6: | ||||||
|  | 	andcc	%o5, 2, %g0 | ||||||
|  | 	bz	8f | ||||||
|  | 	nop | ||||||
|  | 	neg	%o2 | ||||||
|  | 8: | ||||||
|  | 	mov	%o0, %o1 | ||||||
|  | 	mov	%o2, %o0 | ||||||
|  | 	retl | ||||||
|  | 	nop | ||||||
| 
 | 
 | ||||||
| dvu4: | dvu4: | ||||||
| ! %o0' = %o0 / %o1 | ! %o0' = %o0 / %o1 | ||||||
|  | @ -24,9 +93,9 @@ dvu4: | ||||||
| 	nop | 	nop | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| dvi4: | mathdvi4: | ||||||
| ! %o2 = %o0 / %o1 | ! %o0' = %o0 / %o1 | ||||||
| ! %o3 = %o0 % %o1 | ! %o1' = %o0 % %o1 | ||||||
| 	tst	%o1 | 	tst	%o1 | ||||||
| 	be	0f | 	be	0f | ||||||
| 	clr	%o5 | 	clr	%o5 | ||||||
|  | @ -49,7 +118,7 @@ dvi4: | ||||||
| 
 | 
 | ||||||
| 4: | 4: | ||||||
| 	cmp	%o1, %o0 | 	cmp	%o1, %o0 | ||||||
| 	bgu	5f | 	bgeu	5f | ||||||
| 	nop | 	nop | ||||||
| 	inc	%o4 | 	inc	%o4 | ||||||
| 	sll	%o1, 1, %o1 | 	sll	%o1, 1, %o1 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue