text: 
  #include <stdbool.h>
  #include <stdint.h>
  #include "platform.h"
  #include "primitives.h"
  #include "internals.h"
  #include "specialize.h"
  
  float64_t
   softfloat_addMagsF64( uint_fast64_t uiA, uint_fast64_t uiB, bool signZ )
  {
      int_fast16_t expA;
      uint_fast64_t sigA;
      int_fast16_t expB;
      uint_fast64_t sigB;
      int_fast16_t expDiff;
      uint_fast64_t uiZ;
      int_fast16_t expZ;
      uint_fast64_t sigZ;
      union ui64_f64 uZ;
  
      expA = expF64UI( uiA );
      sigA = fracF64UI( uiA );
      expB = expF64UI( uiB );
      sigB = fracF64UI( uiB );
      expDiff = expA - expB;
      sigA <<= 9;
      sigB <<= 9;
      if ( ! expDiff ) {
          if ( expA == 0x7FF ) {
              if ( sigA | sigB ) goto propagateNaN;
              uiZ = uiA;
              goto uiZ;
          }
          if ( ! expA ) {
              uiZ =
                  packToF64UI(
                      signZ, 0, ( uiA + uiB ) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) );
              goto uiZ;
          }
          expZ = expA;
          sigZ = UINT64_C( 0x4000000000000000 ) + sigA + sigB;
      } else {
          if ( expDiff < 0 ) {
              if ( expB == 0x7FF ) {
                  if ( sigB ) goto propagateNaN;
                  uiZ = packToF64UI( signZ, 0x7FF, 0 );
                  goto uiZ;
              }
              expZ = expB;
              sigA += expA ? UINT64_C( 0x2000000000000000 ) : sigA;
              sigA = softfloat_shift64RightJam( sigA, - expDiff );
          } else {
              if ( expA == 0x7FF ) {
                  if ( sigA ) goto propagateNaN;
                  uiZ = uiA;
                  goto uiZ;
              }
              expZ = expA;
              sigB += expB ? UINT64_C( 0x2000000000000000 ) : sigB;
              sigB = softfloat_shift64RightJam( sigB, expDiff );
          }
          sigZ = UINT64_C( 0x2000000000000000 ) + sigA + sigB;
          if ( sigZ < UINT64_C( 0x4000000000000000 ) ) {
              --expZ;
              sigZ <<= 1;
          }
      }
      return softfloat_roundPackToF64( signZ, expZ, sigZ );
   propagateNaN:
      uiZ = softfloat_propagateNaNF64UI( uiA, uiB );
   uiZ:
      uZ.ui = uiZ;
      return uZ.f;
  
  }
  
  