Skip to content

Commit

Permalink
Remove more pointer arithmetic.
Browse files Browse the repository at this point in the history
  • Loading branch information
olupton committed Jan 19, 2022
1 parent e52f9d6 commit 2c16b0c
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 100 deletions.
82 changes: 49 additions & 33 deletions src/nmodl/deriv.cpp
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -476,25 +476,35 @@ is not allowed on the left hand side.");
#if CVODE
slist_data(state, count, numlist);
#endif
if (s->subtype & ARRAY) { int dim = s->araydim;
Sprintf(buf, "for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = (%s + _i) - _p;"
,dim, numlist , count, state->name);
Lappendstr(initlist, buf);
Sprintf(buf, " _dlist%d[%d+_i] = (%s + _i) - _p;}\n"
, numlist, count, name_forderiv(indx + 1));
Lappendstr(initlist, buf);
count += dim;
}else{
Sprintf(buf, "_slist%d[%d] = %s_columnindex;",
numlist, count, state->name);
Lappendstr(initlist, buf);
Sprintf(buf, " _dlist%d[%d] = %s_columnindex;\n",
numlist, count, name_forderiv(indx + 1));
Lappendstr(initlist, buf);
count++;
}
}
}
if (s->subtype & ARRAY) {
int dim = s->araydim;
Sprintf(buf,
"for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = %s_columnindex + _i;",
dim,
numlist,
count,
state->name);
Lappendstr(initlist, buf);
Sprintf(buf,
" _dlist%d[%d+_i] = %s_columnindex + _i;}\n",
numlist,
count,
name_forderiv(indx + 1));
Lappendstr(initlist, buf);
count += dim;
} else {
Sprintf(buf, "_slist%d[%d] = %s_columnindex;", numlist, count, state->name);
Lappendstr(initlist, buf);
Sprintf(buf,
" _dlist%d[%d] = %s_columnindex;\n",
numlist,
count,
name_forderiv(indx + 1));
Lappendstr(initlist, buf);
count++;
}
}
}
if (count == 0) {
diag("DERIVATIVE contains no derivatives", (char *)0);
}
Expand Down Expand Up @@ -819,15 +829,18 @@ Sprintf(buf, "error=shoot(%d, &(%s) - _p, _pmatch_time, _pmatch_value, _state_ma
ITERATE(q, deriv_state_list) {
s = SYM(q);
if (s->subtype & ARRAY) {
Sprintf(buf, "for (_i=0; _i<%d; _i++) {_state_get[%d+_i] = (%s + _i) - _p;}\n",
s->araydim, j, s->name);
j += s->araydim;
} else {
Sprintf(buf, "_state_get[%d] = &(%s) - _p;\n", j, s->name);
j++;
}
Lappendstr(initlist, buf);
}
Sprintf(buf,
"for (_i=0; _i<%d; _i++) {_state_get[%d+_i] = %s_columnindex + _i;}\n",
s->araydim,
j,
s->name);
j += s->araydim;
} else {
Sprintf(buf, "_state_get[%d] = %s_columnindex;\n", j, s->name);
j++;
}
Lappendstr(initlist, buf);
}
/* declare the arrays */
Sprintf(buf, "static int _state_get[%d], _state_match[%d];\n\
static double _match_time[%d], _match_value[%d], _found_init[%d];\n",
Expand All @@ -848,9 +861,12 @@ static double _match_time[%d], _match_value[%d], _found_init[%d];\n",
vmatch = LST(q = q->next);
if (s->subtype & ARRAY) {
imatch = STR(q = q->next);
Sprintf(buf, "for (_i=0; _i<%d; _i++) {_state_match[%d+_i] = (%s + _i) - _p;}\n",
s->araydim, j, s->name);
Lappendstr(initlist, buf);
Sprintf(buf,
"for (_i=0; _i<%d; _i++) {_state_match[%d+_i] = %s_columnindex + _i;}\n",
s->araydim,
j,
s->name);
Lappendstr(initlist, buf);
Sprintf(buf, "{int %s; for (%s=0; %s<%d; %s++) {\n",
imatch, imatch, imatch, s->araydim, imatch);
Insertstr(setup, buf);
Expand All @@ -864,8 +880,8 @@ Sprintf(buf, ";\n _match_value[%s + %d] = ", imatch, j);
j += s->araydim;
count += s->araydim;
}else{
Sprintf(buf, "_state_match[%d] = &(%s) - _p;\n", j, s->name);
Lappendstr(initlist, buf);
Sprintf(buf, "_state_match[%d] = %s_columnindex;\n", j, s->name);
Lappendstr(initlist, buf);
Sprintf(buf, "_match_time[%d] = ", j);
Insertstr(setup, buf);
copylist(tmatch, setup);
Expand Down
28 changes: 0 additions & 28 deletions src/nmodl/kinetic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1150,42 +1150,14 @@ void kinlist(Symbol* fun, Rlist* rlst) {
s->varnum,
s->name);
qv = lappendstr(initlist, buf);
#if 0 && VECTORIZE
if (vectorize){
Sprintf(buf, "for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = (%s + _i) - _p[_ix];"
,dim, fun->u.i , s->varnum, s->name);
vectorize_substitute(qv, buf);
}
#endif
Sprintf(
buf, " _dlist%d[%d+_i] = D%s_columnindex + _i;}\n", fun->u.i, s->varnum, s->name);
qv = lappendstr(initlist, buf);
#if 0 && VECTORIZE
if (vectorize){
Sprintf(buf, " _dlist%d[%d+_i] = (D%s + _i) - _p[_ix];}\n"
, fun->u.i, s->varnum, s->name);
vectorize_substitute(qv, buf);
}
#endif
} else {
Sprintf(buf, "_slist%d[%d] = %s_columnindex;", fun->u.i, s->varnum, s->name);
qv = lappendstr(initlist, buf);
#if 0 && VECTORIZE
if (vectorize){
Sprintf(buf, "_slist%d[%d] = &(%s) - _p[_ix];",
fun->u.i, s->varnum, s->name);
vectorize_substitute(qv, buf);
}
#endif
Sprintf(buf, " _dlist%d[%d] = D%s_columnindex;\n", fun->u.i, s->varnum, s->name);
qv = lappendstr(initlist, buf);
#if 0 && VECTORIZE
if (vectorize){
Sprintf(buf, " _dlist%d[%d] = &(D%s) - _p[_ix];\n",
fun->u.i, s->varnum, s->name);
vectorize_substitute(qv, buf);
}
#endif
}
s->used = 0;
}
Expand Down
73 changes: 51 additions & 22 deletions src/nmodl/sens.cpp
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -238,23 +238,39 @@ if (type == DERIVATIVE) {
assert (s);
s->usage |= DEP;
/* initialize augmented _slist and _dlist */
if (SYM(q1)->subtype & ARRAY) {
Sprintf(buf, "for (_i=0;_i<%d;_i++){\
_slist%d[%d+_i] = (%s + _i) - _p; _dlist%d[%d+_i] = (%s + _i) - _p;}\n", SYM(q1)->araydim,
fn, j + nstate*i, sname, fn, j + nstate*i, dname);
}else{
Sprintf(buf, "_slist%d[%d] = &(%s) - _p; _dlist%d[%d] = &(%s) - _p;\n",
fn, j + nstate*i, sname, fn, j + nstate*i, dname);
}
if (SYM(q1)->subtype & ARRAY) {
Sprintf(buf,
"for (_i=0;_i<%d;_i++){\n _slist%d[%d+_i] = %s_columnindex + _i; "
"_dlist%d[%d+_i] = %s_columnindex + _i;}\n",
SYM(q1)->araydim,
fn,
j + nstate * i,
sname,
fn,
j + nstate * i,
dname);
} else {
Sprintf(buf,
"_slist%d[%d] = %s_columnindex; _dlist%d[%d] = %s_columnindex;\n",
fn,
j + nstate * i,
sname,
fn,
j + nstate * i,
dname);
}
}else if (type == NONLINEAR || type == LINEAR) {
if (SYM(q1)->subtype & ARRAY) {
Sprintf(buf, "for (_i=0;_i<%d;_i++){\
_slist%d[%d+_i] = (%s + _i) - _p;}\n", SYM(q1)->araydim,
fn, j + nstate*i, sname);
}else{
Sprintf(buf, "_slist%d[%d] = &(%s) - _p;\n",
fn, j + nstate*i, sname);
}
Sprintf(buf,
"for (_i=0;_i<%d;_i++){\
_slist%d[%d+_i] = %s_columnindex + _i;}\n",
SYM(q1)->araydim,
fn,
j + nstate * i,
sname);
} else {
Sprintf(buf, "_slist%d[%d] = %s_columnindex;\n", fn, j + nstate * i, sname);
}
}
Lappendstr(initlist, buf);
}
Expand Down Expand Up @@ -312,13 +328,26 @@ depinstall(0, s, SYM(q1)->araydim, "0", "1", "", ITEM0, 0, "");

