Fixes and additions
This commit is contained in:
parent
b4c5125c32
commit
4e0a99ef38
|
@ -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…
Reference in a new issue