+/*----- Binary polynomial arithmetic macros -------------------------------*/
+
+#define UXOR(dv, av, avl) do { \
+ mpw *_dv = (dv); \
+ const mpw *_av = (av), *_avl = (avl); \
+ \
+ while (_av < _avl) \
+ *_dv++ ^= *_av++; \
+} while (0)
+
+#define UXOR2(dv, dvl, av, avl, bv, bvl) do { \
+ mpw *_dv = (dv), *_dvl = (dvl); \
+ const mpw *_av = (av), *_avl = (avl); \
+ const mpw *_bv = (bv), *_bvl = (bvl); \
+ \
+ while (_av < _avl || _bv < _bvl) { \
+ mpw _a, _b; \
+ _a = (_av < _avl) ? *_av++ : 0; \
+ _b = (_bv < _bvl) ? *_bv++ : 0; \
+ *_dv++ = _a ^ _b; \
+ } \
+ while (_dv < _dvl) \
+ *_dv++ = 0; \
+} while (0)
+