The tail end of x_sub implicitly assumed that an unsigned short
contains 16 bits.  Not true on Cray J90.
diff --git a/Objects/longobject.c b/Objects/longobject.c
index df69a6d..a28dbaf 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1048,6 +1048,7 @@
 		borrow = a->ob_digit[i] - borrow;
 		z->ob_digit[i] = borrow & MASK;
 		borrow >>= SHIFT;
+		borrow &= 1; /* Keep only one sign bit */
 	}
 	assert(borrow == 0);
 	if (sign < 0)