Annotation of OpenXM_contrib/gmp/mpn/s390/README, Revision 1.1
1.1 ! ohara 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.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>