s_copysign.c 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*******************************************************************************
  2. * *
  3. * File sign.c, *
  4. * Functions copysign and __signbitd. *
  5. * For PowerPC based machines. *
  6. * *
  7. * Copyright © 1991, 2001 Apple Computer, Inc. All rights reserved. *
  8. * *
  9. * Written by Ali Sazegari, started on June 1991. *
  10. * *
  11. * August 26 1991: no CFront Version 1.1d17 warnings. *
  12. * September 06 1991: passes the test suite with invalid raised on *
  13. * signaling nans. sane rom code behaves the same. *
  14. * September 24 1992: took the Ò#include support.hÓ out. *
  15. * Dcember 02 1992: PowerPC port. *
  16. * July 20 1994: __fabs added *
  17. * July 21 1994: deleted unnecessary functions: neg, COPYSIGNnew, *
  18. * and SIGNNUMnew. *
  19. * April 11 2001: first port to os x using gcc. *
  20. * removed fabs and deffered to gcc for direct *
  21. * instruction generation. *
  22. * *
  23. *******************************************************************************/
  24. #include "../fp_private.h"
  25. /*******************************************************************************
  26. * *
  27. * Function copysign. *
  28. * Implementation of copysign for the PowerPC. *
  29. * *
  30. ********************************************************************************
  31. * Note: The order of the operands in this function is reversed from that *
  32. * suggested in the IEEE standard 754. *
  33. *******************************************************************************/
  34. libm_hidden_proto(copysign)
  35. double copysign ( double arg2, double arg1 )
  36. {
  37. union
  38. {
  39. dHexParts hex;
  40. double dbl;
  41. } x, y;
  42. /*******************************************************************************
  43. * No need to flush NaNs out. *
  44. *******************************************************************************/
  45. x.dbl = arg1;
  46. y.dbl = arg2;
  47. y.hex.high = y.hex.high & 0x7FFFFFFF;
  48. y.hex.high = ( y.hex.high | ( x.hex.high & dSgnMask ) );
  49. return y.dbl;
  50. }
  51. libm_hidden_def(copysign)