Lines Matching +full:hi +full:- +full:z

29 br_i31_muladd_small(uint32_t *x, uint32_t z, const uint32_t *m)  in br_i31_muladd_small()  argument
34 uint32_t a0, a1, b0, hi, g, q, tb; in br_i31_muladd_small() local
49 hi = x[1] >> 1; in br_i31_muladd_small()
50 lo = (x[1] << 31) | z; in br_i31_muladd_small()
51 x[1] = br_rem(hi, lo, m[1]); in br_i31_muladd_small()
58 * Principle: we estimate the quotient (x*2^31+z)/m by in br_i31_muladd_small()
81 * u-2 <= q <= u in br_i31_muladd_small()
83 hi = x[mlen]; in br_i31_muladd_small()
86 memmove(x + 2, x + 1, (mlen - 1) * sizeof *x); in br_i31_muladd_small()
87 x[1] = z; in br_i31_muladd_small()
91 a0 = ((x[mlen] << (31 - mblr)) | (x[mlen - 1] >> mblr)) in br_i31_muladd_small()
93 memmove(x + 2, x + 1, (mlen - 1) * sizeof *x); in br_i31_muladd_small()
94 x[1] = z; in br_i31_muladd_small()
95 a1 = ((x[mlen] << (31 - mblr)) | (x[mlen - 1] >> mblr)) in br_i31_muladd_small()
97 b0 = ((m[mlen] << (31 - mblr)) | (m[mlen - 1] >> mblr)) in br_i31_muladd_small()
104 * -- If a0 == b0 then g == 0; we want q = 0x7FFFFFFF. in br_i31_muladd_small()
105 * -- Otherwise: in br_i31_muladd_small()
106 * -- if g == 0 then we set q = 0; in br_i31_muladd_small()
107 * -- otherwise, we set q = g - 1. in br_i31_muladd_small()
109 * quotient is q-1, q or q+1. in br_i31_muladd_small()
111 * Take care that a0, a1 and b0 are 31-bit words, not 32-bit. We in br_i31_muladd_small()
115 q = MUX(EQ(a0, b0), 0x7FFFFFFF, MUX(EQ(g, 0), 0, g - 1)); in br_i31_muladd_small()
118 * We subtract q*m from x (with the extra high word of value 'hi'). in br_i31_muladd_small()
124 * 'hi' or the carry). in br_i31_muladd_small()
137 nxw = xw - zw; in br_i31_muladd_small()
145 * If we underestimated q, then either cc < hi (one extra bit in br_i31_muladd_small()
146 * beyond the top array word), or cc == hi and tb is true (no in br_i31_muladd_small()
151 * cc > hi (thus a negative result). Correction is adding m once. in br_i31_muladd_small()
153 over = GT(cc, hi); in br_i31_muladd_small()
154 under = ~over & (tb | LT(cc, hi)); in br_i31_muladd_small()