OP_XOR_POLYFILL
b.OP_TOALTSTACK();
var numBits = 31;
for (let i = numBits-1; i >= 1; i--) {
b.OP_DUP();
b.constant(1 << i);
b.OP_LESSTHAN();
b.OP_IF();
b.OP_0().tag("y_bit");
b.OP_ELSE();
b.constant(1 << i);
b.OP_SUB().tag("y");
b.OP_1().tag("y_bit");
b.OP_ENDIF();
b.OP_ROT();
b.OP_DUP();
b.constant(1 << i);
b.OP_LESSTHAN();
b.OP_IF();
b.OP_0().tag("x_bit");
b.OP_ELSE();
b.constant(1 << i);
b.OP_SUB().tag("x");
b.OP_1().tag("x_bit");
b.OP_ENDIF();
b.OP_ROT();
// xor
b.OP_NUMEQUAL();
b.OP_NOT();
b.OP_IF();
b.constant(1 << i);
b.OP_FROMALTSTACK();
b.OP_ADD();
b.OP_TOALTSTACK();
b.OP_ENDIF();
}
// xor
b.OP_NUMEQUAL();
b.OP_NOT();
b.OP_IF();
b.OP_FROMALTSTACK();
b.OP_1();
b.OP_ADD();
b.OP_ELSE();
b.OP_FROMALTSTACK();
b.OP_ENDIF();
OP_OR_POLYFILL
b.OP_0().tag("result");
b.OP_TOALTSTACK();
for (let i = numBits - 1; i >= 1; i--) {
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("y_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("y");
tb.OP_1().tag("y_bit");
tb.OP_ENDIF();
tb.OP_ROT();
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("x_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("x");
tb.OP_1().tag("x_bit");
tb.OP_ENDIF();
tb.OP_ROT();
// or
b.OP_BOOLOR();
b.OP_IF();
b.constant(1 << i);
b.OP_FROMALTSTACK();
b.OP_ADD();
b.OP_TOALTSTACK();
b.OP_ENDIF();
}
//or
b.OP_BOOLOR();
b.OP_IF();
b.OP_FROMALTSTACK();
b.OP_1();
b.OP_ADD();
b.OP_ELSE();
b.OP_FROMALTSTACK();
b.OP_ENDIF();
OP_AND_POLYFILL
b.OP_0().tag("result");
b.OP_TOALTSTACK();
for (let i = numBits - 1; i >= 1; i--) {
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("y_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("y");
tb.OP_1().tag("y_bit");
tb.OP_ENDIF();
tb.OP_ROT();
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("x_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("x");
tb.OP_1().tag("x_bit");
tb.OP_ENDIF();
tb.OP_ROT();
// and
b.OP_BOOLAND();
b.OP_IF();
b.constant(1 << i);
b.OP_FROMALTSTACK();
b.OP_ADD();
b.OP_TOALTSTACK();
b.OP_ENDIF();
}
// and
b.OP_BOOLAND();
b.OP_IF();
b.OP_FROMALTSTACK();
b.OP_1();
b.OP_ADD();
b.OP_ELSE();
b.OP_FROMALTSTACK();
b.OP_ENDIF();
OP_NAND
b.OP_0().tag("result");
b.OP_TOALTSTACK();
for (let i = numBits - 1; i >= 1; i--) {
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("y_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("y");
tb.OP_1().tag("y_bit");
tb.OP_ENDIF();
tb.OP_ROT();
tb.OP_DUP();
tb.constant(1 << i);
tb.OP_LESSTHAN();
tb.OP_IF();
tb.OP_0().tag("x_bit");
tb.OP_ELSE();
tb.constant(1 << i);
tb.OP_SUB().tag("x");
tb.OP_1().tag("x_bit");
tb.OP_ENDIF();
tb.OP_ROT();
// nand
b.OP_BOOLAND();
b.OP_NOT();
b.OP_IF();
b.constant(1 << i);
b.OP_FROMALTSTACK();
b.OP_ADD();
b.OP_TOALTSTACK();
b.OP_ENDIF();
}
// nand
b.OP_BOOLAND();
b.OP_NOT();
b.OP_IF();
b.OP_FROMALTSTACK();
b.OP_1();
b.OP_ADD();
b.OP_ELSE();
b.OP_FROMALTSTACK();
b.OP_ENDIF();