summaryrefslogtreecommitdiffstats
path: root/all_pairs/source/petrinet/petrinet.c
diff options
context:
space:
mode:
authorJoshua Bakita <bakitajoshua@gmail.com>2019-10-07 19:13:39 -0400
committerJoshua Bakita <bakitajoshua@gmail.com>2019-10-07 19:13:39 -0400
commit386b7d3366f1359a265da207a9cafa3edf553b64 (patch)
treec76120c2c138faed822e4ae386be6ef22a738a78 /all_pairs/source/petrinet/petrinet.c
parent54a3f7091a2146b29c73a6fdc4b62a5c4ad7a3d8 (diff)
Reorganize and commit all the modified TACLeBench code and run scripts
Diffstat (limited to 'all_pairs/source/petrinet/petrinet.c')
-rw-r--r--all_pairs/source/petrinet/petrinet.c990
1 files changed, 990 insertions, 0 deletions
diff --git a/all_pairs/source/petrinet/petrinet.c b/all_pairs/source/petrinet/petrinet.c
new file mode 100644
index 0000000..7c9e1a0
--- /dev/null
+++ b/all_pairs/source/petrinet/petrinet.c
@@ -0,0 +1,990 @@
1/*
2
3 This program is part of the TACLeBench benchmark suite.
4 Version V 2.0
5
6 Name: Petrinet
7
8 Author: Friedhelm Stappert, C-LAB, Paderborn, Germany
9
10 Function: Simulate an extended Petri Net
11 Automatically generated code containing large amounts of
12 if-statements (more than 250)
13
14 Source: Mälardalen benchmark suite
15
16 Changes: no major functional changes
17
18 License: may be used, modified, and re-distributed freely
19
20*/
21
22/* Remove the following #define for actual WCET analyses! */
23/*
24 #define PROFILING
25*/
26
27
28#include "../extra.h"
29
30#ifdef PROFILING
31#include <stdio.h>
32#endif
33
34#ifdef PROFILING
35/* Profiling variables. Remove for actual WCET analyses. */
36int petrinet_main_iters_dummy_i = 0,
37 petrinet_main_min_dummy_i = 100000,
38 petrinet_main_max_dummy_i = 0;
39#endif
40
41/*
42 Forward declaration of functions
43*/
44void petrinet_init( void );
45int petrinet_return( void );
46void petrinet_main( void );
47//int main( void );
48
49
50volatile int petrinet_P1_is_marked;
51volatile long petrinet_P1_marking_member_0[ 3 ];
52volatile int petrinet_P2_is_marked;
53volatile long petrinet_P2_marking_member_0[ 5 ];
54volatile int petrinet_P3_is_marked;
55volatile long petrinet_P3_marking_member_0[ 6 ];
56
57const long petrinet_CHECKSUM = 0;
58
59void _Pragma ( "entrypoint" ) petrinet_main( void )
60{
61 int dummy_i;
62 /* dummy_i = 17; Takes too much time */
63 dummy_i = 2;
64
65 #ifdef PROFILING
66 main_iters_dummy_i = 0;
67 #endif
68 _Pragma( "loopbound min 2 max 2" )
69 while ( dummy_i > 0 ) {
70 #ifdef PROFILING
71 main_iters_dummy_i++;
72 #endif
73
74 dummy_i--;
75 /* Permutation for Place P1 : 0, 1, 2 */
76 /* Transition T1 */
77 if ( ( petrinet_P1_is_marked >= 3 ) &&
78 ( petrinet_P3_is_marked + 3 <= 6 ) &&
79 ( petrinet_P1_marking_member_0[ 1 ]
80 == petrinet_P1_marking_member_0[ 2 ] ) ) {
81
82 long x;
83 long y;
84 long z;
85
86 x = petrinet_P1_marking_member_0[ 0 ];
87 y = petrinet_P1_marking_member_0[ 1 ];
88
89 /* Transition condition */
90 if ( x < y ) {
91
92 /* demarking of input places */
93 petrinet_P1_is_marked -= 3;
94
95 /* preaction */
96 z = x - y;
97
98 /* marking of output places */
99 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
100 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
101 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
102 petrinet_P3_is_marked += 3;
103
104 } /* end of if (Transition condition) */
105 }
106
107 /* Permutation for Place petrinet_P1 : 0, 2, 1 */
108 /* Transition T1 */
109 if ( ( petrinet_P1_is_marked >= 3 ) &&
110 ( petrinet_P3_is_marked + 3 <= 6 ) &&
111 ( petrinet_P1_marking_member_0[ 2 ]
112 == petrinet_P1_marking_member_0[ 1 ] ) ) {
113
114 long x;
115 long y;
116 long z;
117
118 x = petrinet_P1_marking_member_0[ 0 ];
119 y = petrinet_P1_marking_member_0[ 2 ];
120
121 /* Transition condition */
122 if ( ( x < y ) ) {
123
124 /* demarking of input places */
125 petrinet_P1_is_marked -= 3;
126
127 /* preaction */
128 z = x - y;
129
130 /* marking of output places */
131 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
132 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
133 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
134 petrinet_P3_is_marked += 3;
135
136 } /* end of if (Transition condition) */
137 }
138
139 /* Permutation for Place petrinet_P1 : 1, 0, 2 */
140 /* Transition T1 */
141 if ( ( petrinet_P1_is_marked >= 3 ) &&
142 ( petrinet_P3_is_marked + 3 <= 6 ) &&
143 ( petrinet_P1_marking_member_0[ 0 ]
144 == petrinet_P1_marking_member_0[ 2 ] ) ) {
145
146 long x;
147 long y;
148 long z;
149
150 x = petrinet_P1_marking_member_0[ 1 ];
151 y = petrinet_P1_marking_member_0[ 0 ];
152
153 /* Transition condition */
154 if ( x < y ) {
155
156 /* demarking of input places */
157 petrinet_P1_is_marked -= 3;
158
159 /* preaction */
160 z = x - y;
161
162 /* marking of output places */
163 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
164 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
165 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
166 petrinet_P3_is_marked += 3;
167
168 } /* end of if (Transition condition) */
169 }
170
171 /* Permutation for Place petrinet_P1 : 1, 2, 0 */
172 /* Transition T1 */
173 if ( ( petrinet_P1_is_marked >= 3 ) &&
174 ( petrinet_P3_is_marked + 3 <= 6 ) &&
175 ( petrinet_P1_marking_member_0[ 2 ]
176 == petrinet_P1_marking_member_0[ 0 ] ) ) {
177
178 long x;
179 long y;
180 long z;
181
182 x = petrinet_P1_marking_member_0[ 1 ];
183 y = petrinet_P1_marking_member_0[ 2 ];
184
185 /* Transition condition */
186 if ( ( x < y ) ) {
187
188 /* demarking of input places */
189 petrinet_P1_is_marked -= 3;
190
191 /* preaction */
192 z = x - y;
193
194 /* marking of output places */
195 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 0 ] = x;
196 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 1 ] = y;
197 petrinet_P3_marking_member_0[ petrinet_P3_is_marked + 2 ] = z;
198