github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/s390_32/README (about) 1 All current (2001) S/390 and z/Architecture machines are single-issue, 2 but some newer machines have a deep pipeline. Software-pipelining is 3 therefore beneficial. 4 5 * mpn_add_n, mpn_sub_n: Use code along the lines below. Two-way unrolling 6 would be adequate. 7 8 mp_limb_t 9 mpn_add_n (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n) 10 { 11 mp_limb_t a, b, r, cy; 12 mp_size_t i; 13 mp_limb_t mm = -1; 14 15 cy = 0; 16 up += n; 17 vp += n; 18 rp += n; 19 i = -n; 20 do 21 { 22 a = up[i]; 23 b = vp[i]; 24 r = a + b + cy; 25 rp[i] = r; 26 cy = (((a & b) | ((a | b) & (r ^ mm)))) >> 31; 27 i++; 28 } 29 while (i < 0); 30 return cy; 31 } 32 33 * mpn_lshift, mpn_rshift: Use SLDL/SRDL, and two-way unrolling. 34 35 * mpn_mul_1, mpn_addmul_1, mpn_submul_1: For machines with just signed 36 multiply (MR), use two loops, similar to the corresponding VAX or 37 POWER functions. Handle carry like for mpn_add_n.