Fixes and additions

This commit is contained in:
ceriel 1991-10-03 15:45:13 +00:00
parent b4c5125c32
commit 4e0a99ef38
3 changed files with 136 additions and 4 deletions

View file

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

62
mach/sparc/libem/cfu.s Normal file
View 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

View file

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