The fix for the noncontiguous addition puzzle is to change
filled = to & mask
to filled = to | ^mask
In other words, to OR in 1-bits so the carry can travel across the irrelevant part of the register.Subtraction is similar:
https://bugfix-66.com/adbc40fa7c8c838d8d34bcd35525313dc91dea...
But for subtraction you want to AND in 0-bits so the borrow can travel.