diff options
author | aiju <devnull@localhost> | 2016-08-28 10:49:41 +0200 |
---|---|---|
committer | aiju <devnull@localhost> | 2016-08-28 10:49:41 +0200 |
commit | cf2f2a884137b589f502ffc7af9de5ca78634356 (patch) | |
tree | 09ae722e5907b20b1ffa559fc45bbdd14125ac71 /sys/src | |
parent | 193daffafb2ca564a47e52489cb082d77fa78872 (diff) |
mp: fix mpnot and add mpasr
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/libmp/port/mplogic.c | 15 |
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); +} |