aboutsummaryrefslogtreecommitdiff
path: root/softfloat/f32_mul.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2011-06-12 20:27:10 -0700
committerAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2011-06-12 20:27:10 -0700
commit740f981cfd55604d46598144dccac26dd53f643c (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /softfloat/f32_mul.c
parentc0ebf99d6bb3ef3cf252703b50b849bcbaa2ec59 (diff)
downloadspike-740f981cfd55604d46598144dccac26dd53f643c.zip
spike-740f981cfd55604d46598144dccac26dd53f643c.tar.gz
spike-740f981cfd55604d46598144dccac26dd53f643c.tar.bz2
[sim] renamed to riscv-isa-run
Diffstat (limited to 'softfloat/f32_mul.c')
-rwxr-xr-xsoftfloat/f32_mul.c89
1 files changed, 0 insertions, 89 deletions
diff --git a/softfloat/f32_mul.c b/softfloat/f32_mul.c
deleted file mode 100755
index d49c1dd..0000000
--- a/softfloat/f32_mul.c
+++ /dev/null
@@ -1,89 +0,0 @@
-
-#include <stdbool.h>
-#include <stdint.h>
-#include "platform.h"
-#include "primitives.h"
-#include "internals.h"
-#include "specialize.h"
-#include "softfloat.h"
-
-float32_t f32_mul( float32_t a, float32_t b )
-{
- union ui32_f32 uA;
- uint_fast32_t uiA;
- bool signA;
- int_fast16_t expA;
- uint_fast32_t sigA;
- union ui32_f32 uB;
- uint_fast32_t uiB;
- bool signB;
- int_fast16_t expB;
- uint_fast32_t sigB;
- bool signZ;
- uint_fast32_t magBits;
- struct exp16_sig32 normExpSig;
- int_fast16_t expZ;
- uint_fast32_t sigZ, uiZ;
- union ui32_f32 uZ;
-
- uA.f = a;
- uiA = uA.ui;
- signA = signF32UI( uiA );
- expA = expF32UI( uiA );
- sigA = fracF32UI( uiA );
- uB.f = b;
- uiB = uB.ui;
- signB = signF32UI( uiB );
- expB = expF32UI( uiB );
- sigB = fracF32UI( uiB );
- signZ = signA ^ signB;
- if ( expA == 0xFF ) {
- if ( sigA || ( ( expB == 0xFF ) && sigB ) ) goto propagateNaN;
- magBits = expB | sigB;
- goto infArg;
- }
- if ( expB == 0xFF ) {
- if ( sigB ) goto propagateNaN;
- magBits = expA | sigA;
- goto infArg;
- }
- if ( ! expA ) {
- if ( ! sigA ) goto zero;
- normExpSig = softfloat_normSubnormalF32Sig( sigA );
- expA = normExpSig.exp;
- sigA = normExpSig.sig;
- }
- if ( ! expB ) {
- if ( ! sigB ) goto zero;
- normExpSig = softfloat_normSubnormalF32Sig( sigB );
- expB = normExpSig.exp;
- sigB = normExpSig.sig;
- }
- expZ = expA + expB - 0x7F;
- sigA = ( sigA | 0x00800000 )<<7;
- sigB = ( sigB | 0x00800000 )<<8;
- sigZ = softfloat_shortShift64RightJam( (uint_fast64_t) sigA * sigB, 32 );
- if ( sigZ < 0x40000000 ) {
- --expZ;
- sigZ <<= 1;
- }
- return softfloat_roundPackToF32( signZ, expZ, sigZ );
- propagateNaN:
- uiZ = softfloat_propagateNaNF32UI( uiA, uiB );
- goto uiZ;
- infArg:
- if ( ! magBits ) {
- softfloat_raiseFlags( softfloat_flag_invalid );
- uiZ = defaultNaNF32UI;
- } else {
- uiZ = packToF32UI( signZ, 0xFF, 0 );
- }
- goto uiZ;
- zero:
- uiZ = packToF32UI( signZ, 0, 0 );
- uiZ:
- uZ.ui = uiZ;
- return uZ.f;
-
-}
-