Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

150 lines
2.9 KiB

/*
* |-----------------------------------------------------------|
* | Copyright (c) 1991, 1990 MIPS Computer Systems, Inc. |
* | All Rights Reserved |
* |-----------------------------------------------------------|
* | Restricted Rights Legend |
* | Use, duplication, or disclosure by the Government is |
* | subject to restrictions as set forth in |
* | subparagraph (c)(1)(ii) of the Rights in Technical |
* | Data and Computer Software Clause of DFARS 252.227-7013. |
* | MIPS Computer Systems, Inc. |
* | 950 DeGuigne Avenue |
* | Sunnyvale, California 94088-3650, USA |
* |-----------------------------------------------------------|
*/
/* $Header: fasincos.s,v 3000.7.1.3 91/08/01 18:34:39 zaineb Exp $ */
/* Algorithm from Cody and Waite. */
#include <kxmips.h>
#define half 0.5
#define eps 3.72529029846191406250e-9
#define one 1.0
#define p2 -0.504400557e+0
#define p1 +0.933935835e+0
#define q1 -0.554846723e+1
#define q0 +0.560363004e+1
#define pio2 1.57079632679489661923
#define pi 3.14159265358979323846
#define FSIZE 40
.text .text$fasincos
.globl acosf
.ent acosf
acosf:
.frame sp, FSIZE, ra
.mask 0x80000000, -4
subu sp, FSIZE
sw ra, FSIZE-4(sp)
.prologue 1
li.s $f8, half
abs.s $f14, $f12
c.le.s $f14, $f8
li.s $f10, eps
bc1f acosf2
c.lt.s $f14, $f10
mov.s $f0, $f12
bc1t acosf1
mul.s $f2, $f12, $f12
bal fasincos2
acosf1:
li.s $f8, pio2
sub.s $f0, $f8, $f0
b acosfret
acosf2:
bal fasincos1
bltz t1, acosf3
neg.s $f0
b acosfret
acosf3:
li.s $f8, pi
add.s $f0, $f8
acosfret:
lw ra, FSIZE-4(sp)
addu sp, FSIZE
j ra
.end acosf
.text .text$fasincos
.globl asinf
.ent asinf
asinf:
.frame sp, FSIZE, ra
.mask 0x80000000, -4
subu sp, FSIZE
sw ra, FSIZE-4(sp)
.prologue 1
li.s $f8, half
abs.s $f14, $f12
c.ole.s $f14, $f8
li.s $f10, eps
bc1f asinf1
c.lt.s $f14, $f10
mul.s $f2, $f12, $f12
mov.s $f0, $f12
bc1t asinfret
bal fasincos2
b asinfret
asinf1:
bal fasincos1
li.s $f8, pio2
add.s $f0, $f8
bgez t1, asinfret
asinf2:
neg.s $f0
b asinfret
asinfret:
lw ra, FSIZE-4(sp)
addu sp, FSIZE
j ra
.end asinf
.text .text$fasincos
.ent fasincos1
.aent fasincos2
fasincos1:
.frame sp, 0, ra
.prologue 0
li.s $f10, one
mfc1 t1, $f12
c.ole.s $f14, $f10
sub.s $f0, $f10, $f14
mul.s $f2, $f0, $f8
bc1f error
sqrt.s $f0, $f2
add.s $f0, $f0
neg.s $f0
/* fall through */
fasincos2:
li.s $f8, p2
li.s $f10, q1
mul.s $f4, $f2, $f8
add.s $f6, $f2, $f10
li.s $f8, p1
mul.s $f6, $f2
add.s $f4, $f8
li.s $f10, q0
mul.s $f4, $f2
add.s $f6, $f10
div.s $f4, $f6
mul.s $f4, $f0
add.s $f0, $f4
j ra
error: // |x| > 1
c.un.s $f12, $f12 // if x = NaN, return x
li.s $f0, 0.0 // else generate a NaN
bc1t 1f
div.s $f0, $f0
j ra
1:
mov.s $f0, $f12
j ra
.end fasincos1