* Removed all Id tags.
[cacao.git] / tests / regression / native / testarguments.c
1 /* tests/regression/native/testarguments.c - tests argument passing
2
3    Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
4    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
5    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
6    TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23    02110-1301, USA.
24
25 */
26
27
28 #include "config.h"
29
30 #include <stdio.h>
31
32 #include "native/jni.h"
33
34
35 JNIEXPORT jobject JNICALL Java_testarguments_adr(JNIEnv *env, jclass clazz, jint i)
36 {
37   switch (i) {
38   case 1:
39     return (jobject) 0x11111111;
40   case 2:
41     return (jobject) 0x22222222;
42   case 3:
43     return (jobject) 0x33333333;
44   case 4:
45     return (jobject) 0x44444444;
46   case 5:
47     return (jobject) 0x55555555;
48   case 6:
49     return (jobject) 0x66666666;
50   case 7:
51     return (jobject) 0x77777777;
52   case 8:
53     return (jobject) 0x88888888;
54   case 9:
55     return (jobject) 0x99999999;
56   case 10:
57     return (jobject) 0xaaaaaaaa;
58   case 11:
59     return (jobject) 0xbbbbbbbb;
60   case 12:
61     return (jobject) 0xcccccccc;
62   case 13:
63     return (jobject) 0xdddddddd;
64   case 14:
65     return (jobject) 0xeeeeeeee;
66   case 15:
67     return (jobject) 0xffffffff;
68   }
69 }
70
71
72 JNIEXPORT void JNICALL Java_testarguments_np(JNIEnv *env, jclass clazz, jobject o)
73 {
74 #if SIZEOF_VOID_P == 8
75     printf(" 0x%lx", (long) o);
76 #else
77     printf(" 0x%x", (int) o);
78 #endif
79
80     fflush(stdout);
81 }
82
83
84 JNIEXPORT void JNICALL Java_testarguments_nisub(JNIEnv *env, jclass clazz, jint a, jint b, jint c, jint d, jint e, jint f, jint g, jint h, jint i, jint j, jint k, jint l, jint m, jint n, jint o)
85 {
86     jmethodID mid;
87
88     printf("java-native: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
89     fflush(stdout);
90
91     mid = (*env)->GetStaticMethodID(env, clazz, "jisub", "(IIIIIIIIIIIIIII)V");
92
93     if (mid == 0) {
94         printf("native: couldn't find jisub\n");
95         return;
96     }
97
98     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
99 }
100
101
102 JNIEXPORT void JNICALL Java_testarguments_nlsub(JNIEnv *env, jclass clazz, jlong a, jlong b, jlong c, jlong d, jlong e, jlong f, jlong g, jlong h, jlong i, jlong j, jlong k, jlong l, jlong m, jlong n, jlong o)
103 {
104     jmethodID mid;
105
106     printf("java-native: 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx 0x%llx\n", a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
107     fflush(stdout);
108
109     mid = (*env)->GetStaticMethodID(env, clazz, "jlsub", "(JJJJJJJJJJJJJJJ)V");
110
111     if (mid == 0) {
112         printf("native: couldn't find jlsub\n");
113         return;
114     }
115
116     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
117 }
118
119
120 JNIEXPORT void JNICALL Java_testarguments_nfsub(JNIEnv *env, jclass clazz, jfloat a, jfloat b, jfloat c, jfloat d, jfloat e, jfloat f, jfloat g, jfloat h, jfloat i, jfloat j, jfloat k, jfloat l, jfloat m, jfloat n, jfloat o)
121 {
122     jmethodID mid;
123     union {
124       jint i;
125       jfloat f;
126     } x;
127
128     printf("java-native:");
129
130     x.f = a; printf(" 0x%x", x.i);
131     x.f = b; printf(" 0x%x", x.i);
132     x.f = c; printf(" 0x%x", x.i);
133     x.f = d; printf(" 0x%x", x.i);
134     x.f = e; printf(" 0x%x", x.i);
135     x.f = f; printf(" 0x%x", x.i);
136     x.f = g; printf(" 0x%x", x.i);
137     x.f = h; printf(" 0x%x", x.i);
138     x.f = i; printf(" 0x%x", x.i);
139     x.f = j; printf(" 0x%x", x.i);
140     x.f = k; printf(" 0x%x", x.i);
141     x.f = l; printf(" 0x%x", x.i);
142     x.f = m; printf(" 0x%x", x.i);
143     x.f = n; printf(" 0x%x", x.i);
144     x.f = o; printf(" 0x%x", x.i);
145
146     printf("\n");
147     fflush(stdout);
148
149     mid = (*env)->GetStaticMethodID(env, clazz, "jfsub", "(FFFFFFFFFFFFFFF)V");
150
151     if (mid == 0) {
152         printf("native: couldn't find jfsub\n");
153         return;
154     }
155
156     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
157 }
158
159
160 JNIEXPORT void JNICALL Java_testarguments_ndsub(JNIEnv *env, jclass clazz, jdouble a, jdouble b, jdouble c, jdouble d, jdouble e, jdouble f, jdouble g, jdouble h, jdouble i, jdouble j, jdouble k, jdouble l, jdouble m, jdouble n, jdouble o)
161 {
162     jmethodID mid;
163     union {
164       jlong l;
165       jdouble d;
166     } x;
167
168     printf("java-native:");
169
170     x.d = a; printf(" 0x%llx", x.l);
171     x.d = b; printf(" 0x%llx", x.l);
172     x.d = c; printf(" 0x%llx", x.l);
173     x.d = d; printf(" 0x%llx", x.l);
174     x.d = e; printf(" 0x%llx", x.l);
175     x.d = f; printf(" 0x%llx", x.l);
176     x.d = g; printf(" 0x%llx", x.l);
177     x.d = h; printf(" 0x%llx", x.l);
178     x.d = i; printf(" 0x%llx", x.l);
179     x.d = j; printf(" 0x%llx", x.l);
180     x.d = k; printf(" 0x%llx", x.l);
181     x.d = l; printf(" 0x%llx", x.l);
182     x.d = m; printf(" 0x%llx", x.l);
183     x.d = n; printf(" 0x%llx", x.l);
184     x.d = o; printf(" 0x%llx", x.l);
185
186     printf("\n");
187     fflush(stdout);
188
189     mid = (*env)->GetStaticMethodID(env, clazz, "jdsub", "(DDDDDDDDDDDDDDD)V");
190
191     if (mid == 0) {
192         printf("native: couldn't find jdsub\n");
193         return;
194     }
195
196     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
197 }
198
199
200 JNIEXPORT void JNICALL Java_testarguments_nasub(JNIEnv *env, jclass clazz, jobject a, jobject b, jobject c, jobject d, jobject e, jobject f, jobject g, jobject h, jobject i, jobject j, jobject k, jobject l, jobject m, jobject n, jobject o)
201 {
202     jmethodID mid;
203
204 #if SIZEOF_VOID_P == 8
205     printf("java-native: 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\n", (long) a, (long) b, (long) c, (long) d, (long) e, (long) f, (long) g, (long) h, (long) i, (long) j, (long) k, (long) l, (long) m, (long) n, (long) o);
206 #else
207     printf("java-native: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", (int) a, (int) b, (int) c, (int) d, (int) e, (int) f, (int) g, (int) h, (int) i, (int) j, (int) k, (int) l, (int) m, (int) n, (int) o);
208 #endif
209
210     fflush(stdout);
211
212     mid = (*env)->GetStaticMethodID(env, clazz, "jasub", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V");
213
214     if (mid == 0) {
215         printf("native: couldn't find jasub\n");
216         return;
217     }
218
219     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
220 }
221
222
223 JNIEXPORT void JNICALL Java_testarguments_nmsub(JNIEnv *env, jclass clazz, jint a, jlong b, jfloat c, jdouble d, jint e, jlong f, jfloat g, jdouble h, jint i, jlong j, jfloat k, jdouble l, jint m, jlong n, jfloat o)
224 {
225     jmethodID mid;
226     union {
227       jint i;
228       jlong l;
229       jfloat f;
230       jdouble d;
231     } x;
232
233     printf("java-native:");
234
235     printf(" 0x%x", a);
236     printf(" 0x%llx", b);
237     x.f = c; printf(" 0x%x", x.i);
238     x.d = d; printf(" 0x%llx", x.l);
239     printf(" 0x%x", e);
240     printf(" 0x%llx", f);
241     x.f = g; printf(" 0x%x", x.i);
242     x.d = h; printf(" 0x%llx", x.l);
243     printf(" 0x%x", i);
244     printf(" 0x%llx", j);
245     x.f = k; printf(" 0x%x", x.i);
246     x.d = l; printf(" 0x%llx", x.l);
247     printf(" 0x%x", m);
248     printf(" 0x%llx", n);
249     x.f = o; printf(" 0x%x", x.i);
250
251     printf("\n");
252     fflush(stdout);
253
254     mid = (*env)->GetStaticMethodID(env, clazz, "jmsub", "(IJFDIJFDIJFDIJF)V");
255
256     if (mid == 0) {
257         printf("native: couldn't find jmsub\n");
258         return;
259     }
260
261     (*env)->CallStaticVoidMethod(env, clazz, mid, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
262 }