Skip to content

Commit

Permalink
Simple fix for normalizing pass by value usage in binary array operat…
Browse files Browse the repository at this point in the history
…ions. (#697)

- Make parameter passing more consistent.
  • Loading branch information
mahge committed Jan 30, 2020
1 parent 6a33916 commit f30f7a7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 29 deletions.
21 changes: 8 additions & 13 deletions OMCompiler/Compiler/Template/CodegenCFunctions.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -5564,29 +5564,24 @@ case BINARY(__) then
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
else "real_array"
'mul_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
if isArrayType(typeof(exp1)) then
'mul_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
else
'mul_alloc_<%type%>_scalar(<%e2%>, <%e1%>)'
case ADD_ARRAY_SCALAR(__) then
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
else "real_array"
let tvar = tempDecl(type, &varDecls)
if isArrayType(typeof(exp1)) then
let &preExp += '<%tvar%> = <%e1%>;<%\n%>'
'add_alloc_scalar_<%type%>(<%e2%>, &<%tvar%>)'
'add_alloc_<%type%>_scalar(<%e1%>, <%e2%>)'
else
let &preExp += '<%tvar%> = <%e2%>;<%\n%>'
'add_alloc_scalar_<%type%>(<%e1%>, &<%tvar%>)'
'add_alloc_<%type%>_scalar(<%e2%>, <%e1%>)'
case SUB_SCALAR_ARRAY(__) then
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_array"
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_array"
else "real_array"
let tvar = tempDecl(type, &varDecls)
if isArrayType(typeof(exp1)) then
let &preExp += '<%tvar%> = <%e1%>;<%\n%>'
'sub_alloc_scalar_<%type%>(<%e2%>, &<%tvar%>)'
else
let &preExp += '<%tvar%> = <%e2%>;<%\n%>'
'sub_alloc_scalar_<%type%>(<%e1%>, &<%tvar%>)'
// There is no SUB_ARRAY_SCALAR e.g. (a - 1). Instead it will be ADD_ARRAY_SCALAR(arr, NEG(scalar)) (a + -1)
'sub_alloc_scalar_<%type%>(<%e1%>, <%e2%>)'
case MUL_SCALAR_PRODUCT(__) then
let type = match ty case T_ARRAY(ty=T_INTEGER(__)) then "integer_scalar"
case T_ARRAY(ty=T_ENUMERATION(__)) then "integer_scalar"
Expand Down
23 changes: 12 additions & 11 deletions OMCompiler/SimulationRuntime/c/util/real_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,28 +712,28 @@ real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b)
return dest;
}

real_array_t add_alloc_scalar_real_array(modelica_real sc, const real_array_t *arr)
real_array_t add_alloc_real_array_scalar(const real_array_t arr, const modelica_real sc)
{
size_t nr_of_elements, i;
real_array_t dest;
clone_real_array_spec(arr, &dest);
clone_real_array_spec(&arr, &dest);
alloc_real_array_data(&dest);
nr_of_elements = base_array_nr_of_elements(*arr);
nr_of_elements = base_array_nr_of_elements(arr);
for(i=0; i < nr_of_elements; ++i) {
real_set(&dest, i, sc + real_get(*arr, i));
real_set(&dest, i, sc + real_get(arr, i));
}
return dest;
}

real_array_t sub_alloc_scalar_real_array(modelica_real sc, const real_array_t *arr)
real_array_t sub_alloc_scalar_real_array(modelica_real sc, const real_array_t arr)
{
size_t nr_of_elements, i;
real_array_t dest;
clone_real_array_spec(arr, &dest);
clone_real_array_spec(&arr, &dest);
alloc_real_array_data(&dest);
nr_of_elements = base_array_nr_of_elements(*arr);
nr_of_elements = base_array_nr_of_elements(arr);
for(i=0; i < nr_of_elements; ++i) {
real_set(&dest, i, sc - real_get(*arr, i));
real_set(&dest, i, sc - real_get(arr, i));
}
return dest;
}
Expand Down Expand Up @@ -809,6 +809,7 @@ void mul_scalar_real_array(modelica_real a,const real_array_t * b,real_array_t*
}
}

