kolibrios/programs/develop/ktcc/trunk/libc.obj/source/math/pow.s
turbocat b5b499b8c8 kolibri-libc:
Move to folder with tcc. Part 1

git-svn-id: svn://kolibrios.org@8793 a494cfbc-eb01-0410-851d-a64ba20cac60
2021-06-10 14:37:44 +00:00

88 lines
880 B
ArmAsm

/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
.data
yint:
.word 0,0
pow.LCW1:
.word 0
pow.LCW2:
.word 0
.text
pow.LC0:
.double 0d1.0e+00
.global pow;
frac:
fstcw pow.LCW1
fstcw pow.LCW2
fwait
andw $0xf3ff,pow.LCW2
orw $0x0400,pow.LCW2
fldcw pow.LCW2
fldl %st(0)
frndint
fldcw pow.LCW1
fxch %st(1)
fsub %st(1),%st
ret
Lpow2:
call frac
f2xm1
faddl pow.LC0
fscale
fstp %st(1)
ret
pow:
fldl 12(%esp)
fldl 4(%esp)
ftst
fnstsw %ax
sahf
jbe xltez
fyl2x
jmp Lpow2
xltez:
jb xltz
fstp %st(0)
ftst
fnstsw %ax
sahf
ja ygtz
jb error
fstp %st(0)
fld1
fchs
error:
fsqrt
ret
ygtz:
fstp %st(0)
fldz
ret
xltz:
fabs
fxch %st(1)
call frac
ftst
fnstsw %ax
fstp %st(0)
sahf
je yisint
fstp %st(0)
fchs
jmp error
yisint:
fistl yint
fxch %st(1)
fyl2x
call Lpow2
andl $1,yint
jz yeven
fchs
yeven:
ret