Skip to content

Commit a80c5ec

Browse files
author
Henning Kiel
committed
make simple functions static inline to save the jump instructions
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@10817 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 97a1bb2 commit a80c5ec

File tree

4 files changed

+133
-155
lines changed

4 files changed

+133
-155
lines changed

SimulationRuntime/c/util/utility.c

Lines changed: 0 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -32,73 +32,6 @@
3232

3333
#include "utility.h"
3434

35-
int in_range_integer(modelica_integer i,
36-
modelica_integer start,
37-
modelica_integer stop)
38-
{
39-
if (start <= stop) {
40-
if ((i >= start) && (i <= stop)) {
41-
return 1;
42-
}
43-
} else {
44-
if ((i >= stop) && (i <= start)) {
45-
return 1;
46-
}
47-
}
48-
return 0;
49-
}
50-
51-
int in_range_real(modelica_real i,
52-
modelica_real start,
53-
modelica_real stop)
54-
{
55-
if (start <= stop) {
56-
if ((i >= start) && (i <= stop)) {
57-
return 1;
58-
}
59-
} else {
60-
if ((i >= stop) && (i <= start)) {
61-
return 1;
62-
}
63-
}
64-
return 0;
65-
}
66-
67-
modelica_real modelica_div(modelica_real x, modelica_real y)
68-
{
69-
return (modelica_real)((modelica_integer)(x/y));
70-
}
71-
72-
modelica_real modelica_mod_real(modelica_real x, modelica_real y)
73-
{
74-
return (x - (floor(x/y) * y));
75-
}
76-
77-
modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y)
78-
{
79-
return x % y;
80-
}
81-
82-
modelica_real modelica_rem_real(modelica_real x, modelica_real y)
83-
{
84-
return x - (y * (modelica_div(x,y)));
85-
}
86-
87-
modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y)
88-
{
89-
return x - (y * ((x / y)));
90-
}
91-
92-
modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y)
93-
{
94-
return (x < y) ? x : y;
95-
}
96-
97-
modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y)
98-
{
99-
return (x > y) ? x : y;
100-
}
101-
10235
modelica_real real_int_pow(modelica_real base, modelica_integer n)
10336
{
10437
modelica_real result = 1.0;

SimulationRuntime/c/util/utility.h

Lines changed: 66 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,81 @@
3636
#include <math.h>
3737
#include "openmodelica.h"
3838

39-
extern int in_range_integer(modelica_integer i,
39+
40+
static inline int in_range_integer(modelica_integer i,
4041
modelica_integer start,
41-
modelica_integer stop);
42+
modelica_integer stop)
43+
{
44+
if (start <= stop) {
45+
if ((i >= start) && (i <= stop)) {
46+
return 1;
47+
}
48+
} else {
49+
if ((i >= stop) && (i <= start)) {
50+
return 1;
51+
}
52+
}
53+
return 0;
54+
}
4255

43-
extern int in_range_real(modelica_real i,
56+
static inline int in_range_real(modelica_real i,
4457
modelica_real start,
45-
modelica_real stop);
58+
modelica_real stop)
59+
{
60+
if (start <= stop) {
61+
if ((i >= start) && (i <= stop)) {
62+
return 1;
63+
}
64+
} else {
65+
if ((i >= stop) && (i <= start)) {
66+
return 1;
67+
}
68+
}
69+
return 0;
70+
}
71+
4672

4773
/* div is already defined in stdlib, so it's redefined here to modelica_div */
48-
extern modelica_real modelica_div(modelica_real x, modelica_real y);
74+
static inline modelica_real modelica_div(modelica_real x, modelica_real y)
75+
{
76+
return (modelica_real)((modelica_integer)(x/y));
77+
}
78+
79+
4980
/* fmod in math.h does not work in the same way as mod defined by modelica, so
5081
* we need to define our own mod. */
51-
extern modelica_real modelica_mod_real(modelica_real x, modelica_real y);
52-
extern modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y);
82+
static inline modelica_real modelica_mod_real(modelica_real x, modelica_real y)
83+
{
84+
return (x - (floor(x/y) * y));
85+
}
86+
87+
static inline modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y)
88+
{
89+
return x % y;
90+
}
91+
92+
93+
static inline modelica_real modelica_rem_real(modelica_real x, modelica_real y)
94+
{
95+
return x - (y * (modelica_div(x,y)));
96+
}
97+
98+
static inline modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y)
99+
{
100+
return x - (y * ((x / y)));
101+
}
102+
103+
104+
static inline modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y)
105+
{
106+
return (x < y) ? x : y;
107+
}
53108

54-
extern modelica_real modelica_rem_real(modelica_real x, modelica_real y);
55-
extern modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y);
109+
static inline modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y)
110+
{
111+
return (x > y) ? x : y;
112+
}
56113

57-
extern modelica_integer modelica_integer_min(modelica_integer x, modelica_integer y);
58-
extern modelica_integer modelica_integer_max(modelica_integer x, modelica_integer y);
59114

60115
#define reduction_sum(X,Y) ((X)+(Y))
61116
#define reduction_product(X,Y) ((X)*(Y))

