◄ WORLD V · SONNY 5DART 380 · a helldive at the net

CARRY-SELECT compute both answers in advance — then just pick the one the carry chose

Waiting for a carry to arrive is dead time. The carry-select adder refuses to wait: it computes each block's sum twice in parallel — once assuming the carry-in is 0, once assuming 1 — and when the real carry finally arrives, a multiplexer simply selects the pre-computed answer that matches. It trades work for time: double the adders, but the block's result is ready the instant the carry is known. It is speculation in hardware — do both futures, discard the wrong one — the same shape as a CPU's branch speculation, in an adder.

THE TECHNIQUE precompute sum for cin=0 AND cin=1 ; mux on the real carry

The demo precomputes 11+6 for both carry-in values, then selects on the real carry: live demo


HISTORY & CREDIT Bedrij, 1962

“You must know the carry before you can add.” — compute both answers first, then pick: the block is ready the moment the carry lands. Speculation, in an adder. cited

1962 · O. J. Bedrij (IBM) — the carry-select adder.
work for time · two adders per block; a mux picks on the arriving carry.
kin · branch speculation — do both paths, keep the one the condition chose (the graveyard for the other).

Both futures computed, the wrong one thrown away when the carry decides. Speculation, wearing an adder's clothes. Bedrij 1962

RECOMMEND FOR I-13 both sums, then the pick, on the compiler

On the canonical compiler, 11+6 is precomputed for carry-in 0 (→ 17) and 1 (→ 18); the real carry selects:

$ i13 run c_carryselect.i13 # sum0 = a+b+0 ; sum1 = a+b+1 RUN OK · 22 step(s) · peak stack 2 · call depth 0 sum0 = 17 sum1 = 18 -- both computed in advance; the arriving carry picks one
Recommend: the carry-select adder is speculation in hardware — both answers ready, the carry just picks — and i13 precomputes 17 and 18. Not a keeper (trading work for time is a resource property; the selected output is the same sum). The dart that shows the adder doing what a CPU does at a branch: compute both futures, discard the one the condition rejects.