/* file yasep/JScore/group_mul.js
created 2009-05-26 by whygee@f-cpu.org from group_mul.js
2009-07-28 : added Y
2009-07-29 : FORM_iR
2009-07-29 : FORM_iR
2009-08-04 : NO_WRITEBACK
2009-08-14 : MULI
2009-08-15 : IgnoreImmSign

This file implements the "MUL" (multiply) Execution Unit

dependency : group_eu.js and all its parents
*/

Y.prefix=Y.GROUP_MUL;

Y.NewOpcode("MUL8L",
 function(s) {
   var sa= s.snd & 255,
       sb= s.si4 & 255;
   s.result = sa * sb;
 },
 function(s) {
   var sa= s.snd & 255,
       sb= s.si4 & 255;
   s.result = sa * sb;
 },
 Y.FORM_RR | Y.FORM_IRR | Y.FORM_iR | Y.FORM_IR | Y.FORM_iRR | Y.FORM_RRR,
 Y.OPTIONAL|Y.ALIAS_IRR|Y.IMM16_8LSB|Y.IgnoreImmSign,
 "Multiply lower byte (unsigned)");

Y.NewOpcode("MUL8H",
 function(s) {
   var sa=  s.si4       & 255,
       sb= (s.snd >> 8) & 255;
   s.result = sa * sb;
 },
 function(s) {
   var sa=  s.si4       & 255,
       sb= (s.snd >> 8) & 255;
   s.result = sa * sb;
 },
 Y.FORM_RR | Y.FORM_IRR | Y.FORM_iR | Y.FORM_IR | Y.FORM_iRR | Y.FORM_RRR,
 Y.OPTIONAL|Y.ALIAS_IRR|Y.IMM16_8LSB|Y.IgnoreImmSign,
 "Multiply higher byte (unsigned)");

Y.NewOpcode("MULI",
 null, null,
 Y.FORM_RR | Y.FORM_IR | Y.FORM_iR,
 Y.OPTIONAL|Y.NO_WRITEBACK|Y.IgnoreImmSign,
 "Initialize one multiply LUT entry");
