br 88 src/bignum.c static ScmBignum *bignum_rshift(ScmBignum *br, ScmBignum *bx, int amount); br 89 src/bignum.c static ScmBignum *bignum_lshift(ScmBignum *br, ScmBignum *bx, int amount); br 91 src/bignum.c static ScmBignum *bignum_add_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by); br 92 src/bignum.c static ScmBignum *bignum_2scmpl(ScmBignum *br); br 479 src/bignum.c ScmBignum *br; br 507 src/bignum.c ALLOC_TEMP_BIGNUM(br, tsize); br 508 src/bignum.c bignum_add_int(br, bx, off); br 510 src/bignum.c if (br->size < by->size) return -1; br 511 src/bignum.c for (i=br->size-1; i>=0; i--) { br 513 src/bignum.c if (br->values[i]) return 1; br 516 src/bignum.c if (br->values[i] < by->values[i]) return -1; br 517 src/bignum.c if (br->values[i] > by->values[i]) return 1; br 541 src/bignum.c static ScmBignum *bignum_2scmpl(ScmBignum *br) br 543 src/bignum.c int rsize = SCM_BIGNUM_SIZE(br); br 546 src/bignum.c unsigned long x = ~br->values[i]; br 547 src/bignum.c UADD(br->values[i], c, x, 0); br 549 src/bignum.c return br; br 560 src/bignum.c static ScmBignum *bignum_add_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by) br 562 src/bignum.c int rsize = SCM_BIGNUM_SIZE(br); br 571 src/bignum.c UADD(br->values[i], c, 0, 0); br 575 src/bignum.c UADD(br->values[i], c, 0, y); br 580 src/bignum.c UADD(br->values[i], c, x, 0); br 585 src/bignum.c UADD(br->values[i], c, x, y); br 587 src/bignum.c return br; br 592 src/bignum.c static ScmBignum *bignum_sub_int(ScmBignum *br, ScmBignum *bx, ScmBignum *by) br 594 src/bignum.c int rsize = SCM_BIGNUM_SIZE(br); br 603 src/bignum.c USUB(br->values[i], c, 0, 0); br 607 src/bignum.c USUB(br->values[i], c, 0, y); br 612 src/bignum.c USUB(br->values[i], c, x, 0); br 617 src/bignum.c USUB(br->values[i], c, x, y); br 620 src/bignum.c bignum_2scmpl(br); br 621 src/bignum.c br->sign = 0 - br->sign; /* flip sign */ br 623 src/bignum.c return br; br 630 src/bignum.c ScmBignum *br = make_bignum(rsize); br 631 src/bignum.c br->sign = SCM_BIGNUM_SIGN(bx); br 633 src/bignum.c bignum_add_int(br, bx, by); br 635 src/bignum.c bignum_sub_int(br, bx, by); br 637 src/bignum.c return br; br 644 src/bignum.c ScmBignum *br = make_bignum(rsize); br 645 src/bignum.c br->sign = SCM_BIGNUM_SIGN(bx); br 647 src/bignum.c bignum_sub_int(br, bx, by); br 649 src/bignum.c bignum_add_int(br, bx, by); br 651 src/bignum.c return br; br 661 src/bignum.c ScmBignum *br; br 665 src/bignum.c br = make_bignum(rsize); br 666 src/bignum.c br->sign = bx->sign; br 669 src/bignum.c UADD(br->values[i], c, bx->values[i], yabs); br 674 src/bignum.c USUB(br->values[i], c, bx->values[i], yabs); br 678 src/bignum.c br->values[rsize-1] = c; br 679 src/bignum.c return br; br 753 src/bignum.c static ScmBignum *bignum_rshift(ScmBignum *br, ScmBignum *bx, int amount) br 760 src/bignum.c br->size = 0; br->values[0] = 0; br 763 src/bignum.c br->values[i-nwords] = bx->values[i]; br 765 src/bignum.c br->size = bx->size - nwords; br 766 src/bignum.c br->sign = bx->sign; br 771 src/bignum.c br->values[i-nwords] = x; br 773 src/bignum.c br->values[i-nwords] = bx->values[i]>>nbits; br 774 src/bignum.c br->size = bx->size - nwords; br 775 src/bignum.c br->sign = bx->sign; br 777 src/bignum.c return br; br 782 src/bignum.c static ScmBignum *bignum_lshift(ScmBignum *br, ScmBignum *bx, int amount) br 792 src/bignum.c if (br->size > i+nwords) br->values[i+nwords] = bx->values[i]; br 794 src/bignum.c for (i = nwords-1; i>=0; i--) br->values[i] = 0; br 796 src/bignum.c if (br->size > bx->size + nwords) { br 797 src/bignum.c br->values[bx->size+nwords] = br 802 src/bignum.c if (br->size > i+nwords) br->values[i+nwords] = x; br 804 src/bignum.c br->values[nwords] = bx->values[0]<<nbits; br 805 src/bignum.c for (i = nwords-1; i>=0; i--) br->values[i] = 0; br 807 src/bignum.c if (br != bx) { br 808 src/bignum.c br->sign = bx->sign; br 810 src/bignum.c return br; br 818 src/bignum.c static ScmBignum *bignum_mul_word(ScmBignum *br, ScmBignum *bx, br 829 src/bignum.c r0 = br->values[i+off]; br 831 src/bignum.c br->values[i+off] = r1; br 833 src/bignum.c r0 = br->values[i+off+1]; br 835 src/bignum.c br->values[i+off+1] = r1; br 837 src/bignum.c for (j=i+off+2; c && j<br->size; j++) { br 838 src/bignum.c r0 = br->values[j]; br 840 src/bignum.c br->values[j] = r1; br 843 src/bignum.c return br; br 850 src/bignum.c ScmBignum *br = make_bignum(bx->size + by->size); br 852 src/bignum.c bignum_mul_word(br, bx, by->values[i], i); br 854 src/bignum.c br->sign = bx->sign * by->sign; br 855 src/bignum.c return br; br 860 src/bignum.c ScmBignum *br; br 865 src/bignum.c br = make_bignum(1); br 866 src/bignum.c br->sign = 1; br 867 src/bignum.c br->values[0] = 0; br 868 src/bignum.c return br; br 871 src/bignum.c br = SCM_BIGNUM(Scm_BignumCopy(bx)); br 872 src/bignum.c br->sign = -br->sign; br 873 src/bignum.c return br; br 876 src/bignum.c br = make_bignum(bx->size + 1); /* TODO: more accurate estimation */ br 878 src/bignum.c br->sign = bx->sign; br 879 src/bignum.c bignum_mul_word(br, bx, yabs, 0); br 880 src/bignum.c if (y<0) br->sign = -br->sign; br 881 src/bignum.c return br; br 886 src/bignum.c ScmBignum *br = bignum_mul(bx, by); br 887 src/bignum.c return Scm_NormalizeBignum(br); br 892 src/bignum.c ScmBignum *br = bignum_mul_si(bx, y); br 893 src/bignum.c return Scm_NormalizeBignum(br); br 1071 src/bignum.c ScmBignum *br; br 1073 src/bignum.c br = bignum_gdiv(dividend, bv, q); br 1074 src/bignum.c rr = br->values[0];