diff options
author | Andrew Waterman <waterman@s141.Millennium.Berkeley.EDU> | 2010-08-18 14:34:42 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@s141.Millennium.Berkeley.EDU> | 2010-08-18 14:34:42 -0700 |
commit | 50ec828bafd154b5558c70ff46491193acf7f699 (patch) | |
tree | 867c6726544c511ae36ea4fdb5b54ca78a2c881f /softfloat/f64_eq_signaling.cc | |
parent | b46f178e5884c6744895a84937014ec73d4a10c8 (diff) | |
download | spike-50ec828bafd154b5558c70ff46491193acf7f699.zip spike-50ec828bafd154b5558c70ff46491193acf7f699.tar.gz spike-50ec828bafd154b5558c70ff46491193acf7f699.tar.bz2 |
[sim] integrated SoftFloat-3 with ISA sim; removed SoftFloat-2b
Diffstat (limited to 'softfloat/f64_eq_signaling.cc')
-rwxr-xr-x | softfloat/f64_eq_signaling.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/softfloat/f64_eq_signaling.cc b/softfloat/f64_eq_signaling.cc new file mode 100755 index 0000000..7a54dc1 --- /dev/null +++ b/softfloat/f64_eq_signaling.cc @@ -0,0 +1,30 @@ + +#include <stdbool.h> +#include <stdint.h> +#include "platform.h" +#include "internals.h" +#include "softfloat.h" + +bool f64_eq_signaling( float64_t a, float64_t b ) +{ + union ui64_f64 uA; + uint_fast64_t uiA; + union ui64_f64 uB; + uint_fast64_t uiB; + + uA.f = a; + uiA = uA.ui; + uB.f = b; + uiB = uB.ui; + if ( + ( ( expF64UI( uiA ) == 0x7FF ) && fracF64UI( uiA ) ) + || ( ( expF64UI( uiB ) == 0x7FF ) && fracF64UI( uiB ) ) + ) { + softfloat_raiseFlags( softfloat_flag_invalid ); + return false; + } + return + ( uiA == uiB ) || ! ( ( uiA | uiB ) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ); + +} + |