summaryrefslogtreecommitdiff
path: root/libm/powerpc/sign.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-11-24 03:46:25 +0000
committerEric Andersen <andersen@codepoet.org>2001-11-24 03:46:25 +0000
commit26d7ea91124a9405dff7755a78cfb6232dd15d80 (patch)
treec14436f6013bd76a2a339deb1424e02e73419957 /libm/powerpc/sign.c
parent683c13fcc85276e9a030d6a98d50366bef03a6b6 (diff)
Move powerpc specific optimizations (courtesy of apple) to powerpc
subdir. Put together a theoretical framework for adding arch specific optimizations. Havn't tried this yet but it looks correct... -Erik
Diffstat (limited to 'libm/powerpc/sign.c')
-rw-r--r--libm/powerpc/sign.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/libm/powerpc/sign.c b/libm/powerpc/sign.c
new file mode 100644
index 000000000..0bf2f3829
--- /dev/null
+++ b/libm/powerpc/sign.c
@@ -0,0 +1,56 @@
+/*******************************************************************************
+* *
+* File sign.c, *
+* Functions copysign and __signbitd. *
+* For PowerPC based machines. *
+* *
+* Copyright © 1991, 2001 Apple Computer, Inc. All rights reserved. *
+* *
+* Written by Ali Sazegari, started on June 1991. *
+* *
+* August 26 1991: no CFront Version 1.1d17 warnings. *
+* September 06 1991: passes the test suite with invalid raised on *
+* signaling nans. sane rom code behaves the same. *
+* September 24 1992: took the ̉#include support.hÓ out. *
+* Dcember 02 1992: PowerPC port. *
+* July 20 1994: __fabs added *
+* July 21 1994: deleted unnecessary functions: neg, COPYSIGNnew, *
+* and SIGNNUMnew. *
+* April 11 2001: first port to os x using gcc. *
+* removed fabs and deffered to gcc for direct *
+* instruction generation. *
+* *
+*******************************************************************************/
+
+#include "fp_private.h"
+
+/*******************************************************************************
+* *
+* Function copysign. *
+* Implementation of copysign for the PowerPC. *
+* *
+********************************************************************************
+* Note: The order of the operands in this function is reversed from that *
+* suggested in the IEEE standard 754. *
+*******************************************************************************/
+
+double copysign ( double arg2, double arg1 )
+ {
+ union
+ {
+ dHexParts hex;
+ double dbl;
+ } x, y;
+
+/*******************************************************************************
+* No need to flush NaNs out. *
+*******************************************************************************/
+
+ x.dbl = arg1;
+ y.dbl = arg2;
+
+ y.hex.high = y.hex.high & 0x7FFFFFFF;
+ y.hex.high = ( y.hex.high | ( x.hex.high & dSgnMask ) );
+
+ return y.dbl;
+ }