Lines Matching refs:elems

370 static struct rnndecaddrinfo *trymatch (struct rnndeccontext *ctx, struct rnndelem **elems, int elemsnum, uint64_t addr, int write, int dwidth, uint64_t *indices, int indicesnum) {
374 if (!rnndec_varmatch(ctx, &elems[i]->varinfo))
378 switch (elems[i]->type) {
380 if (addr < elems[i]->offset)
382 if (elems[i]->stride) {
383 idx = (addr-elems[i]->offset)/elems[i]->stride;
384 offset = (addr-elems[i]->offset)%elems[i]->stride;
387 offset = addr-elems[i]->offset;
389 if (offset >= elems[i]->width/dwidth)
391 if (elems[i]->length && idx >= elems[i]->length)
394 res->typeinfo = &elems[i]->typeinfo;
395 res->width = elems[i]->width;
396 asprintf (&res->name, "%s%s%s", ctx->colors->rname, elems[i]->name, ctx->colors->reset);
399 if (elems[i]->length != 1)
400 res->name = appendidx(ctx, res->name, idx, elems[i]->index);
415 for (idx = 0; idx < elems[i]->length || !elems[i]->length; idx++) {
416 if (addr < elems[i]->offset + elems[i]->stride * idx)
418 offset = addr - (elems[i]->offset + elems[i]->stride * idx);
419 int extraidx = (elems[i]->length != 1);
420 int nindnum = (elems[i]->name ? 0 : indicesnum + extraidx);
422 if (!elems[i]->name) {
428 res = trymatch (ctx, elems[i]->subelems, elems[i]->subelemsnum, offset, write, dwidth, nind, nindnum);
431 if (!elems[i]->name)
433 asprintf (&name, "%s%s%s", ctx->colors->rname, elems[i]->name, ctx->colors->reset);
436 if (elems[i]->length != 1)
437 name = appendidx(ctx, name, idx, elems[i]->index);
446 if (get_array_idx_offset(elems[i], addr, &idx, &offset))
448 asprintf (&name, "%s%s%s", ctx->colors->rname, elems[i]->name, ctx->colors->reset);
451 if (elems[i]->length != 1)
452 name = appendidx(ctx, name, idx, elems[i]->index);
453 if ((res = trymatch (ctx, elems[i]->subelems, elems[i]->subelemsnum, offset, write, dwidth, 0, 0))) {
490 static unsigned tryreg(struct rnndeccontext *ctx, struct rnndelem **elems, int elemsnum,
510 struct rnndelem *elem = elems[i];