// TODO: remove me.
real_array_t mul_alloc_scalar_real_array(modelica_real a,const real_array_t b)
{
real_array_t dest;
Expand All @@ -829,7 +830,7 @@ void mul_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t*
}
}

real_array_t mul_alloc_real_array_scalar(const real_array_t a,modelica_real b)
real_array_t mul_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
{
real_array_t dest;
clone_real_array_spec(&a,&dest);
Expand Down Expand Up @@ -979,7 +980,7 @@ void div_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t*
}
}

real_array_t div_alloc_real_array_scalar(const real_array_t a,modelica_real b)
real_array_t div_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
{
real_array_t dest;
clone_real_array_spec(&a,&dest);
Expand Down Expand Up @@ -1062,7 +1063,7 @@ void pow_real_array_scalar(const real_array_t *a, modelica_real b, real_array_t*
}
}

real_array_t pow_alloc_real_array_scalar(const real_array_t a, modelica_real b)
real_array_t pow_alloc_real_array_scalar(const real_array_t a, const modelica_real b)
{
real_array_t dest;
clone_real_array_spec(&a, &dest);
Expand Down
10 changes: 5 additions & 5 deletions OMCompiler/SimulationRuntime/c/util/real_array.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,8 @@ extern void range_real_array(modelica_real start,modelica_real stop, modelica_re

extern real_array_t add_alloc_real_array(const real_array_t a, const real_array_t b);
extern void add_real_array(const real_array_t * a, const real_array_t * b, real_array_t* dest);
extern real_array_t add_alloc_scalar_real_array(const modelica_real sc, const real_array_t *arr);
extern real_array_t sub_alloc_scalar_real_array(const modelica_real sc, const real_array_t *arr);
extern real_array_t add_alloc_real_array_scalar(const real_array_t arr, const modelica_real sc);
extern real_array_t sub_alloc_scalar_real_array(const modelica_real sc, const real_array_t arr);

/* Unary subtraction */
extern void usub_real_array(real_array_t* a);
Expand All @@ -181,7 +181,7 @@ extern void mul_scalar_real_array(modelica_real a,const real_array_t * b,real_ar
extern real_array_t mul_alloc_scalar_real_array(modelica_real a,const real_array_t b);

extern void mul_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t* dest);
extern real_array_t mul_alloc_real_array_scalar(const real_array_t a,modelica_real b);
extern real_array_t mul_alloc_real_array_scalar(const real_array_t a, const modelica_real b);

extern void mul_real_array(const real_array_t *a,const real_array_t *b,real_array_t* dest);
extern real_array_t mul_alloc_real_array(const real_array_t a,const real_array_t b);
Expand All @@ -200,14 +200,14 @@ extern real_array_t div_alloc_real_array(const real_array_t a,const real_array_t


extern void div_real_array_scalar(const real_array_t * a,modelica_real b,real_array_t* dest);
extern real_array_t div_alloc_real_array_scalar(const real_array_t a,modelica_real b);
extern real_array_t div_alloc_real_array_scalar(const real_array_t a, const modelica_real b);

extern void division_real_array_scalar(threadData_t*,const real_array_t * a,modelica_real b,real_array_t* dest, const char* division_str);
extern real_array_t division_alloc_real_array_scalar(threadData_t*,const real_array_t a,modelica_real b, const char* division_str);
extern void div_scalar_real_array(modelica_real a, const real_array_t* b, real_array_t* dest);
extern real_array_t div_alloc_scalar_real_array(modelica_real a, const real_array_t b);
extern void pow_real_array_scalar(const real_array_t *a, modelica_real b, real_array_t* dest);
extern real_array_t pow_alloc_real_array_scalar(const real_array_t a, modelica_real b);
extern real_array_t pow_alloc_real_array_scalar(const real_array_t a, const modelica_real b);

extern void exp_real_array(const real_array_t * a, modelica_integer n, real_array_t* dest);
extern real_array_t exp_alloc_real_array(const real_array_t a, modelica_integer b);
Expand Down

0 comments on commit f30f7a7

Please sign in to comment.