From cf2f2a884137b589f502ffc7af9de5ca78634356 Mon Sep 17 00:00:00 2001 From: aiju Date: Sun, 28 Aug 2016 10:49:41 +0200 Subject: mp: fix mpnot and add mpasr --- sys/src/libmp/port/mplogic.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'sys/src') diff --git a/sys/src/libmp/port/mplogic.c b/sys/src/libmp/port/mplogic.c index 3dd9be2ab..16de7571b 100644 --- a/sys/src/libmp/port/mplogic.c +++ b/sys/src/libmp/port/mplogic.c @@ -85,7 +85,8 @@ void mpnot(mpint *b, mpint *r) { mpadd(b, mpone, r); - r->sign ^= -2; + if(r->top != 0) + r->sign ^= -2; } void @@ -193,3 +194,15 @@ mpxtend(mpint *b, int n, mpint *r) } mpnorm(r); } + +void +mpasr(mpint *b, int n, mpint *r) +{ + if(b->sign > 0 || n <= 0){ + mpright(b, n, r); + return; + } + mpadd(b, mpone, r); + mpright(r, n, r); + mpsub(r, mpone, r); +} -- cgit v1.2.3