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