/* -*-c-*-
*
- * $Id: mp-io.c,v 1.5 2002/10/06 22:52:50 mdw Exp $
+ * $Id: mp-io.c,v 1.6 2002/10/20 01:12:31 mdw Exp $
*
* Loading and storing of multiprecision integers
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mp-io.c,v $
+ * Revision 1.6 2002/10/20 01:12:31 mdw
+ * Two's complement I/O fixes.
+ *
* Revision 1.5 2002/10/06 22:52:50 mdw
* Pile of changes for supporting two's complement properly.
*
const octet *ov = pv;
MP_DEST(d, MPW_RQ(sz), MP_UNDEF);
if (!sz || !(ov[0] & 0x80)) {
- mpx_loadl(d->v, d->vl, pv, sz);
+ mpx_loadb(d->v, d->vl, pv, sz);
d->f &= ~MP_NEG;
} else {
- mpx_loadl2cn(d->v, d->vl, pv, sz);
+ mpx_loadb2cn(d->v, d->vl, pv, sz);
d->f |= MP_NEG;
}
d->f &= ~MP_UNDEF;
/* -*-c-*-
*
- * $Id: mpx.c,v 1.14 2002/10/19 18:55:08 mdw Exp $
+ * $Id: mpx.c,v 1.15 2002/10/20 01:12:31 mdw Exp $
*
* Low-level multiprecision arithmetic
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mpx.c,v $
+ * Revision 1.15 2002/10/20 01:12:31 mdw
+ * Two's complement I/O fixes.
+ *
* Revision 1.14 2002/10/19 18:55:08 mdw
* Fix overflows in shift primitives.
*
bits -= 8;
}
b = U8(~b + c);
- c = !b;
+ c = c && !b;
*p++ = b;
}
while (p < q) {
b = U8(~b + c);
- c = !b;
+ c = c && !b;
*p++ = b;
b = 0;
}
return;
while (p < q) {
n = U8(~(*p++) + c);
- c = !n;
+ c = c && !n;
w |= n << bits;
bits += 8;
if (bits >= MPW_BITS) {
bits -= 8;
}
b = U8(~b + c);
- c = !b;
+ c = c && !b;
*--q = b;
}
while (q > p) {
b = ~b + c;
- c = !(b & 0xff);
+ c = c && !(b & 0xff);
*--q = b;
b = 0;
}
return;
while (q > p) {
n = U8(~(*--q) + c);
- c = !n;
+ c = c && !n;
w |= n << bits;
bits += 8;
if (bits >= MPW_BITS) {
# Test vectors for low-level MP functions
#
-# $Id: mpx,v 1.9 2002/10/19 18:55:08 mdw Exp $
+# $Id: mpx,v 1.10 2002/10/20 01:12:31 mdw Exp $
# --- Load-store tests ---
#
0123456789abcdef fedcba9876543211;
0123456789abcdef fffffffedcba9876543211;
0100000000 ffffff00000000;
+ 00000000c1a4bc4b ffffffff3e5b43b5;
+ ffffffff3e5b43b5 00000000c1a4bc4b;
}
2cl {
efcdab8967452301 1132547698badcfe;
efcdab8967452301 1132547698badcfeffffffff;
0000000001 00000000ffffffff;
+ 4bbca4c100000000 b5435b3effffffff;
+ b5435b3effffffff 4bbca4c100000000;
}
# --- Shift tests ---