function XOR(%a, %b) { return (!%a && %b) || (%a && !%b); } //Seperated by space function HalfAdd(%a, %b) { return XOR(%a, %b) SPC %a && %b; } //First word is the carry bit function FullAdd(%a, %b, %c0) { %r1 = HalfAdd(%a, %c0); %r2 = HalfAdd(getWord(%r1, 0), %b); %r3 = getWord(%r1, 1) || getWord(%r2, 1); return %r3 SPC getWord(%r2, 0); } //Outputs each bit seperated by a space. function FourBitFullAdd(%a0, %a1, %a2, %a3, %b0, %b1, %b2, %b3) { %r0 = FullAdd(%a0, %b0, 0); %r1 = FullAdd(%a1, %b1, getWord(%r0, 0)); %r2 = FullAdd(%a2, %b2, getWord(%r1, 0)); %r3 = FullAdd(%a3, %b3, getWord(%r2, 0)); return getWord(%r0,1) SPC getWord(%r1,1) SPC getWord(%r2,1) SPC getWord(%r3,1) SPC getWord(%r3,0); }