57 lines
1.0 KiB
C++
57 lines
1.0 KiB
C++
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Microsoft Research Singularity
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// This file contains ARM-specific FP code.
|
||
|
//
|
||
|
|
||
|
typedef union _FP64Form
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
unsigned int MantLo : 28;
|
||
|
unsigned int MantHi0 : 4;
|
||
|
unsigned int MantHi1 : 20;
|
||
|
unsigned int Exponent : 11;
|
||
|
unsigned int SignBit : 1;
|
||
|
};
|
||
|
struct
|
||
|
{
|
||
|
unsigned int ul0;
|
||
|
unsigned int ul1;
|
||
|
};
|
||
|
double fp;
|
||
|
unsigned __int64 ull;
|
||
|
} FP64Form, *PFP64Form;
|
||
|
|
||
|
extern "C"
|
||
|
double
|
||
|
__negd(
|
||
|
double d1
|
||
|
)
|
||
|
//++
|
||
|
//
|
||
|
//Routine Description:
|
||
|
//
|
||
|
// negate the given double precision floating point value
|
||
|
//
|
||
|
//Arguments:
|
||
|
//
|
||
|
// d1 - double precision values to be negated
|
||
|
//
|
||
|
//Return Value:
|
||
|
//
|
||
|
// The negation of d1.
|
||
|
//
|
||
|
//--
|
||
|
{
|
||
|
FP64Form FpConv;
|
||
|
|
||
|
FpConv.fp = d1;
|
||
|
FpConv.SignBit ^= 1;
|
||
|
|
||
|
return( FpConv.fp );
|
||
|
}
|