ceriel 33 роки тому
батько
коміт
4e0a99ef38
3 змінених файлів з 136 додано та 4 видалено
  1. 1 0
      mach/sparc/libem/LIST
  2. 62 0
      mach/sparc/libem/cfu.s
  3. 73 4
      mach/sparc/libem/dvu.s

+ 1 - 0
mach/sparc/libem/LIST

@@ -9,3 +9,4 @@ fef.s
 nop.s
 shp.s
 trp.s
+cfu.s

+ 62 - 0
mach/sparc/libem/cfu.s

@@ -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

+ 73 - 4
mach/sparc/libem/dvu.s

@@ -1,5 +1,74 @@
 .global dvu4
 .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:
 ! %o0' = %o0 / %o1
@@ -24,9 +93,9 @@ dvu4:
 	nop
 
 
-dvi4:
-! %o2 = %o0 / %o1
-! %o3 = %o0 % %o1
+mathdvi4:
+! %o0' = %o0 / %o1
+! %o1' = %o0 % %o1
 	tst	%o1
 	be	0f
 	clr	%o5
@@ -49,7 +118,7 @@ dvi4:
 
 4:
 	cmp	%o1, %o0
-	bgu	5f
+	bgeu	5f
 	nop
 	inc	%o4
 	sll	%o1, 1, %o1