/* file yasep/JScore/group_rop2.js
created 2005-06-11 by whygee@f-cpu.org
2007-04-11 : moved from vsp_eu.js to group_rop2.js
2007-04-15 : added the USE_ flags
2007-04-16 : NOT aliased to NAND
2007-11-05 : rebranding to YASEP
2008-11-30 : 16-bit action
2009-07-15 : changed NOT to alias ORN, not NAND
2009-07-28 : added Y
2009-07-29 : FORM_iR, FORM_IR
2009-08-04 : removed USE_IMM16 and READ_SRC1orIMM

This file implements the "ROP2" (boolean) instructions.

dependency : group_eu.js and all its parents
*/

Y.prefix=Y.GROUP_ROP2;

var f=Y.FORM_RR|Y.FORM_IRR|Y.FORM_iR|Y.FORM_IR|Y.FORM_RRR|Y.FORM_iRR,
    g=Y.ALIAS_IRR;

Y.NewOpcode("AND",
 function(s) { s.result =   (s.si4 &  s.snd)& F8; },
 function(s) { s.result =   (s.si4 &  s.snd)& F4; },f,g,
 "Boolean AND");

Y.NewOpcode("ANDN",
 function(s) { s.result =   (s.si4 & ~s.snd)& F8; },
 function(s) { s.result =   (s.si4 & ~s.snd)& F4; },f,g,
 "Boolean AND with one negated input");

Y.NewOpcode("NAND",
 function(s) { s.result = ~(s.si4 & s.snd)& F8; },
 function(s) { s.result = ~(s.si4 & s.snd)& F4; },f,g,
 "Boolean AND with negated output");

Y.NewOpcode("OR",
 function(s) { s.result =   (s.si4 |  s.snd)& F8; },
 function(s) { s.result =   (s.si4 |  s.snd)& F4; },f,g,
 "Boolean OR");

Y.NewAlias("NOT", "ORN",
 Y.FORM_RR|Y.FORM_R, Y.ALIAS_RR,
 "Boolean negation (alias to ORN)");
Y.NewOpcode("ORN",
 function(s) { s.result =   (s.si4 | ~s.snd)& F8; },
 function(s) { s.result =   (s.si4 | ~s.snd)& F4; },f,g,
 "Boolean OR with one negated input");

Y.NewOpcode("NOR",
 function(s) { s.result = ~(s.si4 | s.snd)& F8; },
 function(s) { s.result = ~(s.si4 | s.snd)& F4; },f,g,
 "Boolean OR with negated output");

Y.NewOpcode("XOR",
 function(s) { s.result =   (s.si4 ^  s.snd)& F8; },
 function(s) { s.result =   (s.si4 ^  s.snd)& F4; },f,g,
 "Boolean XOR");

Y.NewOpcode("XORN",
 function(s) { s.result =   (s.si4 ^ ~s.snd)& F8; },
 function(s) { s.result =   (s.si4 ^ ~s.snd)& F4; },f,g,
 "Boolean XOR with negated output");
