summaryrefslogtreecommitdiff
path: root/sys/src/libmp
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-05-03 23:31:24 +0000
committeraiju <devnull@localhost>2018-05-03 23:31:24 +0000
commitcda7129cd28a25832ad06ed939d32fce9413db63 (patch)
treecda8ba26bfdfc781934a9866e5e47fc4666b18b6 /sys/src/libmp
parent98a5fc6535a10e292f0fa1ad5aed7f10a963ce19 (diff)
mplogic: don't drop carry out
Diffstat (limited to 'sys/src/libmp')
-rw-r--r--sys/src/libmp/port/mplogic.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/src/libmp/port/mplogic.c b/sys/src/libmp/port/mplogic.c
index 378bfc7ee..c60d56aab 100644
--- a/sys/src/libmp/port/mplogic.c
+++ b/sys/src/libmp/port/mplogic.c
@@ -36,7 +36,7 @@ mplogic(mpint *b1, mpint *b2, mpint *sum, int fl)
b2 = t;
fl = fl >> 2 & 0x03 | fl << 2 & 0x0c | fl & 0x30;
}
- mpbits(sum, b1->top*Dbits);
+ mpbits(sum, b1->top*Dbits+1);
dp1 = b1->p;
dp2 = b2->p;
dpo = sum->p;
@@ -60,6 +60,8 @@ mplogic(mpint *b1, mpint *b2, mpint *sum, int fl)
dpo[i] = d;
}
sum->top = i;
+ if(co)
+ dpo[sum->top++] = co;
mpnorm(sum);
}
@@ -105,7 +107,7 @@ mpxor(mpint *b1, mpint *b2, mpint *sum)
}
fl = (b1->sign & 10) ^ (b2->sign & 12);
sum->sign = (int)(fl << 28) >> 31 | 1;
- mpbits(sum, b1->top*Dbits);
+ mpbits(sum, b1->top*Dbits+1);
dp1 = b1->p;
dp2 = b2->p;
dpo = sum->p;
@@ -126,6 +128,8 @@ mpxor(mpint *b1, mpint *b2, mpint *sum)
dpo[i] = d;
}
sum->top = i;
+ if(co)
+ dpo[sum->top++] = co;
mpnorm(sum);
}