~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/nbody-java/nbody_nbody.c

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-06-11 15:45:24 UTC
  • mfrom: (1.2.1) (2.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20130611154524-rppb3w6tixlegv4n
Tags: 1.4.7~20130611~a1eb425-1
* New snapshot release
* Upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "xmlvm.h"
 
2
#include "java_io_PrintStream.h"
 
3
#include "java_lang_Integer.h"
 
4
#include "java_lang_String.h"
 
5
#include "java_lang_StringBuilder.h"
 
6
#include "java_lang_System.h"
 
7
#include "nbody_NBodySystem.h"
 
8
 
 
9
#include "nbody_nbody.h"
 
10
 
 
11
#define XMLVM_CURRENT_CLASS_NAME nbody
 
12
#define XMLVM_CURRENT_PKG_CLASS_NAME nbody_nbody
 
13
 
 
14
__TIB_DEFINITION_nbody_nbody __TIB_nbody_nbody = {
 
15
    0, // classInitializationBegan
 
16
    0, // classInitialized
 
17
    -1, // initializerThreadId
 
18
    __INIT_nbody_nbody, // classInitializer
 
19
    "nbody.nbody", // className
 
20
    "nbody", // package
 
21
    JAVA_NULL, // enclosingClassName
 
22
    JAVA_NULL, // enclosingMethodName
 
23
    JAVA_NULL, // signature
 
24
    (__TIB_DEFINITION_TEMPLATE*) &__TIB_java_lang_Object, // extends
 
25
    sizeof(nbody_nbody), // sizeInstance
 
26
    XMLVM_TYPE_CLASS};
 
27
 
 
28
JAVA_OBJECT __CLASS_nbody_nbody;
 
29
JAVA_OBJECT __CLASS_nbody_nbody_1ARRAY;
 
30
JAVA_OBJECT __CLASS_nbody_nbody_2ARRAY;
 
31
JAVA_OBJECT __CLASS_nbody_nbody_3ARRAY;
 
32
//XMLVM_BEGIN_IMPLEMENTATION
 
33
//XMLVM_END_IMPLEMENTATION
 
34
 
 
35
 
 
36
#include "xmlvm-reflection.h"
 
37
 
 
38
static XMLVM_FIELD_REFLECTION_DATA __field_reflection_data[] = {
 
39
};
 
40
 
 
41
static XMLVM_CONSTRUCTOR_REFLECTION_DATA __constructor_reflection_data[] = {
 
42
};
 
43
 
 
44
static JAVA_OBJECT constructor_dispatcher(JAVA_OBJECT constructor, JAVA_OBJECT arguments)
 
45
{
 
46
    XMLVM_NOT_IMPLEMENTED();
 
47
}
 
48
 
 
49
static XMLVM_METHOD_REFLECTION_DATA __method_reflection_data[] = {
 
50
};
 
51
 
 
52
static JAVA_OBJECT method_dispatcher(JAVA_OBJECT method, JAVA_OBJECT receiver, JAVA_OBJECT arguments)
 
53
{
 
54
    XMLVM_NOT_IMPLEMENTED();
 
55
}
 
56
 
 
57
void __INIT_nbody_nbody()
 
58
{
 
59
    staticInitializerLock(&__TIB_nbody_nbody);
 
60
 
 
61
    // While the static initializer mutex is locked, locally store the value of
 
62
    // whether class initialization began or not
 
63
    int initBegan = __TIB_nbody_nbody.classInitializationBegan;
 
64
 
 
65
    // Whether or not class initialization had already began, it has begun now
 
66
    __TIB_nbody_nbody.classInitializationBegan = 1;
 
67
 
 
68
    staticInitializerUnlock(&__TIB_nbody_nbody);
 
69
 
 
70
    JAVA_LONG curThreadId = (JAVA_LONG)pthread_self();
 
71
    if (initBegan) {
 
72
        if (__TIB_nbody_nbody.initializerThreadId != curThreadId) {
 
73
            // Busy wait until the other thread finishes initializing this class
 
74
            while (!__TIB_nbody_nbody.classInitialized) {
 
75
                // do nothing
 
76
            }
 
77
        }
 
78
    } else {
 
79
        __TIB_nbody_nbody.initializerThreadId = curThreadId;
 
80
        XMLVM_CLASS_USED("nbody.nbody")
 
81
        __INIT_IMPL_nbody_nbody();
 
82
    }
 
83
}
 
84
 
 
85
void __INIT_IMPL_nbody_nbody()
 
86
{
 
87
    // Initialize base class if necessary
 
88
    XMLVM_CLASS_INIT(java_lang_Object)
 
89
    __TIB_nbody_nbody.newInstanceFunc = __NEW_INSTANCE_nbody_nbody;
 
90
    // Copy vtable from base class
 
91
    XMLVM_MEMCPY(__TIB_nbody_nbody.vtable, __TIB_java_lang_Object.vtable, sizeof(__TIB_java_lang_Object.vtable));
 
92
    // Initialize vtable for this class
 
93
    // Initialize interface information
 
94
    __TIB_nbody_nbody.numImplementedInterfaces = 0;
 
95
    __TIB_nbody_nbody.implementedInterfaces = (__TIB_DEFINITION_TEMPLATE* (*)[1]) XMLVM_MALLOC(sizeof(__TIB_DEFINITION_TEMPLATE*) * 0);
 
96
 
 
97
    // Initialize interfaces if necessary and assign tib to implementedInterfaces
 
98
 
 
99
    __TIB_nbody_nbody.declaredFields = &__field_reflection_data[0];
 
100
    __TIB_nbody_nbody.numDeclaredFields = sizeof(__field_reflection_data) / sizeof(XMLVM_FIELD_REFLECTION_DATA);
 
101
    __TIB_nbody_nbody.constructorDispatcherFunc = constructor_dispatcher;
 
102
    __TIB_nbody_nbody.declaredConstructors = &__constructor_reflection_data[0];
 
103
    __TIB_nbody_nbody.numDeclaredConstructors = sizeof(__constructor_reflection_data) / sizeof(XMLVM_CONSTRUCTOR_REFLECTION_DATA);
 
104
    __TIB_nbody_nbody.methodDispatcherFunc = method_dispatcher;
 
105
    __TIB_nbody_nbody.declaredMethods = &__method_reflection_data[0];
 
106
    __TIB_nbody_nbody.numDeclaredMethods = sizeof(__method_reflection_data) / sizeof(XMLVM_METHOD_REFLECTION_DATA);
 
107
    __CLASS_nbody_nbody = XMLVM_CREATE_CLASS_OBJECT(&__TIB_nbody_nbody);
 
108
    __TIB_nbody_nbody.clazz = __CLASS_nbody_nbody;
 
109
    __TIB_nbody_nbody.baseType = JAVA_NULL;
 
110
    __CLASS_nbody_nbody_1ARRAY = XMLVM_CREATE_ARRAY_CLASS_OBJECT(__CLASS_nbody_nbody);
 
111
    __CLASS_nbody_nbody_2ARRAY = XMLVM_CREATE_ARRAY_CLASS_OBJECT(__CLASS_nbody_nbody_1ARRAY);
 
112
    __CLASS_nbody_nbody_3ARRAY = XMLVM_CREATE_ARRAY_CLASS_OBJECT(__CLASS_nbody_nbody_2ARRAY);
 
113
    //XMLVM_BEGIN_WRAPPER[__INIT_nbody_nbody]
 
114
    //XMLVM_END_WRAPPER
 
115
 
 
116
    __TIB_nbody_nbody.classInitialized = 1;
 
117
}
 
118
 
 
119
void __DELETE_nbody_nbody(void* me, void* client_data)
 
120
{
 
121
    //XMLVM_BEGIN_WRAPPER[__DELETE_nbody_nbody]
 
122
    //XMLVM_END_WRAPPER
 
123
}
 
124
 
 
125
void __INIT_INSTANCE_MEMBERS_nbody_nbody(JAVA_OBJECT me, int derivedClassWillRegisterFinalizer)
 
126
{
 
127
    __INIT_INSTANCE_MEMBERS_java_lang_Object(me, 0 || derivedClassWillRegisterFinalizer);
 
128
    //XMLVM_BEGIN_WRAPPER[__INIT_INSTANCE_MEMBERS_nbody_nbody]
 
129
    //XMLVM_END_WRAPPER
 
130
}
 
131
 
 
132
JAVA_OBJECT __NEW_nbody_nbody()
 
133
{    XMLVM_CLASS_INIT(nbody_nbody)
 
134
nbody_nbody* me = (nbody_nbody*) XMLVM_MALLOC(sizeof(nbody_nbody));
 
135
    me->tib = &__TIB_nbody_nbody;
 
136
    __INIT_INSTANCE_MEMBERS_nbody_nbody(me, 0);
 
137
    //XMLVM_BEGIN_WRAPPER[__NEW_nbody_nbody]
 
138
    //XMLVM_END_WRAPPER
 
139
    return me;
 
140
}
 
141
 
 
142
JAVA_OBJECT __NEW_INSTANCE_nbody_nbody()
 
143
{
 
144
    JAVA_OBJECT me = JAVA_NULL;
 
145
    me = __NEW_nbody_nbody();
 
146
    nbody_nbody___INIT___(me);
 
147
    return me;
 
148
}
 
149
 
 
150
void nbody_nbody___INIT___(JAVA_OBJECT me)
 
151
{
 
152
    //XMLVM_BEGIN_WRAPPER[nbody_nbody___INIT___]
 
153
    XMLVM_ENTER_METHOD("nbody.nbody", "<init>", "?")
 
154
    XMLVMElem _r0;
 
155
    _r0.o = me;
 
156
    XMLVM_SOURCE_POSITION("nbody.java", 15)
 
157
    XMLVM_CHECK_NPE(0)
 
158
    java_lang_Object___INIT___(_r0.o);
 
159
    XMLVM_EXIT_METHOD()
 
160
    return;
 
161
    //XMLVM_END_WRAPPER
 
162
}
 
163
 
 
164
void nbody_nbody_main___java_lang_String_1ARRAY(JAVA_OBJECT n1)
 
165
{
 
166
    XMLVM_CLASS_INIT(nbody_nbody)
 
167
    //XMLVM_BEGIN_WRAPPER[nbody_nbody_main___java_lang_String_1ARRAY]
 
168
    XMLVM_ENTER_METHOD("nbody.nbody", "main", "?")
 
169
    XMLVMElem _r0;
 
170
    XMLVMElem _r1;
 
171
    XMLVMElem _r2;
 
172
    XMLVMElem _r3;
 
173
    XMLVMElem _r4;
 
174
    XMLVMElem _r5;
 
175
    XMLVMElem _r6;
 
176
    XMLVMElem _r7;
 
177
    _r7.o = n1;
 
178
    _r4.i = 0;
 
179
    XMLVM_SOURCE_POSITION("nbody.java", 17)
 
180
    _r0.i = XMLVMArray_count(((org_xmlvm_runtime_XMLVMArray*) _r7.o));
 
181
    if (_r0.i <= 0) goto label32;
 
182
    XMLVM_CHECK_NPE(7)
 
183
    XMLVM_CHECK_ARRAY_BOUNDS(_r7.o, _r4.i);
 
184
    _r0.o = ((JAVA_ARRAY_OBJECT*) (((org_xmlvm_runtime_XMLVMArray*) _r7.o)->fields.org_xmlvm_runtime_XMLVMArray.array_))[_r4.i];
 
185
    _r0.i = java_lang_Integer_parseInt___java_lang_String(_r0.o);
 
186
    label10:;
 
187
    XMLVM_SOURCE_POSITION("nbody.java", 19)
 
188
    _r1.l = java_lang_System_currentTimeMillis__();
 
189
    XMLVM_SOURCE_POSITION("nbody.java", 21)
 
190
    _r3.o = __NEW_nbody_NBodySystem();
 
191
    XMLVM_CHECK_NPE(3)
 
192
    nbody_NBodySystem___INIT___(_r3.o);
 
193
    label19:;
 
194
    XMLVM_SOURCE_POSITION("nbody.java", 23)
 
195
    if (_r4.i >= _r0.i) goto label36;
 
196
    XMLVM_SOURCE_POSITION("nbody.java", 24)
 
197
    _r5.d = 0.01;
 
198
    XMLVM_CHECK_NPE(3)
 
199
    nbody_NBodySystem_advance___double(_r3.o, _r5.d);
 
200
    _r4.i = _r4.i + 1;
 
201
    goto label19;
 
202
    label32:;
 
203
    _r0.i = 5000000;
 
204
    goto label10;
 
205
    label36:;
 
206
    XMLVM_SOURCE_POSITION("nbody.java", 27)
 
207
    _r4.l = java_lang_System_currentTimeMillis__();
 
208
    XMLVM_SOURCE_POSITION("nbody.java", 29)
 
209
    _r0.l = _r4.l - _r1.l;
 
210
    _r0.d = (JAVA_DOUBLE) _r0.l;
 
211
    _r4.d = 0.001;
 
212
    _r0.d = _r0.d * _r4.d;
 
213
    XMLVM_SOURCE_POSITION("nbody.java", 31)
 
214
    _r2.o = java_lang_System_GET_out();
 
215
    XMLVM_CHECK_NPE(3)
 
216
    _r3.d = nbody_NBodySystem_energy__(_r3.o);
 
217
    XMLVM_CHECK_NPE(2)
 
218
    java_io_PrintStream_println___double(_r2.o, _r3.d);
 
219
    XMLVM_SOURCE_POSITION("nbody.java", 32)
 
220
    _r2.o = java_lang_System_GET_out();
 
221
    _r3.o = __NEW_java_lang_StringBuilder();
 
222
    XMLVM_CHECK_NPE(3)
 
223
    java_lang_StringBuilder___INIT___(_r3.o);
 
224
    // "Time(s): "
 
225
    _r4.o = xmlvm_create_java_string_from_pool(813);
 
226
    XMLVM_CHECK_NPE(3)
 
227
    _r3.o = java_lang_StringBuilder_append___java_lang_String(_r3.o, _r4.o);
 
228
    XMLVM_CHECK_NPE(3)
 
229
    _r0.o = java_lang_StringBuilder_append___double(_r3.o, _r0.d);
 
230
    //java_lang_StringBuilder_toString__[5]
 
231
    XMLVM_CHECK_NPE(0)
 
232
    _r0.o = (*(JAVA_OBJECT (*)(JAVA_OBJECT)) ((java_lang_StringBuilder*) _r0.o)->tib->vtable[5])(_r0.o);
 
233
    XMLVM_CHECK_NPE(2)
 
234
    java_io_PrintStream_println___java_lang_String(_r2.o, _r0.o);
 
235
    XMLVM_SOURCE_POSITION("nbody.java", 33)
 
236
    XMLVM_EXIT_METHOD()
 
237
    return;
 
238
    //XMLVM_END_WRAPPER
 
239
}
 
240
 
 
241
 
 
242
 
 
243
//#if 0
 
244
 
 
245
#include <pthread.h> // for pthread_exit so the main thread doesn't terminate early
 
246
 
 
247
int main(int argc, char* argv[])
 
248
{
 
249
    // translate our normalized argument (0-0, 1-0.1secs, 2-0.5secs, 3-1sec, 4-5secs, 5-10secs) to nbody
 
250
    int arg = argc > 1 ? argv[1][0] - '0' : 3;
 
251
    char buffer[100];
 
252
    argv[1] = buffer;
 
253
    int n;
 
254
    switch(arg) {
 
255
      case 0: return 0; break;
 
256
      case 1: n = 600000; break;
 
257
      case 2: n = 3600000; break;
 
258
      case 3: n = 6550000; break;
 
259
      case 4: n = 30000000; break;
 
260
      case 5: n = 60000000; break;
 
261
      default: printf("error: %d\\n", arg); return -1;
 
262
    }
 
263
    snprintf(buffer, 50, "%d", n);
 
264
 
 
265
    xmlvm_init();
 
266
 
 
267
    // Initialize the main thread before entering XMLVM_SETJMP
 
268
    java_lang_Thread* mainThread = java_lang_Thread_currentThread__();
 
269
    if (XMLVM_SETJMP(xmlvm_exception_env_main_thread)) {
 
270
        // Technically, XMLVM_UNWIND_EXCEPTION() should be called, but
 
271
        // exceptions will not be used anymore and XMLVM_ENTER_METHOD() wasn't
 
272
        // called (excessive), so a compilation error would occur
 
273
 
 
274
        xmlvm_unhandled_exception();
 
275
    } else {
 
276
        // Convert command-line args to String[]. First C-arg is omitted.
 
277
        JAVA_OBJECT args = xmlvm_create_java_string_array(argc-1, argv+1);
 
278
        nbody_nbody_main___java_lang_String_1ARRAY(args);
 
279
    }
 
280
 
 
281
    xmlvm_destroy(mainThread);
 
282
 
 
283
    return 0;
 
284
}
 
285
//#endif
 
286