projects
/
u
/
mdw
/
catacomb
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f45a00c
)
Add two's complement support. Fix a bug in MPX_UMLAN.
author
mdw
<mdw>
Wed, 17 Nov 1999 18:04:43 +0000
(18:04 +0000)
committer
mdw
<mdw>
Wed, 17 Nov 1999 18:04:43 +0000
(18:04 +0000)
mpx.h
patch
|
blob
|
blame
|
history
diff --git
a/mpx.h
b/mpx.h
index
9429e91
..
88f547c
100644
(file)
--- a/
mpx.h
+++ b/
mpx.h
@@
-1,6
+1,6
@@
/* -*-c-*-
*
/* -*-c-*-
*
- * $Id: mpx.h,v 1.
3 1999/11/13 01:51:29
mdw Exp $
+ * $Id: mpx.h,v 1.
4 1999/11/17 18:04:43
mdw Exp $
*
* Low level multiprecision arithmetic
*
*
* Low level multiprecision arithmetic
*
@@
-30,6
+30,9
@@
/*----- Revision history --------------------------------------------------*
*
* $Log: mpx.h,v $
/*----- Revision history --------------------------------------------------*
*
* $Log: mpx.h,v $
+ * Revision 1.4 1999/11/17 18:04:43 mdw
+ * Add two's complement support. Fix a bug in MPX_UMLAN.
+ *
* Revision 1.3 1999/11/13 01:51:29 mdw
* Minor interface changes. Should be stable now.
*
* Revision 1.3 1999/11/13 01:51:29 mdw
* Minor interface changes. Should be stable now.
*
@@
-282,6
+285,19
@@
extern void mpx_lsr(mpw */*dv*/, mpw */*dvl*/,
/*----- Unsigned arithmetic -----------------------------------------------*/
/*----- Unsigned arithmetic -----------------------------------------------*/
+/* --- @mpx_2c@ --- *
+ *
+ * Arguments: @mpw *dv, *dvl@ = destination vector
+ * @const mpw *v, *vl@ = source vector
+ *
+ * Returns: ---
+ *
+ * Use: Calculates the two's complement of @v@.
+ */
+
+extern void mpx_2c(mpw */*dv*/, mpw */*dvl*/,
+ const mpw */*v*/, const mpw */*vl*/);
+
/* --- @mpx_ucmp@ --- *
*
* Arguments: @const mpw *av, *avl@ = first argument vector base and limit
/* --- @mpx_ucmp@ --- *
*
* Arguments: @const mpw *av, *avl@ = first argument vector base and limit
@@
-444,18
+460,18
@@
extern void mpx_umul(mpw */*dv*/, mpw */*dvl*/,
#define MPX_UMLAN(dv, dvl, av, avl, m) do { \
mpw *_dv = (dv), *_dvl = (dvl); \
const mpw *_av = (av), *_avl = (avl); \
#define MPX_UMLAN(dv, dvl, av, avl, m) do { \
mpw *_dv = (dv), *_dvl = (dvl); \
const mpw *_av = (av), *_avl = (avl); \
- mpw _c
= 0;
\
+ mpw _c
c = 0;
\
mpd _m = (m); \
\
while (_av < _avl) { \
mpd _x; \
if (_dv >= _dvl) \
break; \
mpd _m = (m); \
\
while (_av < _avl) { \
mpd _x; \
if (_dv >= _dvl) \
break; \
- _x = (mpd)*_dv + (mpd)_m * (mpd)*_av++ + _c
;
\
+ _x = (mpd)*_dv + (mpd)_m * (mpd)*_av++ + _c
c;
\
*_dv++ = MPW(_x); \
*_dv++ = MPW(_x); \
- _c
= _x >> MPW_BITS;
\
+ _c
c = _x >> MPW_BITS;
\
} \
} \
- MPX_UADDN(_dv, _dvl, _c
);
\
+ MPX_UADDN(_dv, _dvl, _c
c);
\
} while (0)
/* --- @mpx_usqr@ --- *
} while (0)
/* --- @mpx_usqr@ --- *
@@
-488,8
+504,7
@@
extern void mpx_usqr(mpw */*dv*/, mpw */*dvl*/,
* requiring the dividend to be in the result position but it
* does make some sense really. The remainder must have
* headroom for at least two extra words. The scratch space
* requiring the dividend to be in the result position but it
* does make some sense really. The remainder must have
* headroom for at least two extra words. The scratch space
- * must be at least two words larger than twice the size of the
- * divisor.
+ * must be at least one word larger than the divisor.
*/
extern void mpx_udiv(mpw */*qv*/, mpw */*qvl*/, mpw */*rv*/, mpw */*rvl*/,
*/
extern void mpx_udiv(mpw */*qv*/, mpw */*qvl*/, mpw */*rv*/, mpw */*rvl*/,