Esempio n. 1
0
void vsip_mpolar_d(const vsip_cmview_d* a, const vsip_mview_d* r, const vsip_mview_d* t){
    vsip_index i;
    vsip_vview_d rv; vsip_vview_d tv; vsip_cvview_d av;
    if(a->row_stride < a->col_stride){
        for(i=0; i < a->col_length; i++){
            VI_mrowview_d(r,i,&rv); VI_mrowview_d(t,i,&tv);VI_cmrowview_d(a,i,&av);
            vpolar_d(&av,&rv,&tv);
        }
    } else {
        for(i=0; i < a->col_length; i++){
            VI_mcolview_d(r,i,&rv); VI_mcolview_d(t,i,&tv);VI_cmcolview_d(a,i,&av);
            vpolar_d(&av,&rv,&tv);
        }
    }
}
void (vsip_cgemp_d)(vsip_cscalar_d alpha,
                   const vsip_cmview_d *AA,
                   vsip_mat_op OpA,
                   const vsip_cmview_d *BB,
                   vsip_mat_op OpB,
                   vsip_cscalar_d beta,
                   const vsip_cmview_d *C){
  vsip_cmview_d At = *AA,
                Bt = *BB;
  vsip_cmview_d *A = &At,
                *B = &Bt;
  vsip_cscalar_d (*dot)(const vsip_cvview_d*,const vsip_cvview_d*) = vsip_cvdot_d;
  if((OpA == 1) || (OpA == 2)){
       A->row_length = AA->col_length;
       A->col_length = AA->row_length;
       A->row_stride = AA->col_stride;
       A->col_stride = AA->row_stride;
  }
  if((OpB == 1) || (OpB == 2)){
       B->row_length = BB->col_length;
       B->col_length = BB->row_length;
       B->row_stride = BB->col_stride;
       B->col_stride = BB->row_stride;
  }
  {
      vsip_length M = A->col_length,
                  N = B->row_length;
      vsip_length i,j;
      vsip_cvview_d aa,bb,cc,*a,*b,*c,*af,*bs;
      vsip_offset Boffset = B->offset;
      vsip_stride Brow_stride = B->row_stride,
                  Acol_stride = A->col_stride;
                  a = VI_cmrowview_d(A,0,&aa);
                  b = VI_cmcolview_d(B,0,&bb);
                  af = a; bs = b;
      if( ((OpA == 2) || (OpA == 3)) && ((OpB !=2) || (OpB !=3))){
                  dot = vsip_cvjdot_d;
                  af = b;
                  bs = a;
      }
      if( ((OpA != 2) || (OpA != 3)) && ((OpB ==2) || (OpB ==3))){
                 dot = vsip_cvjdot_d;
      } 
      if( ((OpA == 2) || (OpA == 3)) && ((OpB ==2) || (OpB ==3))){
                  dot = VI_cvjjdot_d;
      }
      c = VI_cmrowview_d(C,0,&cc);
      {
        vsip_cscalar_d temp;
        vsip_scalar_d  temp_r;
        vsip_stride str  = c->stride * c->block->cstride;
        vsip_stride str1 = C->col_stride * C->block->cstride;
        vsip_scalar_d  *c_pr_r =(vsip_scalar_d*) (c->block->R->array + c->offset * c->block->cstride),
                       *c_pr1_r = c_pr_r;
        vsip_scalar_d  *c_pr_i =(vsip_scalar_d*) (c->block->I->array + c->offset * c->block->cstride),
                       *c_pr1_i = c_pr_i;
        for(i = 0; i < M; i++){
          c_pr_r = c_pr1_r;
          c_pr_i = c_pr1_i;
          b->offset = Boffset;
          for(j =0; j < N; j++){
               temp_r = beta.r * *c_pr_r - beta.i * *c_pr_i;
              *c_pr_i = beta.i * *c_pr_r + beta.r * *c_pr_i;
              *c_pr_r = temp_r;
               temp = dot(af,bs);
              *c_pr_r += (alpha.r * temp.r - alpha.i * temp.i);
              *c_pr_i += (alpha.i * temp.r + alpha.r * temp.i);
               c_pr_r += str;
               c_pr_i += str;
               b->offset += Brow_stride;
          }  
          a->offset += Acol_stride;
          c_pr1_r += str1;
          c_pr1_i += str1;
        }
      }
   }  
}