Skip to content

Commit

Permalink
- Changed modelica_integer to long, so it is 64-bit on 64-bit platforms
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7541 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Dec 21, 2010
1 parent 2a47167 commit 5154a2a
Show file tree
Hide file tree
Showing 18 changed files with 107 additions and 108 deletions.
12 changes: 6 additions & 6 deletions Compiler/runtime/Dynload.cpp
Expand Up @@ -240,7 +240,7 @@ static int execute_function(void *in_arg, void **out_arg,
}

static void *generate_array(enum type_desc_e type, int curdim, int ndims,
int *dim_size, void **data)
_index_t *dim_size, void **data)
{
void *lst = (void *) mk_nil();
void *dimLst = (void*) mk_nil();
Expand Down Expand Up @@ -665,7 +665,7 @@ static int get_array_type_and_dims(type_description *desc, void *arrdata)
}
}

static int get_array_sizes(int dims, int *dim_size, void *dimLst)
static int get_array_sizes(int dims, _index_t *dim_size, void *dimLst)
{
int i;
void *ptr = dimLst;
Expand All @@ -679,7 +679,7 @@ static int get_array_sizes(int dims, int *dim_size, void *dimLst)
return 0;
}

static int get_array_data(int curdim, int dims, const int *dim_size,
static int get_array_data(int curdim, int dims, const _index_t *dim_size,
void *arrdata, enum type_desc_e type, void **data)
{
void *ptr = arrdata;
Expand Down Expand Up @@ -747,15 +747,15 @@ static int get_array_data(int curdim, int dims, const int *dim_size,

static int parse_array(type_description *desc, void *arrdata, void *dimLst)
{
int dims, *dim_size;
_index_t dims, *dim_size;
void *data;
assert(desc->type == TYPE_DESC_NONE);
dims = get_array_type_and_dims(desc, arrdata);
if (dims < 1) {
printf("dims: %d\n", dims);
printf("dims: %d\n", (int) dims);
return -1;
}
dim_size = (int*) malloc(sizeof(int) * dims);
dim_size = (_index_t*) malloc(sizeof(_index_t) * dims);
switch (desc->type) {
case TYPE_DESC_REAL_ARRAY:
desc->data.real_array.ndims = dims;
Expand Down
7 changes: 4 additions & 3 deletions Compiler/susan_codegen/SimCode/SimCodeC.tpl
Expand Up @@ -3877,6 +3877,7 @@ template algStatement(DAE.Statement stmt, Context context, Text &varDecls /*BUFP
case s as STMT_WHILE(__) then algStmtWhile(s, context, &varDecls /*BUFD*/)
case s as STMT_ASSERT(__) then algStmtAssert(s, context, &varDecls /*BUFD*/)
case s as STMT_TERMINATE(__) then algStmtTerminate(s, context, &varDecls /*BUFD*/)

case s as STMT_WHEN(__) then algStmtWhen(s, context, &varDecls /*BUFD*/)
case s as STMT_BREAK(__) then 'break;<%\n%>'
case s as STMT_FAILURE(__) then algStmtFailure(s, context, &varDecls /*BUFD*/)
Expand Down Expand Up @@ -4503,7 +4504,7 @@ template daeExp(Exp exp, Context context, Text &preExp /*BUFP*/, Text &varDecls
"Generates code for an expression."
::=
match exp
case e as ICONST(__) then integer
case e as ICONST(__) then '(modelica_integer) <%integer%>' /* Yes, we need to cast int to long on 64-bit arch... */
case e as RCONST(__) then real
case e as SCONST(__) then daeExpSconst(string, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
case e as BCONST(__) then if bool then "(1)" else "(0)"
Expand Down Expand Up @@ -4610,7 +4611,7 @@ template daeExpCrefRhsIndexSpec(list<Subscript> subs, Context context,
case INDEX(__) then
let expPart = daeExp(exp, context, &preExp /*BUFC*/, &varDecls /*BUFD*/)
<<
(0), make_index_array(1, <%expPart%>), 'S'
(0), make_index_array(1, (int) <%expPart%>), 'S'
>>
case WHOLEDIM(__) then
<<
Expand All @@ -4621,7 +4622,7 @@ template daeExpCrefRhsIndexSpec(list<Subscript> subs, Context context,
let tmp = tempDecl("modelica_integer", &varDecls /*BUFD*/)
let &preExp += '<%tmp%> = size_of_dimension_integer_array(<%expPart%>, 1);<%\n%>'
<<
<%tmp%>, integer_array_make_index_array(&<%expPart%>), 'A'
(int) <%tmp%>, integer_array_make_index_array(&<%expPart%>), 'A'
>>
;separator=", ")
let tmp = tempDecl("index_spec_t", &varDecls /*BUFD*/)
Expand Down
16 changes: 8 additions & 8 deletions c_runtime/base_array.c
Expand Up @@ -79,7 +79,7 @@ int base_array_ok(base_array_t *a)
for (i = 0; i < a->ndims; ++i) {
if (a->dim_size[i] < 0)
{
fprintf(stderr, "base_array.c: array dimension size for dimension %d is < 0!\n", a->dim_size[i]); fflush(stderr);
fprintf(stderr, "base_array.c: array dimension size for dimension %d is < 0!\n", (int) a->dim_size[i]); fflush(stderr);
return 0;
}
}
Expand Down Expand Up @@ -144,7 +144,7 @@ int base_array_shape_eq(base_array_t *a, base_array_t *b)
for (i = 0; i < a->ndims; ++i) {
if (a->dim_size[i] != b->dim_size[i]) {
fprintf(stderr, "a->dim_size[%d] != b->dim_size[%d], %d != %d\n",
i, i, a->dim_size[i], b->dim_size[i]);
i, i, (int) a->dim_size[i], (int) b->dim_size[i]);
return 0;
}
}
Expand Down Expand Up @@ -172,7 +172,7 @@ int index_spec_fit_base_array(index_spec_t *s, base_array_t *a)
if ((s->index[i][0] <= 0) || (s->index[i][0] > a->dim_size[i])) {
fprintf(stderr,
"scalar s->index[%d][0] == %d incorrect, a->dim_size[%d] == %d\n",
i, s->index[i][0], i, a->dim_size[i]);
i, (int) s->index[i][0], i, (int) a->dim_size[i]);
return 0;
}
}
Expand All @@ -182,7 +182,7 @@ int index_spec_fit_base_array(index_spec_t *s, base_array_t *a)
(s->index[i][j] > a->dim_size[i]))) {
fprintf(stderr,
"array s->index[%d][%d] == %d incorrect, a->dim_size[%d] == %d\n",
i, j, s->index[i][j], i, a->dim_size[i]);
i, j, (int) s->index[i][j], i, (int) a->dim_size[i]);
return 0;
}
}
Expand Down Expand Up @@ -226,7 +226,7 @@ size_t alloc_base_array(base_array_t *dest, int ndims, va_list ap)
dest->dim_size = size_alloc(ndims);

for (i = 0; i < ndims; ++i) {
dest->dim_size[i] = va_arg(ap, int);
dest->dim_size[i] = va_arg(ap, _index_t);
}

return base_array_nr_of_elements(dest);
Expand All @@ -250,7 +250,7 @@ void clone_base_array_spec(base_array_t *source, base_array_t *dest)
a[1:3] := b;
*/

size_t calc_base_index_spec(int ndims, int *idx_vec,
size_t calc_base_index_spec(int ndims, _index_t *idx_vec,
base_array_t *arr, index_spec_t *spec)
{
/* idx_vec is zero based */
Expand Down Expand Up @@ -279,7 +279,7 @@ size_t calc_base_index_spec(int ndims, int *idx_vec,
}

/* Uses zero based indexing */
size_t calc_base_index(int ndims, int *idx_vec, base_array_t *arr)
size_t calc_base_index(int ndims, _index_t *idx_vec, base_array_t *arr)
{
int i;
size_t index = 0;
Expand All @@ -302,7 +302,7 @@ size_t calc_base_index_va(base_array_t *source, int ndims, va_list ap)

index = 0;
for (i = 0; i < ndims; ++i) {
dim_i = va_arg(ap, int) - 1;
dim_i = va_arg(ap, _index_t) - 1;
index = index * source->dim_size[i] + dim_i;
}

Expand Down
6 changes: 3 additions & 3 deletions c_runtime/base_array.h
Expand Up @@ -40,7 +40,7 @@
struct base_array_s
{
int ndims;
int *dim_size;
_index_t *dim_size;
void *data;
};

Expand Down Expand Up @@ -76,9 +76,9 @@ void check_base_array_dim_sizes_except(int k, base_array_t **elts, int n);
int base_array_shape_eq(base_array_t *a, base_array_t *b);
int base_array_one_element_ok(base_array_t *a);

size_t calc_base_index_spec(int ndims, int *idx_vec,
size_t calc_base_index_spec(int ndims, _index_t* idx_vec,
base_array_t *arr, index_spec_t *spec);
size_t calc_base_index(int ndims, int *idx_vec, base_array_t *arr);
size_t calc_base_index(int ndims, _index_t *idx_vec, base_array_t *arr);
size_t calc_base_index_va(base_array_t *source, int ndims, va_list ap);

int index_spec_fit_base_array(index_spec_t *s, base_array_t *a);
Expand Down
18 changes: 9 additions & 9 deletions c_runtime/boolean_array.c
Expand Up @@ -159,15 +159,15 @@ void copy_boolean_array(boolean_array_t *source, boolean_array_t *dest)
a[1:3] := b;
*/

static inline modelica_boolean *calc_boolean_index_spec(int ndims, int *idx_vec,
static inline modelica_boolean *calc_boolean_index_spec(int ndims, _index_t* idx_vec,
boolean_array_t *arr,
index_spec_t *spec)
{
return boolean_ptrget(arr, calc_base_index_spec(ndims, idx_vec, arr, spec));
}

/* Uses zero based indexing */
modelica_boolean *calc_boolean_index(int ndims, int *idx_vec,
modelica_boolean *calc_boolean_index(int ndims, _index_t *idx_vec,
boolean_array_t *arr)
{
return boolean_ptrget(arr, calc_base_index(ndims, idx_vec, arr));
Expand All @@ -186,7 +186,7 @@ void print_boolean_matrix(boolean_array_t *source)
modelica_boolean value;

if (source->ndims == 2) {
printf("%d X %d matrix:\n", source->dim_size[0], source->dim_size[1]);
printf("%d X %d matrix:\n", (int) source->dim_size[0], (int) source->dim_size[1]);
for (i = 0; i < source->dim_size[0]; ++i) {
for (j = 0; j < source->dim_size[1]; ++j) {
value = boolean_get(source, i * source->dim_size[1] + j);
Expand Down Expand Up @@ -276,9 +276,9 @@ void indexed_assign_boolean_array(boolean_array_t* source,
boolean_array_t* dest,
index_spec_t* dest_spec)
{
int* idx_vec1;
int* idx_vec2;
int* idx_size;
_index_t* idx_vec1;
_index_t* idx_vec2;
_index_t* idx_size;
int quit;
int i,j;
state mem_state;
Expand Down Expand Up @@ -341,9 +341,9 @@ void index_boolean_array(boolean_array_t* source,
index_spec_t* source_spec,
boolean_array_t* dest)
{
int* idx_vec1;
int* idx_vec2;
int* idx_size;
_index_t* idx_vec1;
_index_t* idx_vec2;
_index_t* idx_size;
int quit;
int j;
int i;
Expand Down
2 changes: 1 addition & 1 deletion c_runtime/boolean_array.h
Expand Up @@ -83,7 +83,7 @@ void copy_boolean_array_data_mem(boolean_array_t* source, modelica_boolean* dest
/* Copy boolean array*/
void copy_boolean_array(boolean_array_t* source, boolean_array_t* dest);

m_boolean* calc_boolean_index(int ndims, int* idx_vec, boolean_array_t* arr);
m_boolean* calc_boolean_index(int ndims, _index_t* idx_vec, boolean_array_t* arr);
m_boolean* calc_boolean_index_va(boolean_array_t* source,int ndims,va_list ap);

void put_boolean_element(m_boolean value,int i1,boolean_array_t* dest);
Expand Down
18 changes: 9 additions & 9 deletions c_runtime/index_spec.c
Expand Up @@ -90,9 +90,9 @@ void create_index_spec(index_spec_t* dest, int nridx, ...)
dest->index = index_alloc(nridx);
dest->index_type = char_alloc(nridx);
for (i = 0; i < nridx; ++i) {
dest->dim_size[i] = va_arg(ap, int);
dest->index[i] = va_arg(ap, int*);
dest->index_type[i] = (char) va_arg(ap,int); /* char is cast to int by va_arg.*/
dest->dim_size[i] = va_arg(ap, _index_t);
dest->index[i] = va_arg(ap, _index_t*);
dest->index_type[i] = (char) va_arg(ap,_index_t); /* char is cast to int by va_arg.*/
}
va_end(ap);
}
Expand All @@ -102,16 +102,16 @@ void create_index_spec(index_spec_t* dest, int nridx, ...)
* Creates an integer array of indices to be used by e.g.
* create_index_spec above.
*/
int* make_index_array(int nridx, ...)
_index_t* make_index_array(int nridx, ...)
{
int i;
int* res;
_index_t* res;
va_list ap;
va_start(ap,nridx);

res = size_alloc(nridx);
for (i = 0; i < nridx; ++i) {
res[i] = va_arg(ap,int);
res[i] = va_arg(ap,_index_t);
}

return res;
Expand All @@ -135,7 +135,7 @@ void print_size_array(int size, size_t* arr)
* The function returns 0 if new index is calculated and 1 if no more indices
* are available (all indices traversed).
*/
int next_index(int ndims, int* idx, int* size)
int next_index(int ndims, _index_t* idx, _index_t* size)
{
int d = ndims - 1;

Expand All @@ -158,12 +158,12 @@ void print_index_spec(index_spec_t* spec)
for(i = 0; i < spec->ndims; ++i) {
switch (spec->index_type[i]) {
case 'S':
printf("%d", *spec->index[i]);
printf("%d", (int) *spec->index[i]);
break;
case 'A':
printf("{");
for (k = 0; k < spec->dim_size[i]; ++k) {
printf("%d", spec->index[i][k]);
printf("%d", (int) spec->index[i][k]);
if (k != (spec->dim_size[i] - 1)) printf(",");
}
printf("}");
Expand Down
11 changes: 6 additions & 5 deletions c_runtime/index_spec.h
Expand Up @@ -33,6 +33,7 @@
#define INDEX_SPEC_H_

#include "inline.h"
#include "memory_pool.h"

/* This structure holds indexes when subscripting an array.
* ndims - number of subscripts, E.g. A[1,{2,3},:] => ndims = 3
Expand All @@ -44,21 +45,21 @@
*/
struct index_spec_s
{
int ndims; /* number of indices/subscripts */
int* dim_size; /* size for each subscript */
_index_t ndims; /* number of indices/subscripts */
_index_t* dim_size; /* size for each subscript */
char* index_type; /* type of each subscript, any of 'S','A' or 'W' */
int** index; /* all indices*/
_index_t** index; /* all indices*/
};

typedef struct index_spec_s index_spec_t;

int index_spec_ok(index_spec_t* s);
void alloc_index_spec(index_spec_t* s);
void create_index_spec(index_spec_t* dest, int nridx, ...);
int* make_index_array(int nridx,...);
_index_t* make_index_array(int nridx,...);
static inline int imax(int i, int j)
{ return ((i < j) ? j : i); }
int next_index(int ndims, int* idx, int* size);
int next_index(int ndims, _index_t* idx, _index_t* size);

void print_index_spec(index_spec_t* spec);

Expand Down
22 changes: 11 additions & 11 deletions c_runtime/integer_array.c
Expand Up @@ -163,15 +163,15 @@ void copy_integer_array(integer_array_t *source, integer_array_t *dest)
a[1:3] := b;
*/

static inline modelica_integer* calc_integer_index_spec(int ndims, int* idx_vec,
static inline modelica_integer* calc_integer_index_spec(int ndims, _index_t* idx_vec,
integer_array_t* arr,
index_spec_t* spec)
{
return integer_ptrget(arr, calc_base_index_spec(ndims, idx_vec, arr, spec));
}

/* Uses zero based indexing */
modelica_integer* calc_integer_index(int ndims, int* idx_vec,
modelica_integer* calc_integer_index(int ndims, _index_t* idx_vec,
integer_array_t* arr)
{
return integer_ptrget(arr, calc_base_index(ndims, idx_vec, arr));
Expand All @@ -190,7 +190,7 @@ void print_integer_matrix(integer_array_t* source)
modelica_integer value;

if (source->ndims == 2) {
printf("%d X %d matrix:\n", source->dim_size[0], source->dim_size[1]);
printf("%d X %d matrix:\n", (int) source->dim_size[0], (int) source->dim_size[1]);
for (i = 0; i < source->dim_size[0]; ++i) {
for (j = 0; j < source->dim_size[1]; ++j) {
value = integer_get(source, i * source->dim_size[1] + j);
Expand Down Expand Up @@ -280,9 +280,9 @@ void indexed_assign_integer_array(integer_array_t* source,
integer_array_t* dest,
index_spec_t* dest_spec)
{
int* idx_vec1;
int* idx_vec2;
int* idx_size;
_index_t* idx_vec1;
_index_t* idx_vec2;
_index_t* idx_size;
int quit;
int i,j;
state mem_state;
Expand Down Expand Up @@ -346,9 +346,9 @@ void index_integer_array(integer_array_t* source,
index_spec_t* source_spec,
integer_array_t* dest)
{
int* idx_vec1;
int* idx_vec2;
int* idx_size;
_index_t* idx_vec1;
_index_t* idx_vec2;
_index_t* idx_size;
int quit;
int j;
int i;
Expand Down Expand Up @@ -1342,9 +1342,9 @@ void skew_integer_array(integer_array_t* x,integer_array_t* dest)
** create_index_spec defined in index_spec.c
*/

modelica_integer* integer_array_make_index_array(integer_array_t *arr)
_index_t* integer_array_make_index_array(integer_array_t *arr)
{
return (modelica_integer *) arr->data;
return arr->data;
}


Expand Down

0 comments on commit 5154a2a

Please sign in to comment.