In two's complement arithmetics, if one wants to calculate a subtraction having only an adder that calculates
cout are incoming and outgoing carries, respectively, the way is to invert the second argument (a subtrahend) and to add extra one to the sum:
a-b = a + (~b) + 1
full_adder() as defined above, that would be:
some_cout is inverted borrow here: it is one when there were no borrow in ordinary subtraction of
a and vice versa.
Next, that extra one could be actually an incoming borrow, which is also inverted: when it is one, a normal subtraction takes place, when it is zero, the result is 1 less:
For those familiar with 6502 that is readily recognizable as the exact way the SBC instruction there works.
In more "conventional" architectures like 68000, Z80 or x86, the carries in subtraction are true borrows, that is, they get inverted before and after the addition with the inverted second argument. Extra inversion usually costs some logic, die space and worse timings.
The one known member of 'inverted carries' architecture is 6502, the second known to me is ARM.
What CPU architecture was the first to optimize carries during subtraction by leaving them inverted? Were there any other adopters of such approach besides 6502 and ARM?