/* initialize augmented _slist and _dlist */
if (SYM(q1)->subtype & ARRAY) {
Sprintf(buf, "for (_i=0;_i<%d;_i++){\
_eplist%d[%d+_i] = (%s + _i) - _p; _emlist%d[%d+_i] = (%s + _i) - _p;}\n", SYM(q1)->araydim,
fn, j + nstate*i, sname, fn, j + nstate*i, dname);
}else{
Sprintf(buf, "_eplist%d[%d] = &(%s) - _p; _emlist%d[%d] = &(%s) - _p;\n",
fn, j + nstate*i, sname, fn, j + nstate*i, dname);
}
Sprintf(buf,
"for (_i=0;_i<%d;_i++){\
_eplist%d[%d+_i] = %s_columnindex + _i; _emlist%d[%d+_i] = %s_columnindex + _i;}\n",
SYM(q1)->araydim,
fn,
j + nstate * i,
sname,
fn,
j + nstate * i,
dname);
}else{
Sprintf(buf,
"_eplist%d[%d] = %s_columnindex; _emlist%d[%d] = %s_columnindex;\n",
fn,
j + nstate * i,
sname,
fn,
j + nstate * i,
dname);
}
Lappendstr(initlist, buf);
}
i++;
Expand Down
37 changes: 20 additions & 17 deletions src/nmodl/simultan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,24 @@ int nonlin_common(Item* q4, int sensused) /* used by massagenonlin() and mixed_e
#endif
if (s->subtype & ARRAY) {int dim = s->araydim;
using_array=1;
Sprintf(buf, "for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = (%s + _i) - _p;}\n"
,dim, numlist , counts, s->name);
counts += dim;
}else{
Sprintf(buf, "_slist%d[%d] = &(%s) - _p;\n",
numlist, counts, s->name);
counts++;
}
Lappendstr(initlist, buf);
s->used = 0;
if (sensused) {
add_sens_statelist(s);
}
}
}
Sprintf(buf,
"for(_i=0;_i<%d;_i++){\n _slist%d[%d+_i] = %s_columnindex + _i;}\n",
dim,
numlist,
counts,
s->name);
counts += dim;
} else {
Sprintf(buf, "_slist%d[%d] = %s_columnindex;\n", numlist, counts, s->name);
counts++;
}
Lappendstr(initlist, buf);
s->used = 0;
if (sensused) {
add_sens_statelist(s);
}
}
}

ITERATE(lq, eqnq) {
char *eqtype = SYM(ITM(lq))->name;
Expand Down Expand Up @@ -212,7 +215,7 @@ void init_lineq(Item* q1) /* the colon */
}
}

static char *indexstr; /* set in lin_state_term, used in linterm */
static char *indexstr; /* set in lin_state_term, used in linterm */

void lin_state_term(Item* q1, Item* q2) /* term last*/
{
Expand All @@ -231,7 +234,7 @@ void lin_state_term(Item* q1, Item* q2) /* term last*/
int dim = statsym->araydim;
using_array = 1;
Sprintf(buf,
"for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = (%s + _i) - _p;}\n",
"for(_i=0;_i<%d;_i++){_slist%d[%d+_i] = %s_columnindex + _i;}\n",
dim,
numlist,
nstate,
Expand Down

0 comments on commit 2c16b0c

Please sign in to comment.