ack/mach/sparc/libem/fif.s
1991-10-02 15:27:54 +00:00

68 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