Interfacing function
eng


MATMUL

File content


function [x,y,typ]=MATMUL(job,arg1,arg2)
//
// Copyright INRIA
x=[];y=[];typ=[];
select job
case 'plot' then
  standard_draw(arg1)
case 'getinputs' then
  [x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
  [x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
  [x,y]=standard_origin(arg1)
case 'set' then
  x=arg1
  graphics=x.graphics;label=graphics.exprs
  model=x.model;
  if model.ipar==[] then model.ipar=1;end
  if size(label,'*')==1 then label(2)=sci2exp(1),end //compatiblity
  if size(label,'*')==2 then label(3)=sci2exp(1);end //compatibility
  while %t do
    [ok,dtype,rule,np,exprs]=getvalue(['Set MATMUL parameter';
    				  'For the Multipication rule:';
				  '    1= Matrix by Matrix';
				  '    2= Matrix by Matrix element wise ';
				  '    3= Matrix by Scalar';
				  'In the third case the second input will be the scalar'],..
	    ['Datatype(1=real double 2=Complex 3=int32 ...)';
	     'Multiplication rule';
	     'Do on Overflow(0=Nothing 1=Saturate 2=Error)'],list('vec',1,'vec',1,'vec',1),label)
    if ~ok then break,end
    rule=int(rule)
    if (dtype<1|dtype>8) then message("type is not supported");ok=%f;end
    if (rule<1|rule>3) then message('Multiplication rule must be only 1,2 or 3');ok=%f;end
    if (dtype==1|dtype==2) then np=0;end
    TABMIN=[0;0;-(2^31);-(2^15);-(2^7);0;0;0]
    TABMAX=[0;0;(2^31)-1;(2^15)-1;(2^7)-1;(2^32)-1;(2^16)-1;(2^8)-1]
    if rule==2 then
       if np==0 then
         model.sim=list('matmul2_m',4)
       elseif np==1 then
         model.sim=list('matmul2_s',4)
       else 
	 model.sim=list('matmul2_e',4)
       end
    elseif rule==3 then 
       if np==0 then
         model.sim=list('matbyscal',4)
       elseif np==1 then
         model.sim=list('matbyscal_s',4)
       else 
	 model.sim=list('matbyscal_e',4)
       end
    else
    if (dtype==1) then
	 model.sim=list('matmul_m',4);
    elseif (dtype==2) then
 	 model.sim=list('matzmul_m',4);
    elseif dtype==3 then
	  if np==0 then
             model.sim=list('matmul_i32n',4)
	  elseif np==1 then
             model.sim=list('matmul_i32s',4)
	  else 
	     model.sim=list('matmul_i32e',4)
	  end
    elseif dtype==4 then
	  if np==0 then
             model.sim=list('matmul_i16n',4)
	  elseif np==1 then
             model.sim=list('matmul_i16s',4)
	  else 
	     model.sim=list('matmul_i16e',4)
	  end
    elseif dtype==5 then
	  if np==0 then
             model.sim=list('matmul_i8n',4)
	  elseif np==1 then
             model.sim=list('matmul_i8s',4)	     
	  else 
	     model.sim=list('matmul_i8e',4)
	  end
    elseif dtype==6 then
	   if np==0 then
             model.sim=list('matmul_ui32n',4)
	   elseif np==1 then
             model.sim=list('matmul_ui32s',4)
	   else 
	     model.sim=list('matmul_ui32e',4)
	   end
    elseif dtype==7 then
	  if np==0 then
             model.sim=list('matmul_ui16n',4)
	  elseif np==1 then
             model.sim=list('matmul_ui16s',4)
	  else 
	     model.sim=list('matmul_ui16e',4)
	  end
    elseif dtype==8 then
	  if np==0 then
             model.sim=list('matmul_ui8n',4)
	  elseif np==1 then
             model.sim=list('matmul_ui8s',4)
	  else 
	     model.sim=list('matmul_ui8e',4)
	  end
    end
    end
    kmin=TABMIN(dtype);kmax=TABMAX(dtype)
    it=dtype*ones(1,2);
    ot=dtype
    if rule==1 then
    	in=[-1 -2;-2 -3];
    	out=[-1 -3];
    elseif rule==2 then
	in=[-1 -2;-1 -2]
	out=[-1 -2]
    else
        in=[-1 -2;1 1]
	out=[-1 -2]
    end
    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
    if ok then
      //if model.ipar<>np then needcompile=1;end
      label=exprs;
      model.ipar=rule
      model.rpar=[kmin;kmax]
      graphics.exprs=label;
      x.graphics=graphics;x.model=model;
      arg1=x
      break;
    end
  end
   //needcompile=resume(needcompile)
case 'define' then
  model=scicos_model()
  model.sim=list('matmul_m',4)

  model.in=[-1;-2]
  model.in2=[-2;-3]
  model.out=-1
  model.out2=-3
  model.dep_ut=[%t %f]

  label=[sci2exp(1)]
  gr_i=['xstringb(orig(1),orig(2),[''MATMUL''],sz(1),sz(2),''fill'');']
  x=standard_define([2 2],model,label,gr_i)
end
endfunction