summaryrefslogtreecommitdiff
path: root/sys/src/libmp
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2016-08-28 10:49:41 +0200
committeraiju <devnull@localhost>2016-08-28 10:49:41 +0200
commitcf2f2a884137b589f502ffc7af9de5ca78634356 (patch)
tree09ae722e5907b20b1ffa559fc45bbdd14125ac71 /sys/src/libmp
parent193daffafb2ca564a47e52489cb082d77fa78872 (diff)
mp: fix mpnot and add mpasr
Diffstat (limited to 'sys/src/libmp')
-rw-r--r--sys/src/libmp/port/mplogic.c15
1 files changed, 14 insertions, 1 deletions
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);
+}