anchor.diff:      return i == fromInteger(valueOf(_InputSize)/2);
     endmethod
     method Tuple2#(Data, Data) result_data if (i == fromInteger(valueOf(_InputSize)/2));
  -    return tuple2(p[128:65], p[64:1]);
  +    // was: return tuple2(p[128:65], p[64:1]);
  +    return tuple2(p[2*valueOf(DataSz):valueOf(DataSz)+1], p[valueOf(DataSz):1]);
     endmethod
     method Action result_deq if (i == fromInteger(valueOf(_InputSize)/2));
       i <= fromInteger(valueOf(_InputSize)/2+1);
  
positive.code: 
    method Action divide(Bit#(TAdd#(DataSz, 1)) dividend, Bit#(TAdd#(DataSz, 1)) divisor) if (current_bit == fromInteger(valueOf(_InputSize) + 1));
      // Optimization: Divide by zero and handle signed overflow very fast
      if ((dividend == 65'h18000000000000000) && (divisor == '1)) begin
        quotent <= unpack(signExtend(dividend));
        remainder <= 0;
        quotent_negative <= False;
  
negative.code:     // FIXME: Replace this with an efficient multiplication implementation like a booth multiplier
      Bit#(TAdd#(TAdd#(DataSz, DataSz), 1)) r = pack(a * b);
  
      Tuple2#(Data, Data) answer = tuple2( r[2*valueOf(DataSz)-1:valueOf(DataSz)], r[valueOf(DataSz)-1:0] );
      result_fifo.enq(answer);
    endmethod
  
  