c_runtime/utility.c

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -32,72 +32,6 @@
3232

3333
#include "utility.h"
3434

35-
int in_range_integer(modelica_integer i,
36-
modelica_integer start,
37-
modelica_integer stop)
38-
{
39-
if (start <= stop) {
40-
if ((i >= start) && (i <= stop)) {
41-
return 1;
42-
}
43-
} else {
44-
if ((i >= stop) && (i <= start)) {
45-
return 1;
46-
}
47-
}
48-
return 0;
49-
}
50-
51-
int in_range_real(modelica_real i,
52-
modelica_real start,
53-
modelica_real stop)
54-
{
55-
if (start <= stop) {
56-
if ((i >= start) && (i <= stop)) {
57-
return 1;
58-
}
59-
} else {
60-
if ((i >= stop) && (i <= start)) {
61-
return 1;
62-
}
63-
}
64-
return 0;
65-
}
66-
67-
modelica_real modelica_div(modelica_real x, modelica_real y)
68-
{
69-
return (modelica_real)((modelica_integer)(x/y));
70-
}
71-
72-
modelica_real modelica_mod_real(modelica_real x, modelica_real y)
73-
{
74-
return (x - (floor(x/y) * y));
75-
}
76-
77-
modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y)
78-
{
79-
return x % y;
80-
}
81-
82-
modelica_real modelica_rem_real(modelica_real x, modelica_real y)
83-
{
84-
return x - (y*(modelica_div(x,y)));
85-
}
86-
87-
modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y)
88-
{
89-
return x - (y*((x/y)));
90-
}
91-
92-
modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y)
93-
{
94-
return (x<y) ? x : y;
95-
}
96-
97-
modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y)
98-
{
99-
return (x>y) ? x : y;
100-
}
10135

10236
modelica_real real_int_pow(modelica_real base, modelica_integer n)
10337
{

c_runtime/utility.h

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,82 @@
3535

3636
#include "modelica.h"
3737

38-
extern int in_range_integer(modelica_integer i,
38+
39+
40+
static inline int in_range_integer(modelica_integer i,
3941
modelica_integer start,
40-
modelica_integer stop);
42+
modelica_integer stop)
43+
{
44+
if (start <= stop) {
45+
if ((i >= start) && (i <= stop)) {
46+
return 1;
47+
}
48+
} else {
49+
if ((i >= stop) && (i <= start)) {
50+
return 1;
51+
}
52+
}
53+
return 0;
54+
}
4155

42-
extern int in_range_real(modelica_real i,
56+
static inline int in_range_real(modelica_real i,
4357
modelica_real start,
44-
modelica_real stop);
58+
modelica_real stop)
59+
{
60+
if (start <= stop) {
61+
if ((i >= start) && (i <= stop)) {
62+
return 1;
63+
}
64+
} else {
65+
if ((i >= stop) && (i <= start)) {
66+
return 1;
67+
}
68+
}
69+
return 0;
70+
}
71+
4572

4673
/* div is already defined in stdlib, so it's redefined here to modelica_div */
47-
extern modelica_real modelica_div(modelica_real x, modelica_real y);
74+
static inline modelica_real modelica_div(modelica_real x, modelica_real y)
75+
{
76+
return (modelica_real)((modelica_integer)(x/y));
77+
}
78+
79+
4880
/* fmod in math.h does not work in the same way as mod defined by modelica, so
4981
* we need to define our own mod. */
50-
extern modelica_real modelica_mod_real(modelica_real x, modelica_real y);
51-
extern modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y);
82+
static inline modelica_real modelica_mod_real(modelica_real x, modelica_real y)
83+
{
84+
return (x - (floor(x/y) * y));
85+
}
86+
87+
static inline modelica_integer modelica_mod_integer(modelica_integer x, modelica_integer y)
88+
{
89+
return x % y;
90+
}
91+
92+
93+
static inline modelica_real modelica_rem_real(modelica_real x, modelica_real y)
94+
{
95+
return x - (y*(modelica_div(x,y)));
96+
}
97+
98+
static inline modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y)
99+
{
100+
return x - (y*((x/y)));
101+
}
102+
103+
104+
static inline modelica_integer modelica_integer_min(modelica_integer x,modelica_integer y)
105+
{
106+
return (x<y) ? x : y;
107+
}
52108

53-
extern modelica_real modelica_rem_real(modelica_real x, modelica_real y);
54-
extern modelica_integer modelica_rem_integer(modelica_integer x, modelica_integer y);
109+
static inline modelica_integer modelica_integer_max(modelica_integer x,modelica_integer y)
110+
{
111+
return (x>y) ? x : y;
112+
}
55113

56-
extern modelica_integer modelica_integer_min(modelica_integer x, modelica_integer y);
57-
extern modelica_integer modelica_integer_max(modelica_integer x, modelica_integer y);
58114

59115
#define reduction_sum(X,Y) ((X)+(Y))
60116
#define reduction_product(X,Y) ((X)*(Y))

0 commit comments

Comments
 (0)