Beispiel #1
0
static void GetArraySize( imp_image_handle *ii,
                          imp_type_handle  *it,
                          location_context *lc ) {
//Calculate size of array starting at it->array.index;
    dr_handle     dim;
    array_wlk_wlk df;
    uint_32       base_stride;
    uint_32       n_el;

    df.ii = ii;
    df.it = it;
    df.lc = lc;
    df.count = 1;
    df.dim = 0;
    df.cont = FALSE;
    DRWalkArraySibs( it->array.index, ArrayWlk, &df );
    it->array.num_elts = df.count;
    it->array.low = df.low;
    df.cont = TRUE;
    dim = GetArrayDim( it->array.index, 1 );
    if( dim != DR_HANDLE_NUL ) {
        DRWalkArraySibs( dim, ArrayWlk, &df );
    }
    it->array.dims = df.dim;
    it->typeinfo.size = df.count * it->array.base_stride;
    if( !it->array.column_major ) {
        base_stride = it->typeinfo.size;
        n_el = it->array.num_elts;
        base_stride = n_el ? base_stride / n_el : 0;
        it->array.base_stride = base_stride;
    }
    it->array.is_set = TRUE;
    it->array.is_based = FALSE;
}
Beispiel #2
0
static void GetArraySubSize( imp_image_handle *ii,
                             imp_type_handle  *it,
                             location_context *lc ) {
// Calc array size one in from previous dim
    array_wlk_wlk df;
    uint_32         new_size;
    uint_32         base_stride;
    uint_32         n_el;

    df.ii = ii;
    df.it = it;
    df.lc = lc;
    df.count = 1;
    df.dim = 0;
    df.cont = FALSE;
    DRWalkArraySibs( it->array.index, ArrayWlk, &df );
    new_size = it->typeinfo.size;
    n_el = it->array.num_elts;
    new_size = n_el ? new_size / n_el : 0;
    if( it->array.column_major ) {
        base_stride = it->array.base_stride;
        base_stride *= it->array.num_elts;
        it->array.base_stride = base_stride;
    } else {
        base_stride = it->typeinfo.size;
        base_stride = df.count ? base_stride / df.count : 0;
        it->array.base_stride = base_stride;
    }
    it->typeinfo.size = new_size;
    it->array.num_elts = df.count;
    it->array.low = df.low;
    --it->array.dims;
    it->array.is_set = TRUE;
    it->array.is_based = FALSE;
}
Beispiel #3
0
static dr_handle GetArrayDim( dr_handle index, int skip  ) {
// Get current or next dim handle
    array_wlk_skip df;

    df.skip = skip;
    if( !DRWalkArraySibs( index, ArrayWlkNext, &df ) ) {
        index = df.curr;
    } else {
        index = DR_HANDLE_NUL;
    }
    return( index );
}
Beispiel #4
0
static drmem_hdl GetArrayDim( drmem_hdl index, int skip  ){
// Get current or next dim handle
    array_wlk_skip df;

    df.skip = skip;
    if( !DRWalkArraySibs( index, ArrayWlkNext, &df ) ){
        index = df.curr;
    }else{
        index = DRMEM_HDL_NULL;
    }
    return( index );
}