30 lines
717 B
Plaintext
30 lines
717 B
Plaintext
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);
|
|
}
|