]> gitweb.factorcode.org Git - factor.git/blob - vm/ffi_test.c
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / vm / ffi_test.c
1 /* This file is linked into the runtime for the sole purpose
2  * of testing FFI code. */
3 #include "master.h"
4 #include "ffi_test.h"
5
6 void ffi_test_0(void)
7 {
8 }
9
10 int ffi_test_1(void)
11 {
12         return 3;
13 }
14
15 int ffi_test_2(int x, int y)
16 {
17         return x + y;
18 }
19
20 int ffi_test_3(int x, int y, int z, int t)
21 {
22         return x + y + z * t;
23 }
24
25 float ffi_test_4(void)
26 {
27         return 1.5;
28 }
29
30 double ffi_test_5(void)
31 {
32         return 1.5;
33 }
34
35 double ffi_test_6(float x, float y)
36 {
37         return x * y;
38 }
39
40 double ffi_test_7(double x, double y)
41 {
42         return x * y;
43 }
44
45 double ffi_test_8(double x, float y, double z, float t, int w)
46 {
47         return x * y + z * t + w;
48 }
49
50 int ffi_test_9(int a, int b, int c, int d, int e, int f, int g)
51 {
52         return a + b + c + d + e + f + g;
53 }
54
55 int ffi_test_10(int a, int b, double c, int d, float e, int f, int g, int h)
56 {
57         return a - b - c - d - e - f - g - h;
58 }
59
60 int ffi_test_11(int a, struct foo b, int c)
61 {
62         return a * b.x + c * b.y;
63 }
64
65 int ffi_test_12(int a, int b, struct rect c, int d, int e, int f)
66 {
67         return a + b + c.x + c.y + c.w + c.h + d + e + f;
68 }
69
70 int ffi_test_13(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k)
71 {
72         return a + b + c + d + e + f + g + h + i + j + k;
73 }
74
75 struct foo ffi_test_14(int x, int y)
76 {
77         struct foo r;
78         r.x = x; r.y = y;
79         return r;
80 }
81
82 char *ffi_test_15(char *x, char *y)
83 {
84         if(strcmp(x,y))
85                 return "foo";
86         else
87                 return "bar";
88 }
89
90 struct bar ffi_test_16(long x, long y, long z)
91 {
92         struct bar r;
93         r.x = x; r.y = y; r.z = z;
94         return r;
95 }
96
97 struct tiny ffi_test_17(int x)
98 {
99         struct tiny r;
100         r.x = x;
101         return r;
102 }
103
104 F_STDCALL int ffi_test_18(int x, int y, int z, int t)
105 {
106         return x + y + z * t;
107 }
108
109 F_STDCALL struct bar ffi_test_19(long x, long y, long z)
110 {
111         struct bar r;
112         r.x = x; r.y = y; r.z = z;
113         return r;
114 }
115
116 void ffi_test_20(double x1, double x2, double x3,
117         double y1, double y2, double y3,
118         double z1, double z2, double z3)
119 {
120 }
121
122 long long ffi_test_21(long x, long y)
123 {
124         return (long long)x * (long long)y;
125 }
126
127 long ffi_test_22(long x, long long y, long long z)
128 {
129         return x + y / z;
130 }
131
132 float ffi_test_23(float x[3], float y[3])
133 {
134         return x[0] * y[0] + x[1] * y[1] + x[2] * y[2];
135 }
136
137 struct test_struct_1 ffi_test_24(void)
138 {
139         struct test_struct_1 s;
140         s.x = 1;
141         return s;
142 }
143
144 struct test_struct_2 ffi_test_25(void)
145 {
146         struct test_struct_2 s;
147         s.x = 1;
148         s.y = 2;
149         return s;
150 }
151
152 struct test_struct_3 ffi_test_26(void)
153 {
154         struct test_struct_3 s;
155         s.x = 1;
156         s.y = 2;
157         s.z = 3;
158         return s;
159 }
160
161 struct test_struct_4 ffi_test_27(void)
162 {
163         struct test_struct_4 s;
164         s.x = 1;
165         s.y = 2;
166         s.z = 3;
167         s.a = 4;
168         return s;
169 }
170
171 struct test_struct_5 ffi_test_28(void)
172 {
173         struct test_struct_5 s;
174         s.x = 1;
175         s.y = 2;
176         s.z = 3;
177         s.a = 4;
178         s.b = 5;
179         return s;
180 }
181
182 struct test_struct_6 ffi_test_29(void)
183 {
184         struct test_struct_6 s;
185         s.x = 1;
186         s.y = 2;
187         s.z = 3;
188         s.a = 4;
189         s.b = 5;
190         s.c = 6;
191         return s;
192 }
193
194 struct test_struct_7 ffi_test_30(void)
195 {
196         struct test_struct_7 s;
197         s.x = 1;
198         s.y = 2;
199         s.z = 3;
200         s.a = 4;
201         s.b = 5;
202         s.c = 6;
203         s.d = 7;
204         return s;
205 }
206
207 int ffi_test_31(int x0, int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9, int x10, int x11, int x12, int x13, int x14, int x15, int x16, int x17, int x18, int x19, int x20, int x21, int x22, int x23, int x24, int x25, int x26, int x27, int x28, int x29, int x30, int x31, int x32, int x33, int x34, int x35, int x36, int x37, int x38, int x39, int x40, int x41)
208 {
209         return x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24 + x25 + x26 + x27 + x28 + x29 + x30 + x31 + x32 + x33 + x34 + x35 + x36 + x37 + x38 + x39 + x40 + x41;
210 }
211
212 float ffi_test_31_point_5(float x0, float x1, float x2, float x3, float x4, float x5, float x6, float x7, float x8, float x9, float x10, float x11, float x12, float x13, float x14, float x15, float x16, float x17, float x18, float x19, float x20, float x21, float x22, float x23, float x24, float x25, float x26, float x27, float x28, float x29, float x30, float x31, float x32, float x33, float x34, float x35, float x36, float x37, float x38, float x39, float x40, float x41)
213 {
214         return x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 + x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 + x22 + x23 + x24 + x25 + x26 + x27 + x28 + x29 + x30 + x31 + x32 + x33 + x34 + x35 + x36 + x37 + x38 + x39 + x40 + x41;
215 }
216
217 double ffi_test_32(struct test_struct_8 x, int y)
218 {
219         return (x.x + x.y) * y;
220 }
221
222 double ffi_test_33(struct test_struct_9 x, int y)
223 {
224         return (x.x + x.y) * y;
225 }
226
227 double ffi_test_34(struct test_struct_10 x, int y)
228 {
229         return (x.x + x.y) * y;
230 }
231
232 double ffi_test_35(struct test_struct_11 x, int y)
233 {
234         return (x.x + x.y) * y;
235 }
236
237 double ffi_test_36(struct test_struct_12 x)
238 {
239         return x.x;
240 }
241
242 static int global_var;
243
244 void ffi_test_36_point_5(void)
245 {
246         global_var = 0;
247 }
248
249 int ffi_test_37(int (*f)(int, int, int))
250 {
251         global_var = f(global_var,global_var * 2,global_var * 3);
252         return global_var;
253 }
254
255 unsigned long long ffi_test_38(unsigned long long x, unsigned long long y)
256 {
257         return x * y;
258 }
259
260 int ffi_test_39(long a, long b, struct test_struct_13 s)
261 {
262         if(a != b) abort();
263         return s.x1 + s.x2 + s.x3 + s.x4 + s.x5 + s.x6;
264 }
265
266 struct test_struct_14 ffi_test_40(double x1, double x2)
267 {
268         struct test_struct_14 retval;
269         retval.x1 = x1;
270         retval.x2 = x2;
271         return retval;
272 }
273
274 struct test_struct_12 ffi_test_41(int a, double x)
275 {
276         struct test_struct_12 retval;
277         retval.a = a;
278         retval.x = x;
279         return retval;
280 }
281
282 struct test_struct_15 ffi_test_42(float x, float y)
283 {
284         struct test_struct_15 retval;
285         retval.x = x;
286         retval.y = y;
287         return retval;
288 }
289
290 struct test_struct_16 ffi_test_43(float x, int a)
291 {
292         struct test_struct_16 retval;
293         retval.x = x;
294         retval.a = a;
295         return retval;
296 }
297
298 struct test_struct_14 ffi_test_44(void)
299 {
300         struct test_struct_14 retval;
301         retval.x1 = 1.0;
302         retval.x2 = 2.0;
303         return retval;
304 }
305
306 _Complex float ffi_test_45(_Complex float x, _Complex double y)
307 {
308         return x + 2 * y;
309 }