vsip_vview_si* (vsip_mdiagview_si)(
  const vsip_mview_si* v,
  int idiag) {
    vsip_index i = (idiag < 0) ? -idiag : 0,  /* row index of origin       */
               j = (idiag > 0) ?  idiag : 0;  /* col index of origin       */
    vsip_length n_row = v->col_length - i;    /* # rows from origin to end */
    vsip_length	n_col = v->row_length - j;    /* # cols from origin to end */
    return vsip_vbind_si(
                    v->block, 
                    v->offset + i * v->col_stride + j * v->row_stride, 
                    v->row_stride + v->col_stride, 
                    (n_row < n_col) ? n_row : n_col);
}
Example #2
0
vsip_vview_si *vsip_tvectview_si(
      const vsip_tview_si *v,
      vsip_tvslice slice,
      vsip_index i,
      vsip_index j)
{
     vsip_vview_si *vview = (vsip_vview_si*)NULL;
     vsip_block_si *block = v->block;
     vsip_offset offset = v->offset;
     if(slice == VSIP_TVX){
        offset += i * v->z_stride + j * v->y_stride;
        vview = vsip_vbind_si(block,offset,v->x_stride,v->x_length);

     } else if(slice == VSIP_TVY) {
        offset += i * v->z_stride + j * v->x_stride;
        vview = vsip_vbind_si(block,offset,v->y_stride,v->y_length);

     } else if(slice == VSIP_TVZ){
        offset += i * v->y_stride + j * v->x_stride;
        vview = vsip_vbind_si(block,offset,v->z_stride,v->z_length);

     }
     return vview;
}