public static IntDividerPipelineResult <T> SignFeedOut <T>(IntDividerPipelineGeneratedState <T> i)
     where T : struct
 {
     return(new IntDividerPipelineResult <T>()
     {
         Payload = i.Payload,
         result = i.isResultNegative ? (0 - i.result) : i.result,
         remainder = i.isRemainderNegative ? (0 - i.numerator) : i.numerator
     });
 }
        public static IntDividerPipelineGeneratedState <T> DividerStage <T>(int idx, IntDividerPipelineGeneratedState <T> i)
            where T : struct
        {
            var denominator   = new RTLBitArray(i.denominator, new RTLBitArray(0).Unsigned().Resized(31 - idx));
            var flag          = i.numerator >= denominator;
            var result        = new RTLBitArray(i.result[30, 0], flag);
            var nextNumerator = flag ? (i.numerator - denominator)[31, 0] : i.numerator;

            return(new IntDividerPipelineGeneratedState <T>()
            {
                Payload = i.Payload,
                isRemainderNegative = i.isRemainderNegative,
                isResultNegative = i.isResultNegative,
                result = result,
                denominator = i.denominator,
                numerator = nextNumerator
            });
        }