blob: 18e91998aa8f80c8ccd76800f67a721b01ad1079 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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;
}
|