File Coverage

lib/SPVM/Builder/src/spvm_precompile.c
Criterion Covered Total %
statement 3627 3715 97.6
branch 71 80 88.7
condition n/a
subroutine n/a
pod n/a
total 3698 3795 97.4


line stmt bran cond sub pod time code
1             // Copyright (c) 2023 Yuki Kimoto
2             // MIT License
3              
4             #include
5             #include
6             #include
7             #include
8             #include
9             #include
10              
11             #include "spvm_precompile.h"
12              
13             #include "spvm_allocator.h"
14             #include "spvm_native.h"
15             #include "spvm_api.h"
16             #include "spvm_api_runtime.h"
17             #include "spvm_api_basic_type.h"
18             #include "spvm_api_class_var.h"
19             #include "spvm_api_field.h"
20             #include "spvm_api_method.h"
21             #include "spvm_api_arg.h"
22             #include "spvm_api_type.h"
23             #include "spvm_string_buffer.h"
24             #include "spvm_opcode.h"
25             #include "spvm_runtime_class_var.h"
26             #include "spvm_runtime_field.h"
27             #include "spvm_runtime_method.h"
28             #include "spvm_runtime_basic_type.h"
29             #include "spvm_runtime_string.h"
30              
31 515           SPVM_PRECOMPILE* SPVM_PRECOMPILE_new() {
32 515           SPVM_PRECOMPILE* precompile = SPVM_ALLOCATOR_alloc_memory_block_unmanaged(sizeof(SPVM_PRECOMPILE));
33            
34 515           return precompile;
35             }
36              
37 515           void SPVM_PRECOMPILE_free(SPVM_PRECOMPILE* precompile) {
38            
39 515           SPVM_ALLOCATOR_free_memory_block_unmanaged(precompile);
40 515           precompile = NULL;
41 515           }
42              
43 515           void SPVM_PRECOMPILE_set_runtime(SPVM_PRECOMPILE* precompile, SPVM_RUNTIME* runtime) {
44            
45 515           precompile->runtime = runtime;
46 515           }
47              
48 0           SPVM_RUNTIME* SPVM_PRECOMPILE_get_runtime(SPVM_PRECOMPILE* precompile) {
49            
50 0           return precompile->runtime;
51             }
52              
53 636           void SPVM_PRECOMPILE_build_module_source(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, SPVM_RUNTIME_BASIC_TYPE* basic_type) {
54 636           SPVM_RUNTIME* runtime = precompile->runtime;
55            
56 636           int32_t basic_type_id = basic_type->id;
57 636           int32_t basic_type_methods_length = basic_type->methods_length;
58            
59             // Method implementations
60 13697 100         for (int32_t method_index = 0; method_index < basic_type_methods_length; method_index++) {
61 13061           SPVM_RUNTIME_METHOD* method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, basic_type, method_index);
62 13061           const char* method_name = method->name;
63 13061           int32_t method_has_precompile_flag = method->is_precompile;
64 13061 100         if (method_has_precompile_flag) {
65 5775           SPVM_PRECOMPILE_build_method_source(precompile, string_buffer, basic_type, method);
66             }
67             }
68            
69             // If the basic type has anon methods, the anon methods is merged to this basic type
70 636           int32_t basic_type_anon_basic_types_length = basic_type->anon_basic_types_length;
71 636 100         if (basic_type_anon_basic_types_length > 0) {
72 140 100         for (int32_t anon_basic_type_index = 0; anon_basic_type_index < basic_type_anon_basic_types_length; anon_basic_type_index++) {
73 123           SPVM_RUNTIME_BASIC_TYPE* anon_basic_type = SPVM_API_BASIC_TYPE_get_anon_basic_type_by_index(runtime, basic_type, anon_basic_type_index);
74 123           SPVM_PRECOMPILE_build_module_source(precompile, string_buffer, anon_basic_type);
75             }
76             }
77            
78 636           SPVM_STRING_BUFFER_add(string_buffer, "\n");
79 636           }
80              
81 5777           void SPVM_PRECOMPILE_build_header(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer) {
82 5777           SPVM_RUNTIME* runtime = precompile->runtime;
83            
84             // Include headers and define macros
85 5777           SPVM_STRING_BUFFER_add(string_buffer,
86             "#include \"spvm_native.h\"\n"
87             "#include \"spvm_implement.h\"\n"
88             "#include \n"
89             "#include \n"
90             "#include \n"
91             "#include \n"
92             "#include \n"
93             );
94 5777           }
95              
96 5777           void SPVM_PRECOMPILE_build_method_declaration(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, SPVM_RUNTIME_BASIC_TYPE* basic_type, SPVM_RUNTIME_METHOD* method) {
97 5777           SPVM_RUNTIME* runtime = precompile->runtime;
98            
99             // Method declaration
100 5777           SPVM_STRING_BUFFER_add(string_buffer, "int32_t SPVMPRECOMPILE__");
101 5777           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type->name);
102 5777           SPVM_STRING_BUFFER_add(string_buffer, (char*)"__");
103 5777           SPVM_STRING_BUFFER_add(string_buffer, (char*)method->name);
104             {
105 5777           int32_t index = string_buffer->length - (strlen(basic_type->name) + 2 + strlen(method->name));
106            
107 237043 100         while (index < string_buffer->length) {
108 231266 100         if (string_buffer->string[index] == ':') {
109 12740           string_buffer->string[index] = '_';
110             }
111 231266           index++;
112             }
113             }
114 5777           SPVM_STRING_BUFFER_add(string_buffer, "(SPVM_ENV* env, SPVM_VALUE* stack)");
115 5777           }
116              
117 5777           void SPVM_PRECOMPILE_build_method_source(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, SPVM_RUNTIME_BASIC_TYPE* current_basic_type, SPVM_RUNTIME_METHOD* current_method) {
118 5777           SPVM_RUNTIME* runtime = precompile->runtime;
119            
120             // Headers
121 5777           SPVM_PRECOMPILE_build_header(precompile, string_buffer);
122            
123             // Current basic type id
124            
125             // Method declaration
126 5777           SPVM_PRECOMPILE_build_method_declaration(precompile, string_buffer, current_basic_type, current_method);
127            
128             // Block start
129 5777           SPVM_STRING_BUFFER_add(string_buffer, " {\n");
130            
131             // The basic type name
132 5777           SPVM_STRING_BUFFER_add(string_buffer," const char* current_basic_type_name = \"");
133 5777           SPVM_STRING_BUFFER_add(string_buffer, current_basic_type->name);
134 5777           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
135            
136 5777           SPVM_STRING_BUFFER_add(string_buffer," void* current_basic_type = env->api->runtime->get_basic_type_by_name(env->runtime, current_basic_type_name);\n");
137            
138             // Current method name
139 5777           SPVM_STRING_BUFFER_add(string_buffer, " const char* current_method_name = \"");
140 5777           SPVM_STRING_BUFFER_add(string_buffer, current_method->name);
141 5777           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
142            
143 5777           SPVM_STRING_BUFFER_add(string_buffer," void* current_method = env->api->basic_type->get_method_by_name(env->runtime, current_basic_type, current_method_name);\n");
144            
145             // object variable declarations
146 5777           int32_t object_vars_width = current_method->object_vars_width;
147 5777 100         if (object_vars_width > 0) {
148 4042           SPVM_STRING_BUFFER_add(string_buffer, " void* object_vars[");
149 4042           SPVM_STRING_BUFFER_add_int(string_buffer, object_vars_width);
150 4042           SPVM_STRING_BUFFER_add(string_buffer, "] = {0};\n");
151             }
152              
153             // ref variable declarations
154 5777           int32_t ref_vars_width = current_method->ref_vars_width;
155 5777 100         if (ref_vars_width > 0) {
156 242           SPVM_STRING_BUFFER_add(string_buffer, " void* ref_vars[");
157 242           SPVM_STRING_BUFFER_add_int(string_buffer, ref_vars_width);
158 242           SPVM_STRING_BUFFER_add(string_buffer, "] = {0};\n");
159             }
160              
161             // double variable declarations
162 5777           int32_t double_vars_width = current_method->double_vars_width;
163 5777 100         if (double_vars_width > 0) {
164 711           SPVM_STRING_BUFFER_add(string_buffer, " double double_vars[");
165 711           SPVM_STRING_BUFFER_add_int(string_buffer, double_vars_width);
166 711           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
167             }
168              
169             // float variable declarations
170 5777           int32_t float_vars_width = current_method->float_vars_width;
171 5777 100         if (float_vars_width > 0) {
172 623           SPVM_STRING_BUFFER_add(string_buffer, " float float_vars[");
173 623           SPVM_STRING_BUFFER_add_int(string_buffer, float_vars_width);
174 623           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
175             }
176              
177             // long variable declarations
178 5777           int32_t long_vars_width = current_method->long_vars_width;
179 5777 100         if (long_vars_width > 0) {
180 698           SPVM_STRING_BUFFER_add(string_buffer, " int64_t long_vars[");
181 698           SPVM_STRING_BUFFER_add_int(string_buffer, long_vars_width);
182 698           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
183             }
184              
185             // int variable declarations
186 5777           int32_t int_vars_width = current_method->int_vars_width;
187 5777 50         if (int_vars_width > 0) {
188 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t int_vars[");
189 5777           SPVM_STRING_BUFFER_add_int(string_buffer, int_vars_width);
190 5777           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
191             }
192              
193             // Exception
194             // volatile attribute is not needed, but the environment "FreeBSD 9.1" and "gcc 4.2.1" seems to performe wrong optimisation
195             // in double pointer logic. volatile attribute fixed the test "ref.t" "SPVM::TestCase::Ref->test_pass_mulnum_ref_byte".
196             // SPVM_STRING_BUFFER_add(string_buffer, " volatile int32_t error_id = 0;\n");
197            
198 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t error_id = 0;\n");
199            
200 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t eval_error_id = 0;\n");
201              
202 5777           int32_t method_mortal_stack_length = current_method->mortal_stack_length;
203 5777 50         if (method_mortal_stack_length > 0) {
204 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t mortal_stack[");
205 5777           SPVM_STRING_BUFFER_add_int(string_buffer, method_mortal_stack_length);
206 5777           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
207 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t mortal_stack_top = 0;\n");
208             }
209            
210             // short variable declarations
211 5777           int32_t short_vars_width = current_method->short_vars_width;
212 5777 100         if (short_vars_width > 0) {
213 579           SPVM_STRING_BUFFER_add(string_buffer, " int16_t short_vars[");
214 579           SPVM_STRING_BUFFER_add_int(string_buffer, short_vars_width);
215 579           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
216             }
217              
218             // byte variable declarations
219 5777           int32_t byte_vars_width = current_method->byte_vars_width;
220 5777 100         if (byte_vars_width > 0) {
221 662           SPVM_STRING_BUFFER_add(string_buffer, " int8_t byte_vars[");
222 662           SPVM_STRING_BUFFER_add_int(string_buffer, byte_vars_width);
223 662           SPVM_STRING_BUFFER_add(string_buffer, "];\n");
224             }
225            
226             // Convert string
227 5777           SPVM_STRING_BUFFER_add(string_buffer, " char convert_string_buffer[21];\n");
228 5777           SPVM_STRING_BUFFER_add(string_buffer, " char message[256];\n");
229            
230 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t basic_type_id;\n");
231 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t object_basic_type_id = 0;\n");
232 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t src_basic_type_id;\n");
233 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* basic_type = NULL;\n");
234 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* object_basic_type = NULL;\n");
235 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* src_basic_type = NULL;\n");
236 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* invocant_decl_basic_type = NULL;\n");
237 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t original_mortal_stack_top = 0;\n");
238 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t line = 0;\n");
239 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t arg_mem_id = 0;\n");
240 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t stack_index = 0;\n");
241 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* object = NULL;\n");
242 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* object1 = NULL;\n");
243 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* object2 = NULL;\n");
244 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* object_address = NULL;\n");
245 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* new_object_no_mortal = NULL;\n");
246 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* array = NULL;\n");
247 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t index = 0;\n");
248 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t args_width = 0;\n");
249 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t return_value = 0;\n");
250 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* string = NULL;\n");
251 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* string1 = NULL;\n");
252 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* string2 = NULL;\n");
253 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* string3 = NULL;\n");
254 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* exception = NULL;\n");
255 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* type_name = NULL;\n");
256 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* get_field_object = NULL;\n");
257 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* dump = NULL;\n");
258 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* src_string = NULL;\n");
259 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* byte_arra = NULL;\n");
260 5777           SPVM_STRING_BUFFER_add(string_buffer, " void** element_address = NULL;\n");
261 5777           SPVM_STRING_BUFFER_add(string_buffer, " void** get_field_object_ref = NULL;\n");
262 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* src_byte_array = NULL;\n");
263 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* byte_array = NULL;\n");
264 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t elem_isa = 0;\n");
265 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t cast_type_dimension = 0;\n");
266 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t type_dimension = 0;\n");
267 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t object_type_dimension_id = 0;\n");
268 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t runtime_assignability = 0;\n");
269 5777           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_VALUE tmp_constant;\n");
270 5777           SPVM_STRING_BUFFER_add(string_buffer, " int8_t* mulnum_ref_byte;\n");
271 5777           SPVM_STRING_BUFFER_add(string_buffer, " int16_t* mulnum_ref_short;\n");
272 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t* mulnum_ref_int;\n");
273 5777           SPVM_STRING_BUFFER_add(string_buffer, " int64_t* mulnum_ref_long;\n");
274 5777           SPVM_STRING_BUFFER_add(string_buffer, " float* mulnum_ref_float;\n");
275 5777           SPVM_STRING_BUFFER_add(string_buffer, " double* mulnum_ref_double;\n");
276 5777           SPVM_STRING_BUFFER_add(string_buffer, " int8_t value_byte;\n");
277 5777           SPVM_STRING_BUFFER_add(string_buffer, " int16_t value_short;\n");
278 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t value_int;\n");
279 5777           SPVM_STRING_BUFFER_add(string_buffer, " int64_t value_long;\n");
280 5777           SPVM_STRING_BUFFER_add(string_buffer, " float value_float;\n");
281 5777           SPVM_STRING_BUFFER_add(string_buffer, " double value_double;\n");
282 5777           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_VALUE* fields;\n");
283 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t src_string_length;\n");
284 5777           SPVM_STRING_BUFFER_add(string_buffer, " int8_t* src_byte_array_data;\n");
285 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t src_byte_array_length;\n");
286 5777           SPVM_STRING_BUFFER_add(string_buffer, " int8_t* byte_array_data;\n");
287 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t string_length;\n");
288 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* src_string_data;\n");
289 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t empty_or_undef;\n");
290 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* bytes;\n");
291 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* class_var_name;\n");
292 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t is_read_only;\n");
293 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t length;\n");
294 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t length1;\n");
295 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t length2;\n");
296 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* bytes1;\n");
297 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* bytes2;\n");
298 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t short_string_length;\n");
299 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t retval;\n");
300 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t cmp;\n");
301 5777           SPVM_STRING_BUFFER_add(string_buffer, " int8_t* element_ptr_byte;\n");
302 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* basic_type_name;\n");
303 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* field_name;\n");
304 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* method_name;\n");
305 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* constant_string;\n");
306 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t constant_string_length;\n");
307            
308 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* class_dir;\n");
309 5777           SPVM_STRING_BUFFER_add(string_buffer, " char* class_rel_file;\n");
310 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t field_index;\n");
311 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t fields_length;\n");
312 5777           SPVM_STRING_BUFFER_add(string_buffer, " char tmp_buffer[256];\n");
313 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* decl_class_var;\n");
314 5777           SPVM_STRING_BUFFER_add(string_buffer, " void* decl_method;\n");
315 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t decl_field_offset;\n");
316            
317 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t object_header_size = env->api->runtime->get_object_data_offset(env->runtime);\n");
318 5777           SPVM_STRING_BUFFER_add(string_buffer, " int32_t object_length_offset = env->api->runtime->get_object_length_offset(env->runtime);\n");
319            
320 5777           SPVM_OPCODE* opcodes = current_method->opcodes;
321 5777           int32_t opcodes_length = current_method->opcodes_length;
322 5777           int32_t opcode_index = 0;
323            
324 5777           SPVM_OPCODE* opcode = NULL;
325            
326 5777           int32_t string_buffer_begin_offset = string_buffer->length;
327 5777           opcode_index = 0;
328 262725 100         while (opcode_index < opcodes_length) {
329 256948           opcode = &(opcodes[opcode_index]);
330 256948           int32_t opcode_id = opcode->id;
331            
332 256948           int32_t basic_type_id = -1;
333 256948           SPVM_RUNTIME_CLASS_VAR* class_var = NULL;
334 256948           SPVM_RUNTIME_FIELD* field = NULL;
335 256948           SPVM_RUNTIME_METHOD* method = NULL;
336 256948           int32_t field_offset = -1;
337 256948           int32_t id_set = 1;
338 256948           switch(opcode_id) {
339             case SPVM_OPCODE_C_ID_MOVE_OBJECT_WITH_TYPE_CHECKING: {
340 261           basic_type_id = opcode->operand2;
341 261           break;
342             }
343             case SPVM_OPCODE_C_ID_NEW_OBJECT: {
344 297           basic_type_id = opcode->operand1;
345 297           break;
346             }
347             case SPVM_OPCODE_C_ID_NEW_OBJECT_ARRAY: {
348 741           basic_type_id = opcode->operand1;
349 741           break;
350             }
351             case SPVM_OPCODE_C_ID_NEW_MULDIM_ARRAY: {
352 27           basic_type_id = opcode->operand1;
353 27           break;
354             }
355             case SPVM_OPCODE_C_ID_NEW_MULNUM_ARRAY: {
356 84           basic_type_id = opcode->operand1;
357 84           break;
358             }
359             case SPVM_OPCODE_C_ID_ISA:
360             case SPVM_OPCODE_C_ID_ISA_ERROR:
361             case SPVM_OPCODE_C_ID_IS_TYPE:
362             case SPVM_OPCODE_C_ID_IS_ERROR:
363             {
364 315           basic_type_id = opcode->operand2;
365 315           break;
366             }
367             case SPVM_OPCODE_C_ID_SET_ERROR_ID:
368             {
369 186           basic_type_id = opcode->operand0;
370 186           break;
371             }
372             case SPVM_OPCODE_C_ID_GET_BASIC_TYPE_ID:
373             {
374 31           basic_type_id = opcode->operand1;
375 31           break;
376             }
377             case SPVM_OPCODE_C_ID_GET_FIELD_BYTE:
378             case SPVM_OPCODE_C_ID_GET_FIELD_SHORT:
379             case SPVM_OPCODE_C_ID_GET_FIELD_INT:
380             case SPVM_OPCODE_C_ID_GET_FIELD_LONG:
381             case SPVM_OPCODE_C_ID_GET_FIELD_FLOAT:
382             case SPVM_OPCODE_C_ID_GET_FIELD_DOUBLE:
383             case SPVM_OPCODE_C_ID_GET_FIELD_OBJECT:
384             {
385 902           basic_type_id = opcode->operand2;
386 902           int32_t field_index = opcode->operand3;
387 902           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
388 902           field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, basic_type, field_index);
389 902           field_offset = field->offset;
390 902 50         assert(field);
391 902           break;
392             }
393             case SPVM_OPCODE_C_ID_SET_FIELD_BYTE:
394             case SPVM_OPCODE_C_ID_SET_FIELD_SHORT:
395             case SPVM_OPCODE_C_ID_SET_FIELD_INT:
396             case SPVM_OPCODE_C_ID_SET_FIELD_LONG:
397             case SPVM_OPCODE_C_ID_SET_FIELD_FLOAT:
398             case SPVM_OPCODE_C_ID_SET_FIELD_DOUBLE:
399             case SPVM_OPCODE_C_ID_SET_FIELD_OBJECT:
400             case SPVM_OPCODE_C_ID_SET_FIELD_UNDEF:
401             case SPVM_OPCODE_C_ID_WEAKEN_FIELD:
402             case SPVM_OPCODE_C_ID_UNWEAKEN_FIELD:
403             case SPVM_OPCODE_C_ID_ISWEAK_FIELD:
404             {
405 1097           basic_type_id = opcode->operand2;
406 1097           int32_t field_index = opcode->operand3;
407 1097           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
408 1097           field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, basic_type, field_index);
409 1097 50         assert(field);
410 1097           field_offset = field->offset;
411 1097           break;
412             }
413             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_BYTE:
414             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_SHORT:
415             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_INT:
416             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_LONG:
417             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_FLOAT:
418             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_DOUBLE:
419             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_OBJECT:
420             {
421 445           basic_type_id = opcode->operand1;
422 445           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
423 445           int32_t class_var_index = opcode->operand2;
424 445           class_var = SPVM_API_BASIC_TYPE_get_class_var_by_index(runtime, basic_type, class_var_index);
425 445           break;
426             }
427             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_BYTE:
428             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_SHORT:
429             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_INT:
430             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_LONG:
431             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_FLOAT:
432             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_DOUBLE:
433             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_OBJECT:
434             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_UNDEF:
435             {
436 427           basic_type_id = opcode->operand0;
437 427           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
438 427           int32_t class_var_index = opcode->operand1;
439 427           class_var = SPVM_API_BASIC_TYPE_get_class_var_by_index(runtime, basic_type, class_var_index);
440 427           break;
441             }
442             case SPVM_OPCODE_C_ID_CALL_CLASS_METHOD:
443             case SPVM_OPCODE_C_ID_CALL_INSTANCE_METHOD_STATIC:
444             {
445 9441           basic_type_id = opcode->operand0;
446 9441           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
447 9441           int32_t method_index = opcode->operand1;
448 9441           method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, basic_type, method_index);
449 9441           break;
450             }
451             default: {
452 242694           id_set = 0;
453             }
454             }
455            
456 256948 100         if (id_set) {
457 14254 50         if (basic_type_id >= 0) {
458 14254           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
459 14254           const char* basic_type_name = basic_type->name;
460            
461 14254           int32_t found_basic_type = SPVM_PRECOMPILE_contains_basic_type(precompile, string_buffer->string + string_buffer_begin_offset, basic_type_name);
462 14254 100         if (!found_basic_type) {
463            
464 6870           SPVM_STRING_BUFFER_add(string_buffer, " void* ");
465 6870           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
466 6870           SPVM_STRING_BUFFER_add(string_buffer, " = NULL;\n");
467            
468 6870           SPVM_STRING_BUFFER_add(string_buffer, " if (!");
469 6870           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
470 6870           SPVM_STRING_BUFFER_add(string_buffer, ") {\n");
471 6870           SPVM_STRING_BUFFER_add(string_buffer, " ");
472 6870           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
473 6870           SPVM_STRING_BUFFER_add(string_buffer, " = SPVM_IMPLEMENT_GET_BASIC_TYPE_BY_NAME(env, stack, \"");
474 6870           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
475 6870           SPVM_STRING_BUFFER_add(string_buffer, "\", message, &error_id);\n");
476 6870           SPVM_STRING_BUFFER_add(string_buffer, " if (error_id) {\n"
477             " goto END_OF_METHOD;\n"
478             " }\n");
479 6870           SPVM_STRING_BUFFER_add(string_buffer, " }\n");
480            
481             }
482             }
483            
484 14254 100         if (class_var) {
485 872 50         assert(basic_type_id >= 0);
486            
487 872           const char* class_var_name = class_var->name;
488 872           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
489 872           const char* basic_type_name = basic_type->name;
490 872           int32_t found = SPVM_PRECOMPILE_contains_class_var(precompile, string_buffer->string + string_buffer_begin_offset, basic_type_name, class_var_name);
491            
492 872 100         if (!found) {
493 489           SPVM_STRING_BUFFER_add(string_buffer, " void* ");
494 489           SPVM_PRECOMPILE_add_class_var(precompile, string_buffer, basic_type_name, class_var_name);
495 489           SPVM_STRING_BUFFER_add(string_buffer, " = NULL;\n");
496            
497 489           SPVM_STRING_BUFFER_add(string_buffer, " if (!");
498 489           SPVM_PRECOMPILE_add_class_var(precompile, string_buffer, basic_type_name, class_var_name);
499 489           SPVM_STRING_BUFFER_add(string_buffer, ") {\n");
500 489           SPVM_STRING_BUFFER_add(string_buffer, " ");
501 489           SPVM_PRECOMPILE_add_class_var(precompile, string_buffer, basic_type_name, class_var_name);
502 489           SPVM_STRING_BUFFER_add(string_buffer, " = SPVM_IMPLEMENT_GET_CLASS_VAR_BY_NAME(env, stack, \"");
503 489           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
504 489           SPVM_STRING_BUFFER_add(string_buffer, "\", \"");
505 489           SPVM_STRING_BUFFER_add(string_buffer, class_var_name);
506 489           SPVM_STRING_BUFFER_add(string_buffer, "\", message, &error_id);\n");
507 489           SPVM_STRING_BUFFER_add(string_buffer, " if (error_id) {\n"
508             " goto END_OF_METHOD;\n"
509             " }\n");
510 489           SPVM_STRING_BUFFER_add(string_buffer, " }\n");
511             }
512             }
513            
514 14254 100         if (field) {
515 1999 50         assert(basic_type_id >= 0);
516            
517 1999           const char* field_name = field->name;
518 1999           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
519 1999           const char* basic_type_name = basic_type->name;
520            
521 1999           int32_t found = SPVM_PRECOMPILE_contains_field_offset(precompile, string_buffer->string + string_buffer_begin_offset, basic_type_name, field_name);
522            
523 1999 100         if (!found) {
524 1686           SPVM_STRING_BUFFER_add(string_buffer, " int32_t ");
525 1686           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
526 1686           SPVM_STRING_BUFFER_add(string_buffer, " = -1;\n");
527            
528 1686           SPVM_STRING_BUFFER_add(string_buffer, " if (");
529 1686           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
530 1686           SPVM_STRING_BUFFER_add(string_buffer, " < 0) {\n");
531 1686           SPVM_STRING_BUFFER_add(string_buffer, " ");
532 1686           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
533 1686           SPVM_STRING_BUFFER_add(string_buffer, " = SPVM_IMPLEMENT_GET_FIELD_OFFSET_BY_NAME(env, stack, \"");
534 1686           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
535 1686           SPVM_STRING_BUFFER_add(string_buffer, "\", \"");
536 1686           SPVM_STRING_BUFFER_add(string_buffer, field_name);
537 1686           SPVM_STRING_BUFFER_add(string_buffer, "\", message, &error_id);\n");
538 1686           SPVM_STRING_BUFFER_add(string_buffer, " if (error_id) {\n"
539             " goto END_OF_METHOD;\n"
540             " }\n");
541 1686           SPVM_STRING_BUFFER_add(string_buffer, " }\n");
542             }
543             }
544            
545 14254 100         if (method) {
546 9441 50         assert(basic_type_id >= 0);
547            
548 9441           const char* method_name = SPVM_API_METHOD_get_name(runtime, method);
549 9441           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
550 9441           const char* basic_type_name = basic_type->name;
551 9441           int32_t found = SPVM_PRECOMPILE_contains_method(precompile, string_buffer->string + string_buffer_begin_offset, basic_type_name, method_name);
552            
553 9441 100         if (!found) {
554 5885           SPVM_STRING_BUFFER_add(string_buffer, " void* ");
555 5885           SPVM_PRECOMPILE_add_method(precompile, string_buffer, basic_type_name, method_name);
556 5885           SPVM_STRING_BUFFER_add(string_buffer, " = NULL;\n");
557            
558 5885           SPVM_STRING_BUFFER_add(string_buffer, " if (!");
559 5885           SPVM_PRECOMPILE_add_method(precompile, string_buffer, basic_type_name, method_name);
560 5885           SPVM_STRING_BUFFER_add(string_buffer, ") {\n");
561 5885           SPVM_STRING_BUFFER_add(string_buffer, " ");
562 5885           SPVM_PRECOMPILE_add_method(precompile, string_buffer, basic_type_name, method_name);
563 5885           SPVM_STRING_BUFFER_add(string_buffer, " = SPVM_IMPLEMENT_GET_METHOD_BY_NAME(env, stack, \"");
564 5885           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
565 5885           SPVM_STRING_BUFFER_add(string_buffer, "\", \"");
566 5885           SPVM_STRING_BUFFER_add(string_buffer, method_name);
567 5885           SPVM_STRING_BUFFER_add(string_buffer, "\", message, &error_id);\n");
568 5885           SPVM_STRING_BUFFER_add(string_buffer, " if (error_id) {\n"
569             " goto END_OF_METHOD;\n"
570             " }\n");
571 5885           SPVM_STRING_BUFFER_add(string_buffer, " }\n");
572             }
573             }
574             }
575            
576 256948           opcode_index++;
577             }
578              
579 5777           opcode_index = 0;
580 262725 100         while (opcode_index < opcodes_length) {
581              
582             // Line label
583 256948           SPVM_STRING_BUFFER_add(string_buffer, "L");
584 256948           SPVM_STRING_BUFFER_add_int(string_buffer, opcode_index);
585 256948           SPVM_STRING_BUFFER_add(string_buffer, ": ");
586            
587 256948           opcode = &(opcodes[opcode_index]);
588              
589 256948           int32_t opcode_id = opcode->id;
590              
591 256948           SPVM_STRING_BUFFER_add(string_buffer, "// ");
592 256948           SPVM_STRING_BUFFER_add(string_buffer, (char*)(SPVM_OPCODE_C_ID_NAMES())[opcode_id]);
593 256948           SPVM_STRING_BUFFER_add(string_buffer, "\n");
594            
595 256948           switch (opcode_id) {
596              
597             case SPVM_OPCODE_C_ID_END_METHOD: {
598 5777           break;
599             }
600             case SPVM_OPCODE_C_ID_GOTO: {
601 11333           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
602 11333           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
603 11333           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
604 11333           break;
605             }
606             case SPVM_OPCODE_C_ID_IF_EQ_ZERO: {
607 4585           SPVM_STRING_BUFFER_add(string_buffer, " if (");
608 4585           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
609 4585           SPVM_STRING_BUFFER_add(string_buffer, " == 0) { goto L");
610 4585           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
611 4585           SPVM_STRING_BUFFER_add(string_buffer, "; }\n");
612 4585           break;
613             }
614             case SPVM_OPCODE_C_ID_IF_NE_ZERO: {
615 6612           SPVM_STRING_BUFFER_add(string_buffer, " if (");
616 6612           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
617 6612           SPVM_STRING_BUFFER_add(string_buffer, " != 0) { goto L");
618 6612           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
619 6612           SPVM_STRING_BUFFER_add(string_buffer, "; }\n");
620 6612           break;
621             }
622             case SPVM_OPCODE_C_ID_GOTO_END_OF_EVAL_ON_EXCEPTION: {
623 1795           int32_t line = opcode->operand2;
624            
625 1795           SPVM_STRING_BUFFER_add(string_buffer, " if (__builtin_expect(error_id, 0)) {\n"
626             " eval_error_id = error_id;\n"
627             " error_id = 0;\n"
628             " env->set_exception(env, stack, env->new_stack_trace_no_mortal(env, stack, env->get_exception(env, stack), current_method, line = ");
629 1795           SPVM_STRING_BUFFER_add_int(string_buffer, line);
630 1795           SPVM_STRING_BUFFER_add(string_buffer, "));\n"
631             " goto L");
632 1795           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
633 1795           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
634 1795           SPVM_STRING_BUFFER_add(string_buffer, " }\n");
635            
636 1795           break;
637             }
638             case SPVM_OPCODE_C_ID_GOTO_END_OF_METHOD_ON_EXCEPTION: {
639 24471           int32_t line = opcode->operand2;
640            
641 24471           SPVM_STRING_BUFFER_add(string_buffer, " if (__builtin_expect(error_id, 0)) {\n"
642             " env->set_exception(env, stack, env->new_stack_trace_no_mortal(env, stack, env->get_exception(env, stack), current_method, line = ");
643 24471           SPVM_STRING_BUFFER_add_int(string_buffer, line);
644 24471           SPVM_STRING_BUFFER_add(string_buffer, "));\n"
645             " goto L");
646 24471           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
647 24471           SPVM_STRING_BUFFER_add(string_buffer, ";\n"
648             " }\n");
649 24471           break;
650             }
651             case SPVM_OPCODE_C_ID_LOOKUP_SWITCH: {
652             // Default branch
653 38           int32_t default_opcode_rel_index = opcode->operand1;
654            
655             // Cases length
656 38           int32_t case_infos_length = opcode->operand2;
657              
658 38           SPVM_STRING_BUFFER_add(string_buffer, " switch(");
659 38           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
660 38           SPVM_STRING_BUFFER_add(string_buffer, ") {\n");
661 124 100         for (int32_t case_index = 0; case_index < case_infos_length; case_index++) {
662 86           SPVM_OPCODE* opcode_case_info = &(opcodes[opcode_index + 1 + case_index]);
663              
664 86           int32_t match = opcode_case_info->operand1;
665 86           int32_t opcode_rel_index = opcode_case_info->operand2;
666            
667 86           SPVM_STRING_BUFFER_add(string_buffer, " case ");
668 86           SPVM_STRING_BUFFER_add_int(string_buffer, match);
669 86           SPVM_STRING_BUFFER_add(string_buffer, ": goto L");
670 86           SPVM_STRING_BUFFER_add_int(string_buffer, opcode_rel_index);
671 86           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
672             }
673 38           SPVM_STRING_BUFFER_add(string_buffer, " default: goto L");
674 38           SPVM_STRING_BUFFER_add_int(string_buffer, default_opcode_rel_index);
675 38           SPVM_STRING_BUFFER_add(string_buffer, ";\n"
676            
677             " }\n");
678 38           break;
679             }
680             case SPVM_OPCODE_C_ID_CASE_INFO: {
681 86           break;
682             }
683             case SPVM_OPCODE_C_ID_PUSH_MORTAL: {
684 16337           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_PUSH_MORTAL(mortal_stack, mortal_stack_top, ");
685 16337           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand0);
686 16337           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
687 16337           break;
688             }
689             case SPVM_OPCODE_C_ID_LEAVE_SCOPE: {
690 10137           int32_t original_mortal_stack_top = opcode->operand0;
691 10137 50         if (method_mortal_stack_length > 0) {
692 10137           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LEAVE_SCOPE(env, stack, object_vars, mortal_stack, &mortal_stack_top, original_mortal_stack_top = ");
693 10137           SPVM_STRING_BUFFER_add_int(string_buffer, original_mortal_stack_top);
694 10137           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
695             }
696 10137           break;
697             }
698             case SPVM_OPCODE_C_ID_MOVE_BYTE_ZERO: {
699 70           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_BYTE_ZERO(");
700 70           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
701 70           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
702 70           break;
703             }
704             case SPVM_OPCODE_C_ID_MOVE_SHORT_ZERO: {
705 69           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_SHORT_ZERO(");
706 69           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
707 69           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
708 69           break;
709             }
710             case SPVM_OPCODE_C_ID_MOVE_INT_ZERO: {
711 10340           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_INT_ZERO(");
712 10340           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
713 10340           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
714 10340           break;
715             }
716             case SPVM_OPCODE_C_ID_MOVE_LONG_ZERO: {
717 166           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_LONG_ZERO(");
718 166           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
719 166           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
720 166           break;
721             }
722             case SPVM_OPCODE_C_ID_MOVE_FLOAT_ZERO: {
723 111           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_FLOAT_ZERO(");
724 111           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
725 111           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
726 111           break;
727             }
728             case SPVM_OPCODE_C_ID_MOVE_DOUBLE_ZERO: {
729 118           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_DOUBLE_ZERO(");
730 118           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
731 118           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
732 118           break;
733             }
734             case SPVM_OPCODE_C_ID_MOVE_OBJECT_UNDEF: {
735 642           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_OBJECT_UNDEF(env, stack, ");
736 642           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
737 642           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
738 642           break;
739             }
740             case SPVM_OPCODE_C_ID_MOVE_MULNUM_BYTE_ZERO: {
741 24           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_BYTE_ZERO(env, stack, ");
742 24           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
743 24           SPVM_STRING_BUFFER_add(string_buffer, ", ");
744 24           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
745 24           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
746 24           break;
747             }
748             case SPVM_OPCODE_C_ID_MOVE_MULNUM_SHORT_ZERO: {
749 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_SHORT_ZERO(env, stack, ");
750 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
751 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
752 22           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
753 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
754 22           break;
755             }
756             case SPVM_OPCODE_C_ID_MOVE_MULNUM_INT_ZERO: {
757 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_INT_ZERO(env, stack, ");
758 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
759 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
760 22           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
761 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
762 22           break;
763             }
764             case SPVM_OPCODE_C_ID_MOVE_MULNUM_LONG_ZERO: {
765 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_LONG_ZERO(env, stack, ");
766 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
767 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
768 22           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
769 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
770 22           break;
771             }
772             case SPVM_OPCODE_C_ID_MOVE_MULNUM_FLOAT_ZERO: {
773 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_FLOAT_ZERO(env, stack, ");
774 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
775 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
776 22           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
777 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
778 22           break;
779             }
780             case SPVM_OPCODE_C_ID_MOVE_MULNUM_DOUBLE_ZERO: {
781 76           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_DOUBLE_ZERO(env, stack, ");
782 76           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
783 76           SPVM_STRING_BUFFER_add(string_buffer, ", ");
784 76           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
785 76           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
786 76           break;
787             }
788             case SPVM_OPCODE_C_ID_MOVE_CONSTANT_BYTE: {
789 432           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_CONSTANT_BYTE(");
790 432           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
791 432           SPVM_STRING_BUFFER_add(string_buffer, ", ");
792 432           SPVM_STRING_BUFFER_add_byte(string_buffer, (int8_t)opcode->operand1);
793 432           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
794 432           break;
795             }
796             case SPVM_OPCODE_C_ID_MOVE_CONSTANT_INT: {
797 39435           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_CONSTANT_INT(");
798 39435           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
799 39435           SPVM_STRING_BUFFER_add(string_buffer, ", ");
800 39435           SPVM_STRING_BUFFER_add_int(string_buffer, (int32_t)opcode->operand1);
801 39435           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
802 39435           break;
803             }
804             case SPVM_OPCODE_C_ID_MOVE_CONSTANT_LONG: {
805 333           int64_t long_value = *(int64_t*)&opcode->operand1;
806            
807 333           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_CONSTANT_LONG(");
808 333           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
809 333           SPVM_STRING_BUFFER_add(string_buffer, ", ");
810 333           SPVM_STRING_BUFFER_add_long(string_buffer, long_value);
811 333           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
812 333           break;
813             }
814             case SPVM_OPCODE_C_ID_MOVE_CONSTANT_FLOAT: {
815             SPVM_VALUE value;
816 452           value.ival = (int32_t)opcode->operand1;
817            
818 452           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_CONSTANT_FLOAT(");
819 452           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
820 452           SPVM_STRING_BUFFER_add(string_buffer, ", (tmp_constant.ival = ");
821 452           SPVM_STRING_BUFFER_add_int(string_buffer, value.ival);
822 452           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_constant.fval));\n");
823 452           break;
824             }
825             case SPVM_OPCODE_C_ID_MOVE_CONSTANT_DOUBLE: {
826 554           double double_value = *(double*)&opcode->operand1;
827             SPVM_VALUE value;
828 554           value.dval = double_value;
829            
830 554           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_CONSTANT_DOUBLE(");
831 554           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
832 554           SPVM_STRING_BUFFER_add(string_buffer, ", (tmp_constant.lval = ");
833 554           SPVM_STRING_BUFFER_add_long(string_buffer, value.lval);
834 554           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_constant.dval));\n");
835 554           break;
836             }
837             case SPVM_OPCODE_C_ID_MOVE_BYTE: {
838 65           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_BYTE(");
839 65           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
840 65           SPVM_STRING_BUFFER_add(string_buffer, ", ");
841 65           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
842 65           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
843 65           break;
844             }
845             case SPVM_OPCODE_C_ID_MOVE_SHORT: {
846 65           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_SHORT(");
847 65           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
848 65           SPVM_STRING_BUFFER_add(string_buffer, ", ");
849 65           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
850 65           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
851 65           break;
852             }
853             case SPVM_OPCODE_C_ID_MOVE_INT: {
854 546           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_INT(");
855 546           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
856 546           SPVM_STRING_BUFFER_add(string_buffer, ", ");
857 546           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
858 546           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
859 546           break;
860             }
861             case SPVM_OPCODE_C_ID_MOVE_LONG: {
862 59           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_LONG(");
863 59           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
864 59           SPVM_STRING_BUFFER_add(string_buffer, ", ");
865 59           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
866 59           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
867 59           break;
868             }
869             case SPVM_OPCODE_C_ID_MOVE_FLOAT: {
870 53           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_FLOAT(");
871 53           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
872 53           SPVM_STRING_BUFFER_add(string_buffer, ", ");
873 53           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
874 53           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
875 53           break;
876             }
877             case SPVM_OPCODE_C_ID_MOVE_DOUBLE: {
878 56           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_DOUBLE(");
879 56           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
880 56           SPVM_STRING_BUFFER_add(string_buffer, ", ");
881 56           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
882 56           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
883 56           break;
884             }
885             case SPVM_OPCODE_C_ID_MOVE_OBJECT: {
886 1000           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_OBJECT(env, stack, &");
887 1000           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
888 1000           SPVM_STRING_BUFFER_add(string_buffer, ", ");
889 1000           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
890 1000           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
891 1000           break;
892             }
893             case SPVM_OPCODE_C_ID_MOVE_OBJECT_WITH_TYPE_CHECKING: {
894 261           int32_t cast_basic_type_id = opcode->operand2;
895 261           int32_t cast_type_dimension = opcode->operand3;
896            
897 261           SPVM_RUNTIME_BASIC_TYPE* cast_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, cast_basic_type_id);
898 261           const char* cast_basic_type_name = cast_basic_type->name;
899            
900 261           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
901 261           SPVM_STRING_BUFFER_add(string_buffer, (char*)cast_basic_type_name);
902 261           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
903            
904 261           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
905 261           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, cast_basic_type_name);
906 261           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
907            
908 261           SPVM_STRING_BUFFER_add(string_buffer, " cast_type_dimension = ");
909 261           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
910 261           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
911            
912 261           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_OBJECT_WITH_TYPE_CHECKING(env, stack, ");
913 261           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
914 261           SPVM_STRING_BUFFER_add(string_buffer, ", ");
915 261           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
916 261           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type, cast_type_dimension, &error_id);\n");
917 261           break;
918             }
919             case SPVM_OPCODE_C_ID_MOVE_OBJECT_CHECK_READ_ONLY: {
920 44           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_OBJECT_CHECK_READ_ONLY(env, stack, ");
921 44           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
922 44           SPVM_STRING_BUFFER_add(string_buffer, ", ");
923 44           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
924 44           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
925 44           break;
926             }
927             case SPVM_OPCODE_C_ID_MOVE_REF: {
928 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_REF(");
929 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
930 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
931 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
932 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
933 4           break;
934             }
935             case SPVM_OPCODE_C_ID_ADD_INT: {
936 902           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ADD_INT(");
937 902           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
938 902           SPVM_STRING_BUFFER_add(string_buffer, ", ");
939 902           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
940 902           SPVM_STRING_BUFFER_add(string_buffer, ", ");
941 902           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
942 902           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
943 902           break;
944             }
945             case SPVM_OPCODE_C_ID_ADD_LONG: {
946 175           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ADD_LONG(");
947 175           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
948 175           SPVM_STRING_BUFFER_add(string_buffer, ", ");
949 175           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
950 175           SPVM_STRING_BUFFER_add(string_buffer, ", ");
951 175           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
952 175           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
953 175           break;
954             }
955             case SPVM_OPCODE_C_ID_ADD_FLOAT: {
956 170           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ADD_FLOAT(");
957 170           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
958 170           SPVM_STRING_BUFFER_add(string_buffer, ", ");
959 170           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
960 170           SPVM_STRING_BUFFER_add(string_buffer, ", ");
961 170           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
962 170           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
963 170           break;
964             }
965             case SPVM_OPCODE_C_ID_ADD_DOUBLE: {
966 185           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ADD_DOUBLE(");
967 185           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
968 185           SPVM_STRING_BUFFER_add(string_buffer, ", ");
969 185           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
970 185           SPVM_STRING_BUFFER_add(string_buffer, ", ");
971 185           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
972 185           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
973 185           break;
974             }
975             case SPVM_OPCODE_C_ID_SUBTRACT_INT: {
976 243           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SUBTRACT_INT(");
977 243           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
978 243           SPVM_STRING_BUFFER_add(string_buffer, ", ");
979 243           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
980 243           SPVM_STRING_BUFFER_add(string_buffer, ", ");
981 243           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
982 243           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
983 243           break;
984             }
985             case SPVM_OPCODE_C_ID_SUBTRACT_LONG: {
986 44           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SUBTRACT_LONG(");
987 44           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
988 44           SPVM_STRING_BUFFER_add(string_buffer, ", ");
989 44           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
990 44           SPVM_STRING_BUFFER_add(string_buffer, ", ");
991 44           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
992 44           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
993 44           break;
994             }
995             case SPVM_OPCODE_C_ID_SUBTRACT_FLOAT: {
996 41           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SUBTRACT_FLOAT(");
997 41           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
998 41           SPVM_STRING_BUFFER_add(string_buffer, ", ");
999 41           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1000 41           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1001 41           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1002 41           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1003 41           break;
1004             }
1005             case SPVM_OPCODE_C_ID_SUBTRACT_DOUBLE: {
1006 42           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SUBTRACT_DOUBLE(");
1007 42           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
1008 42           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1009 42           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1010 42           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1011 42           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1012 42           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1013 42           break;
1014             }
1015             case SPVM_OPCODE_C_ID_MULTIPLY_INT: {
1016 81           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MULTIPLY_INT(");
1017 81           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1018 81           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1019 81           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1020 81           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1021 81           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1022 81           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1023 81           break;
1024             }
1025             case SPVM_OPCODE_C_ID_MULTIPLY_LONG: {
1026 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MULTIPLY_LONG(");
1027 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1028 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1029 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1030 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1031 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1032 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1033 9           break;
1034             }
1035             case SPVM_OPCODE_C_ID_MULTIPLY_FLOAT: {
1036 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MULTIPLY_FLOAT(");
1037 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
1038 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1039 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1040 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1041 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1042 19           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1043 19           break;
1044             }
1045             case SPVM_OPCODE_C_ID_MULTIPLY_DOUBLE: {
1046 25           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MULTIPLY_DOUBLE(");
1047 25           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
1048 25           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1049 25           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1050 25           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1051 25           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1052 25           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1053 25           break;
1054             }
1055             case SPVM_OPCODE_C_ID_DIVIDE_INT: {
1056 40           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_INT(env, stack, ");
1057 40           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1058 40           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1059 40           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1060 40           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1061 40           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1062 40           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1063 40           break;
1064             }
1065             case SPVM_OPCODE_C_ID_DIVIDE_LONG: {
1066 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_LONG(env, stack, ");
1067 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1068 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1069 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1070 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1071 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1072 3           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1073 3           break;
1074             }
1075             case SPVM_OPCODE_C_ID_DIVIDE_FLOAT: {
1076 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_FLOAT(");
1077 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
1078 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1079 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1080 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1081 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1082 19           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1083 19           break;
1084             }
1085             case SPVM_OPCODE_C_ID_DIVIDE_DOUBLE: {
1086 24           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_DOUBLE(");
1087 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
1088 24           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1089 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1090 24           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1091 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1092 24           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1093 24           break;
1094             }
1095             case SPVM_OPCODE_C_ID_DIVIDE_UNSIGNED_INT: {
1096 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_UNSIGNED_INT(env, stack, ");
1097 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1098 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1099 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1100 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1101 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1102 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1103 1           break;
1104             }
1105             case SPVM_OPCODE_C_ID_DIVIDE_UNSIGNED_LONG: {
1106 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DIVIDE_UNSIGNED_LONG(env, stack, ");
1107 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1108 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1109 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1110 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1111 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1112 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1113 1           break;
1114             }
1115             case SPVM_OPCODE_C_ID_REMAINDER_INT: {
1116 36           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REMAINDER_INT(env, stack, ");
1117 36           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1118 36           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1119 36           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1120 36           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1121 36           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1122 36           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1123 36           break;
1124             }
1125             case SPVM_OPCODE_C_ID_REMAINDER_LONG: {
1126 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REMAINDER_LONG(env, stack, ");
1127 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1128 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1129 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1130 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1131 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1132 7           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1133 7           break;
1134             }
1135             case SPVM_OPCODE_C_ID_REMAINDER_UNSIGNED_INT: {
1136 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REMAINDER_UNSIGNED_INT(env, stack, ");
1137 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1138 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1139 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1140 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1141 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1142 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1143 1           break;
1144             }
1145             case SPVM_OPCODE_C_ID_REMAINDER_UNSIGNED_LONG: {
1146 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REMAINDER_UNSIGNED_LONG(env, stack, ");
1147 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1148 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1149 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1150 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1151 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1152 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1153 1           break;
1154             }
1155             case SPVM_OPCODE_C_ID_LEFT_SHIFT_INT: {
1156 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LEFT_SHIFT_INT(");
1157 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1158 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1159 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1160 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1161 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1162 19           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1163 19           break;
1164             }
1165             case SPVM_OPCODE_C_ID_LEFT_SHIFT_LONG: {
1166 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LEFT_SHIFT_LONG(");
1167 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1168 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1169 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1170 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1171 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1172 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1173 6           break;
1174             }
1175             case SPVM_OPCODE_C_ID_RIGHT_ARITHMETIC_SHIFT_INT: {
1176 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RIGHT_ARITHMETIC_SHIFT_INT(");
1177 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1178 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1179 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1180 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1181 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1182 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1183 12           break;
1184             }
1185             case SPVM_OPCODE_C_ID_RIGHT_ARITHMETIC_SHIFT_LONG: {
1186 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RIGHT_ARITHMETIC_SHIFT_LONG(");
1187 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1188 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1189 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1190 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1191 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1192 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1193 5           break;
1194             }
1195             case SPVM_OPCODE_C_ID_RIGHT_LOGICAL_SHIFT_INT: {
1196 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_INT(");
1197 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1198 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1199 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1200 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1201 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1202 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1203 12           break;
1204             }
1205             case SPVM_OPCODE_C_ID_RIGHT_LOGICAL_SHIFT_LONG: {
1206 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RIGHT_LOGICAL_SHIFT_LONG(");
1207 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1208 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1209 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1210 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1211 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1212 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1213 5           break;
1214             }
1215             case SPVM_OPCODE_C_ID_BIT_AND_INT: {
1216 32           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_AND_INT(");
1217 32           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1218 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1219 32           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1220 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1221 32           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1222 32           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1223 32           break;
1224             }
1225             case SPVM_OPCODE_C_ID_BIT_AND_LONG: {
1226 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_AND_LONG(");
1227 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1228 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1229 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1230 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1231 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1232 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1233 2           break;
1234             }
1235             case SPVM_OPCODE_C_ID_BIT_OR_INT: {
1236 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_OR_INT(");
1237 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1238 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1239 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1240 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1241 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1242 19           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1243 19           break;
1244             }
1245             case SPVM_OPCODE_C_ID_BIT_OR_LONG: {
1246 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_OR_LONG(");
1247 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1248 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1249 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1250 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1251 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1252 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1253 2           break;
1254             }
1255             case SPVM_OPCODE_C_ID_BIT_XOR_INT: {
1256 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_XOR_INT(");
1257 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1258 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1259 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1260 19           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1261 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1262 19           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1263 19           break;
1264             }
1265             case SPVM_OPCODE_C_ID_BIT_XOR_LONG: {
1266 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_XOR_LONG(");
1267 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1268 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1269 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1270 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1271 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1272 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1273 2           break;
1274             }
1275             case SPVM_OPCODE_C_ID_BIT_NOT_INT: {
1276 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_NOT_INT(");
1277 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1278 14           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1279 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1280 14           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1281 14           break;
1282             }
1283             case SPVM_OPCODE_C_ID_BIT_NOT_LONG: {
1284 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BIT_NOT_LONG(");
1285 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1286 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1287 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1288 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1289 4           break;
1290             }
1291             case SPVM_OPCODE_C_ID_NEGATE_INT: {
1292 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEGATE_INT(");
1293 11           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1294 11           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1295 11           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1296 11           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1297 11           break;
1298             }
1299             case SPVM_OPCODE_C_ID_NEGATE_LONG: {
1300 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEGATE_LONG(");
1301 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
1302 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1303 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1304 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1305 3           break;
1306             }
1307             case SPVM_OPCODE_C_ID_NEGATE_FLOAT: {
1308 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEGATE_FLOAT(");
1309 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
1310 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1311 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1312 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1313 3           break;
1314             }
1315             case SPVM_OPCODE_C_ID_NEGATE_DOUBLE: {
1316 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEGATE_DOUBLE(");
1317 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
1318 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1319 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1320 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1321 3           break;
1322             }
1323             case SPVM_OPCODE_C_ID_CONCAT: {
1324 374           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CONCAT(env, stack, ");
1325 374           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1326 374           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1327 374           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1328 374           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1329 374           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1330 374           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id);\n");
1331 374           break;
1332             }
1333             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_INT: {
1334 11569           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_INT(");
1335 11569           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1336 11569           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1337 11569           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1338 11569           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1339 11569           break;
1340             }
1341             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_LONG: {
1342 10           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_LONG(");
1343 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1344 10           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1345 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1346 10           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1347 10           break;
1348             }
1349             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_FLOAT: {
1350 10           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_FLOAT(");
1351 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1352 10           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1353 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1354 10           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1355 10           break;
1356             }
1357             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_DOUBLE: {
1358 47           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_DOUBLE(");
1359 47           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1360 47           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1361 47           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1362 47           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1363 47           break;
1364             }
1365             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_OBJECT: {
1366 1141           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_OBJECT(");
1367 1141           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1368 1141           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1369 1141           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1370 1141           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1371 1141           break;
1372             }
1373             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_REF: {
1374 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_REF(");
1375 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1376 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1377 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
1378 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1379 2           break;
1380             }
1381             case SPVM_OPCODE_C_ID_BOOL_CONVERSION_BOOL_OBJECT: {
1382 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_BOOL_CONVERSION_BOOL_OBJECT(env, stack, ");
1383 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1384 14           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1385 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1386 14           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1387 14           break;
1388             }
1389             case SPVM_OPCODE_C_ID_EQ_INT: {
1390 4131           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_INT(");
1391 4131           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1392 4131           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1393 4131           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1394 4131           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1395 4131           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1396 4131           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1397 4131           break;
1398             }
1399             case SPVM_OPCODE_C_ID_EQ_LONG: {
1400 568           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_LONG(");
1401 568           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1402 568           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1403 568           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1404 568           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1405 568           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1406 568           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1407 568           break;
1408             }
1409             case SPVM_OPCODE_C_ID_EQ_FLOAT: {
1410 484           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_FLOAT(");
1411 484           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1412 484           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1413 484           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1414 484           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1415 484           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1416 484           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1417 484           break;
1418             }
1419             case SPVM_OPCODE_C_ID_EQ_DOUBLE: {
1420 557           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_DOUBLE(");
1421 557           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1422 557           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1423 557           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1424 557           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1425 557           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1426 557           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1427 557           break;
1428             }
1429             case SPVM_OPCODE_C_ID_EQ_OBJECT: {
1430 130           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_OBJECT(");
1431 130           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1432 130           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1433 130           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1434 130           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1435 130           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1436 130           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1437 130           break;
1438             }
1439             case SPVM_OPCODE_C_ID_EQ_REF: {
1440 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_EQ_REF(");
1441 0           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1442 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1443 0           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
1444 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1445 0           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand2);
1446 0           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1447 0           break;
1448             }
1449             case SPVM_OPCODE_C_ID_NE_INT: {
1450 87           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_INT(");
1451 87           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1452 87           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1453 87           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1454 87           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1455 87           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1456 87           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1457 87           break;
1458             }
1459             case SPVM_OPCODE_C_ID_NE_LONG: {
1460 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_LONG(");
1461 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1462 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1463 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1464 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1465 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1466 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1467 6           break;
1468             }
1469             case SPVM_OPCODE_C_ID_NE_FLOAT: {
1470 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_FLOAT(");
1471 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1472 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1473 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1474 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1475 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1476 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1477 5           break;
1478             }
1479             case SPVM_OPCODE_C_ID_NE_DOUBLE: {
1480 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_DOUBLE(");
1481 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1482 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1483 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1484 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1485 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1486 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1487 5           break;
1488             }
1489             case SPVM_OPCODE_C_ID_NE_OBJECT: {
1490 15           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_OBJECT(");
1491 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1492 15           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1493 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1494 15           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1495 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1496 15           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1497 15           break;
1498             }
1499             case SPVM_OPCODE_C_ID_NE_REF: {
1500 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NE_REF(");
1501 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1502 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1503 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
1504 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1505 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand2);
1506 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1507 4           break;
1508             }
1509             case SPVM_OPCODE_C_ID_GT_INT: {
1510 37           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GT_INT(");
1511 37           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1512 37           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1513 37           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1514 37           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1515 37           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1516 37           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1517 37           break;
1518             }
1519             case SPVM_OPCODE_C_ID_GT_LONG: {
1520 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GT_LONG(");
1521 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1522 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1523 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1524 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1525 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1526 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1527 6           break;
1528             }
1529             case SPVM_OPCODE_C_ID_GT_FLOAT: {
1530 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GT_FLOAT(");
1531 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1532 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1533 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1534 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1535 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1536 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1537 6           break;
1538             }
1539             case SPVM_OPCODE_C_ID_GT_DOUBLE: {
1540 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GT_DOUBLE(");
1541 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1542 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1543 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1544 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1545 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1546 7           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1547 7           break;
1548             }
1549             case SPVM_OPCODE_C_ID_GE_INT: {
1550 83           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GE_INT(");
1551 83           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1552 83           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1553 83           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1554 83           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1555 83           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1556 83           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1557 83           break;
1558             }
1559             case SPVM_OPCODE_C_ID_GE_LONG: {
1560 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GE_LONG(");
1561 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1562 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1563 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1564 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1565 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1566 7           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1567 7           break;
1568             }
1569             case SPVM_OPCODE_C_ID_GE_FLOAT: {
1570 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GE_FLOAT(");
1571 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1572 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1573 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1574 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1575 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1576 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1577 6           break;
1578             }
1579             case SPVM_OPCODE_C_ID_GE_DOUBLE: {
1580 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GE_DOUBLE(");
1581 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1582 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1583 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1584 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1585 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1586 7           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1587 7           break;
1588             }
1589             case SPVM_OPCODE_C_ID_LT_INT: {
1590 232           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LT_INT(");
1591 232           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1592 232           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1593 232           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1594 232           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1595 232           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1596 232           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1597 232           break;
1598             }
1599             case SPVM_OPCODE_C_ID_LT_LONG: {
1600 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LT_LONG(");
1601 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1602 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1603 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1604 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1605 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1606 7           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1607 7           break;
1608             }
1609             case SPVM_OPCODE_C_ID_LT_FLOAT: {
1610 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LT_FLOAT(");
1611 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1612 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1613 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1614 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1615 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1616 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1617 6           break;
1618             }
1619             case SPVM_OPCODE_C_ID_LT_DOUBLE: {
1620 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LT_DOUBLE(");
1621 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1622 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1623 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1624 7           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1625 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1626 7           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1627 7           break;
1628             }
1629             case SPVM_OPCODE_C_ID_LE_INT: {
1630 76           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LE_INT(");
1631 76           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1632 76           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1633 76           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1634 76           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1635 76           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1636 76           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1637 76           break;
1638             }
1639             case SPVM_OPCODE_C_ID_LE_LONG: {
1640 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LE_LONG(");
1641 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1642 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1643 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1644 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1645 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1646 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1647 6           break;
1648             }
1649             case SPVM_OPCODE_C_ID_LE_FLOAT: {
1650 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LE_FLOAT(");
1651 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1652 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1653 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1654 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1655 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1656 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1657 6           break;
1658             }
1659             case SPVM_OPCODE_C_ID_LE_DOUBLE: {
1660 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_LE_DOUBLE(");
1661 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1662 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1663 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1664 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1665 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1666 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1667 6           break;
1668             }
1669             case SPVM_OPCODE_C_ID_CMP_INT: {
1670 98           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CMP_INT(");
1671 98           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1672 98           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1673 98           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1674 98           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1675 98           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1676 98           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1677 98           break;
1678             }
1679             case SPVM_OPCODE_C_ID_CMP_LONG: {
1680 24           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CMP_LONG(");
1681 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1682 24           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1683 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
1684 24           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1685 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
1686 24           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1687 24           break;
1688             }
1689             case SPVM_OPCODE_C_ID_CMP_FLOAT: {
1690 26           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CMP_FLOAT(");
1691 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1692 26           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1693 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
1694 26           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1695 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
1696 26           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1697 26           break;
1698             }
1699             case SPVM_OPCODE_C_ID_CMP_DOUBLE: {
1700 26           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CMP_DOUBLE(");
1701 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1702 26           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1703 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
1704 26           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1705 26           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
1706 26           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1707 26           break;
1708             }
1709             case SPVM_OPCODE_C_ID_IS_UNDEF: {
1710 144           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_IS_UNDEF(");
1711 144           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1712 144           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1713 144           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1714 144           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1715 144           break;
1716             }
1717             case SPVM_OPCODE_C_ID_IS_NOT_UNDEF: {
1718 21           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_IS_NOT_UNDEF(");
1719 21           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1720 21           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1721 21           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1722 21           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1723 21           break;
1724             }
1725             case SPVM_OPCODE_C_ID_STRING_EQ: {
1726 548           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_EQ(env, stack, ");
1727 548           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1728 548           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1729 548           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1730 548           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1731 548           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1732 548           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1733 548           break;
1734             }
1735             case SPVM_OPCODE_C_ID_STRING_NE: {
1736 23           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_NE(env, stack, ");
1737 23           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1738 23           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1739 23           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1740 23           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1741 23           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1742 23           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1743 23           break;
1744             }
1745             case SPVM_OPCODE_C_ID_STRING_GT: {
1746 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_GT(env, stack, ");
1747 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1748 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1749 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1750 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1751 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1752 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1753 22           break;
1754             }
1755             case SPVM_OPCODE_C_ID_STRING_GE: {
1756 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_GE(env, stack, ");
1757 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1758 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1759 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1760 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1761 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1762 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1763 22           break;
1764             }
1765             case SPVM_OPCODE_C_ID_STRING_LT: {
1766 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_LT(env, stack, ");
1767 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1768 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1769 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1770 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1771 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1772 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1773 22           break;
1774             }
1775             case SPVM_OPCODE_C_ID_STRING_LE: {
1776 22           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_LE(env, stack, ");
1777 22           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1778 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1779 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1780 22           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1781 22           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1782 22           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1783 22           break;
1784             }
1785             case SPVM_OPCODE_C_ID_STRING_CMP: {
1786 42           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_STRING_CMP(env, stack, ");
1787 42           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
1788 42           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1789 42           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1790 42           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1791 42           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
1792 42           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1793 42           break;
1794             }
1795             case SPVM_OPCODE_C_ID_NEW_OBJECT: {
1796 297           int32_t basic_type_id = opcode->operand1;
1797 297           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
1798 297           const char* basic_type_name = basic_type->name;
1799            
1800 297           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
1801 297           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
1802 297           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
1803            
1804 297           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
1805 297           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
1806 297           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1807            
1808 297           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_OBJECT(env, stack, ");
1809 297           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1810 297           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type, &error_id);");
1811            
1812 297           break;
1813             }
1814             case SPVM_OPCODE_C_ID_NEW_OBJECT_ARRAY: {
1815 741           int32_t basic_type_id = opcode->operand1;
1816 741           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
1817 741           const char* basic_type_name = basic_type->name;
1818            
1819 741           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
1820 741           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
1821 741           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
1822            
1823 741           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1824 741           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1825 741           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1826            
1827 741           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
1828 741           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
1829 741           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1830            
1831 741           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_OBJECT_ARRAY(env, stack, ");
1832 741           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1833 741           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type, length, &error_id);\n");
1834 741           break;
1835             }
1836             case SPVM_OPCODE_C_ID_NEW_MULDIM_ARRAY: {
1837 27           int32_t basic_type_id = opcode->operand1;
1838 27           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
1839 27           const char* basic_type_name = basic_type->name;
1840 27           int32_t type_dimension = opcode->operand3;
1841            
1842 27           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
1843 27           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
1844 27           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
1845            
1846 27           SPVM_STRING_BUFFER_add(string_buffer, " type_dimension = ");
1847 27           SPVM_STRING_BUFFER_add_int(string_buffer, type_dimension);
1848 27           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1849            
1850 27           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1851 27           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1852 27           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1853            
1854 27           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
1855 27           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
1856 27           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1857            
1858 27           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_MULDIM_ARRAY(env, stack, ");
1859 27           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1860 27           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type, type_dimension, length, &error_id);\n");
1861            
1862 27           break;
1863             }
1864             case SPVM_OPCODE_C_ID_NEW_MULNUM_ARRAY: {
1865 84           int32_t basic_type_id = opcode->operand1;
1866 84           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
1867 84           const char* basic_type_name = basic_type->name;
1868            
1869 84           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
1870 84           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
1871 84           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
1872            
1873 84           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1874 84           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1875 84           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1876            
1877 84           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
1878 84           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
1879 84           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1880            
1881 84           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_MULNUM_ARRAY(env, stack, ");
1882 84           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1883 84           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type, length, &error_id);\n");
1884            
1885 84           break;
1886             }
1887             case SPVM_OPCODE_C_ID_NEW_BYTE_ARRAY: {
1888 289           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1889 289           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1890 289           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1891 289           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_BYTE_ARRAY(env, stack, ");
1892 289           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1893 289           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1894 289           break;
1895             }
1896             case SPVM_OPCODE_C_ID_NEW_SHORT_ARRAY: {
1897 228           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1898 228           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1899 228           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1900 228           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_SHORT_ARRAY(env, stack, ");
1901 228           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1902 228           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1903 228           break;
1904             }
1905             case SPVM_OPCODE_C_ID_NEW_INT_ARRAY: {
1906 331           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1907 331           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1908 331           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1909 331           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_INT_ARRAY(env, stack, ");
1910 331           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1911 331           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1912 331           break;
1913             }
1914             case SPVM_OPCODE_C_ID_NEW_LONG_ARRAY: {
1915 223           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1916 223           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1917 223           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1918 223           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_LONG_ARRAY(env, stack, ");
1919 223           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1920 223           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1921 223           break;
1922             }
1923             case SPVM_OPCODE_C_ID_NEW_FLOAT_ARRAY: {
1924 224           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1925 224           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1926 224           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1927 224           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_FLOAT_ARRAY(env, stack, ");
1928 224           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1929 224           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1930 224           break;
1931             }
1932             case SPVM_OPCODE_C_ID_NEW_DOUBLE_ARRAY: {
1933 232           SPVM_STRING_BUFFER_add(string_buffer, " length = *(int32_t*)&");
1934 232           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1935 232           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1936 232           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_DOUBLE_ARRAY(env, stack, ");
1937 232           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1938 232           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1939 232           break;
1940             }
1941             case SPVM_OPCODE_C_ID_NEW_STRING: {
1942 3168           int32_t constant_string_index = opcode->operand1;
1943            
1944 3168           SPVM_RUNTIME_STRING* constant_string = ¤t_basic_type->constant_strings[constant_string_index];
1945 3168           const char* constant_string_value = constant_string->value;
1946 3168           int32_t constant_string_length = constant_string->length;
1947 3168           SPVM_STRING_BUFFER_add(string_buffer,
1948             " constant_string = \""
1949             );
1950 46763 100         for (int32_t i = 0; i < constant_string_length; i++) {
1951 43595           SPVM_STRING_BUFFER_add_hex_char(string_buffer, constant_string_value[i]);
1952             }
1953 3168           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
1954            
1955 3168           SPVM_STRING_BUFFER_add(string_buffer, " constant_string_length = ");
1956 3168           SPVM_STRING_BUFFER_add_int(string_buffer, constant_string_length);
1957 3168           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1958            
1959 3168           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_STRING(env, stack, ");
1960 3168           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1961 3168           SPVM_STRING_BUFFER_add(string_buffer, ", constant_string, constant_string_length, &error_id);\n");
1962 3168           break;
1963             }
1964             case SPVM_OPCODE_C_ID_NEW_STRING_LEN: {
1965 10           SPVM_STRING_BUFFER_add(string_buffer, " length = ");
1966 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
1967 10           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1968            
1969 10           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_NEW_STRING_LEN(env, stack, ");
1970 10           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1971 10           SPVM_STRING_BUFFER_add(string_buffer, ", length, &error_id);\n");
1972 10           break;
1973             }
1974             case SPVM_OPCODE_C_ID_IS_READ_ONLY: {
1975 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_IS_READ_ONLY(env, stack, ");
1976 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
1977 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
1978 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1979 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1980 6           break;
1981             }
1982             case SPVM_OPCODE_C_ID_MAKE_READ_ONLY: {
1983 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MAKE_READ_ONLY(env, stack, ");
1984 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
1985 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
1986 3           break;
1987             }
1988             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_BYTE: {
1989 549           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
1990 549           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
1991 549           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1992            
1993 549           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
1994 549           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
1995 549           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
1996            
1997 549           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_BYTE(env, stack, ");
1998 549           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
1999 549           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2000 549           break;
2001             }
2002             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_SHORT: {
2003 93           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2004 93           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2005 93           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2006            
2007 93           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2008 93           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2009 93           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2010            
2011 93           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_SHORT(env, stack, ");
2012 93           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
2013 93           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2014 93           break;
2015             }
2016             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_INT: {
2017 212           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2018 212           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2019 212           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2020            
2021 212           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2022 212           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2023 212           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2024            
2025 212           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_INT(env, stack, ");
2026 212           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2027 212           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2028 212           break;
2029             }
2030             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_LONG: {
2031 94           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2032 94           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2033 94           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2034            
2035 94           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2036 94           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2037 94           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2038            
2039 94           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_LONG(env, stack, ");
2040 94           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
2041 94           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2042 94           break;
2043             }
2044             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_FLOAT: {
2045 92           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2046 92           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2047 92           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2048            
2049 92           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2050 92           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2051 92           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2052            
2053 92           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_FLOAT(env, stack, ");
2054 92           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
2055 92           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2056 92           break;
2057             }
2058             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_DOUBLE: {
2059 92           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2060 92           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2061 92           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2062            
2063 92           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2064 92           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2065 92           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2066            
2067 92           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_DOUBLE(env, stack, ");
2068 92           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
2069 92           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2070 92           break;
2071             }
2072             case SPVM_OPCODE_C_ID_GET_ARRAY_ELEMENT_OBJECT: {
2073 514           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2074 514           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2075 514           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2076            
2077 514           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2078 514           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2079 514           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2080            
2081 514           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_ARRAY_ELEMENT_OBJECT(env, stack, ");
2082 514           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2083 514           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, &error_id, object_header_size, object_length_offset);\n");
2084            
2085 514           break;
2086             }
2087             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_BYTE: {
2088 747           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2089 747           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2090 747           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2091            
2092 747           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2093 747           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2094 747           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2095            
2096 747           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_BYTE(env, stack, array, index, ");
2097 747           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand2);
2098 747           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2099 747           break;
2100             }
2101             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_SHORT: {
2102 620           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2103 620           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2104 620           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2105            
2106 620           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2107 620           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2108 620           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2109            
2110 620           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_SHORT(env, stack, array, index, ");
2111 620           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand2);
2112 620           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2113 620           break;
2114             }
2115             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_INT: {
2116 901           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2117 901           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2118 901           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2119            
2120 901           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2121 901           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2122 901           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2123            
2124 901           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_INT(env, stack, array, index, ");
2125 901           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2126 901           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2127 901           break;
2128             }
2129             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_LONG: {
2130 613           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2131 613           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2132 613           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2133            
2134 613           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2135 613           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2136 613           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2137            
2138 613           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_LONG(env, stack, array, index, ");
2139 613           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
2140 613           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2141 613           break;
2142             }
2143             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_FLOAT: {
2144 607           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2145 607           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2146 607           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2147            
2148 607           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2149 607           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2150 607           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2151            
2152 607           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_FLOAT(env, stack, array, index, ");
2153 607           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
2154 607           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2155 607           break;
2156             }
2157             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_DOUBLE: {
2158 634           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2159 634           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2160 634           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2161            
2162 634           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2163 634           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2164 634           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2165            
2166 634           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_DOUBLE(env, stack, array, index, ");
2167 634           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
2168 634           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2169 634           break;
2170             }
2171             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_OBJECT: {
2172 1222           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2173 1222           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2174 1222           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2175            
2176 1222           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2177 1222           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2178 1222           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2179            
2180 1222           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_OBJECT(env, stack, array, index, ");
2181 1222           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
2182 1222           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2183 1222           break;
2184             }
2185             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_OBJECT_CHECK_TYPE: {
2186 378           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2187 378           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2188 378           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2189 378           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2190 378           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2191 378           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2192            
2193 378           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_OBJECT_CHECK_TYPE(env, stack, array, index, ");
2194 378           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
2195 378           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
2196            
2197 378           break;
2198             }
2199             case SPVM_OPCODE_C_ID_SET_ARRAY_ELEMENT_UNDEF: {
2200 20           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2201 20           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2202 20           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2203 20           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
2204 20           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2205 20           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2206 20           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ARRAY_ELEMENT_UNDEF(env, stack, array, index, &error_id, object_header_size, object_length_offset);\n");
2207 20           break;
2208             }
2209             case SPVM_OPCODE_C_ID_ARRAY_LENGTH: {
2210 283           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
2211 283           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2212 283           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2213            
2214 283           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ARRAY_LENGTH(env, stack, ");
2215 283           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2216 283           SPVM_STRING_BUFFER_add(string_buffer, ", array, &error_id, object_length_offset);\n");
2217 283           break;
2218             }
2219             case SPVM_OPCODE_C_ID_GET_FIELD_BYTE:
2220             case SPVM_OPCODE_C_ID_GET_FIELD_SHORT:
2221             case SPVM_OPCODE_C_ID_GET_FIELD_INT:
2222             case SPVM_OPCODE_C_ID_GET_FIELD_LONG:
2223             case SPVM_OPCODE_C_ID_GET_FIELD_FLOAT:
2224             case SPVM_OPCODE_C_ID_GET_FIELD_DOUBLE:
2225             case SPVM_OPCODE_C_ID_GET_FIELD_OBJECT:
2226             {
2227 902           int32_t field_current_basic_type_id = opcode->operand2;
2228 902           int32_t field_index = (uint16_t)opcode->operand3;
2229            
2230 902           SPVM_RUNTIME_BASIC_TYPE* field_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, field_current_basic_type_id);
2231 902           SPVM_RUNTIME_FIELD* field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, field_current_basic_type, field_index);
2232 902           const char* basic_type_name = field_current_basic_type->name;
2233 902           const char* field_name = field->name;
2234            
2235 902           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2236 902           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2237 902           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2238            
2239 902           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2240 902           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2241 902           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2242            
2243 902           SPVM_STRING_BUFFER_add(string_buffer, " field_name = \"");
2244 902           SPVM_STRING_BUFFER_add(string_buffer, (char*)field_name);
2245 902           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2246            
2247 902           SPVM_STRING_BUFFER_add(string_buffer, " decl_field_offset = ");
2248 902           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
2249 902           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2250            
2251 902           switch (opcode_id) {
2252             case SPVM_OPCODE_C_ID_GET_FIELD_BYTE: {
2253 72           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_BYTE(env, stack, ");
2254 72           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
2255 72           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2256 72           break;
2257             }
2258             case SPVM_OPCODE_C_ID_GET_FIELD_SHORT: {
2259 71           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_SHORT(env, stack, ");
2260 71           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
2261 71           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2262 71           break;
2263             }
2264             case SPVM_OPCODE_C_ID_GET_FIELD_INT: {
2265 310           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_INT(env, stack, ");
2266 310           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2267 310           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2268 310           break;
2269             }
2270             case SPVM_OPCODE_C_ID_GET_FIELD_LONG: {
2271 71           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_LONG(env, stack, ");
2272 71           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
2273 71           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2274 71           break;
2275             }
2276             case SPVM_OPCODE_C_ID_GET_FIELD_FLOAT: {
2277 71           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_FLOAT(env, stack, ");
2278 71           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
2279 71           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2280 71           break;
2281             }
2282             case SPVM_OPCODE_C_ID_GET_FIELD_DOUBLE: {
2283 71           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_DOUBLE(env, stack, ");
2284 71           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
2285 71           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2286 71           break;
2287             }
2288             case SPVM_OPCODE_C_ID_GET_FIELD_OBJECT: {
2289 236           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_FIELD_OBJECT(env, stack, ");
2290 236           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2291 236           SPVM_STRING_BUFFER_add(string_buffer, ", object, decl_field_offset, &error_id, object_header_size);\n");
2292 236           break;
2293             }
2294             default: {
2295 0           assert(0);
2296             }
2297             }
2298 902           break;
2299             }
2300             case SPVM_OPCODE_C_ID_SET_FIELD_BYTE:
2301             case SPVM_OPCODE_C_ID_SET_FIELD_SHORT:
2302             case SPVM_OPCODE_C_ID_SET_FIELD_INT:
2303             case SPVM_OPCODE_C_ID_SET_FIELD_LONG:
2304             case SPVM_OPCODE_C_ID_SET_FIELD_FLOAT:
2305             case SPVM_OPCODE_C_ID_SET_FIELD_DOUBLE:
2306             case SPVM_OPCODE_C_ID_SET_FIELD_OBJECT:
2307             case SPVM_OPCODE_C_ID_SET_FIELD_UNDEF:
2308             {
2309 1074           int32_t field_current_basic_type_id = opcode->operand2;
2310 1074           int32_t field_index = (uint16_t)opcode->operand3;
2311            
2312 1074           SPVM_RUNTIME_BASIC_TYPE* field_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, field_current_basic_type_id);
2313 1074           SPVM_RUNTIME_FIELD* field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, field_current_basic_type, field_index);
2314 1074           const char* basic_type_name = field_current_basic_type->name;
2315 1074           const char* field_name = field->name;
2316            
2317 1074           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2318 1074           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2319 1074           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2320            
2321 1074           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2322 1074           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2323 1074           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2324            
2325 1074           SPVM_STRING_BUFFER_add(string_buffer, " field_name = \"");
2326 1074           SPVM_STRING_BUFFER_add(string_buffer, (char*)field_name);
2327 1074           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2328            
2329 1074           SPVM_STRING_BUFFER_add(string_buffer, " decl_field_offset = ");
2330 1074           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
2331 1074           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2332            
2333 1074           switch (opcode_id) {
2334             case SPVM_OPCODE_C_ID_SET_FIELD_BYTE: {
2335 99           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_BYTE(env, stack, object, decl_field_offset, ");
2336 99           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
2337 99           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2338 99           break;
2339             }
2340             case SPVM_OPCODE_C_ID_SET_FIELD_SHORT: {
2341 99           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_SHORT(env, stack, object, decl_field_offset, ");
2342 99           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
2343 99           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2344 99           break;
2345             }
2346             case SPVM_OPCODE_C_ID_SET_FIELD_INT: {
2347 324           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_INT(env, stack, object, decl_field_offset, ");
2348 324           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2349 324           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2350 324           break;
2351             }
2352             case SPVM_OPCODE_C_ID_SET_FIELD_LONG: {
2353 99           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_LONG(env, stack, object, decl_field_offset, ");
2354 99           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
2355 99           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2356 99           break;
2357             }
2358             case SPVM_OPCODE_C_ID_SET_FIELD_FLOAT: {
2359 99           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_FLOAT(env, stack, object, decl_field_offset, ");
2360 99           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
2361 99           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2362 99           break;
2363             }
2364             case SPVM_OPCODE_C_ID_SET_FIELD_DOUBLE: {
2365 99           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_DOUBLE(env, stack, object, decl_field_offset, ");
2366 99           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
2367 99           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2368 99           break;
2369             }
2370             case SPVM_OPCODE_C_ID_SET_FIELD_OBJECT: {
2371 249           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_OBJECT(env, stack, object, decl_field_offset, ");
2372 249           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2373 249           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size);\n");
2374 249           break;
2375             }
2376             case SPVM_OPCODE_C_ID_SET_FIELD_UNDEF: {
2377 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_FIELD_UNDEF(env, stack, object, decl_field_offset, &error_id, object_header_size);\n");
2378 6           break;
2379             }
2380             default: {
2381 0           assert(0);
2382             }
2383             }
2384 1074           break;
2385             }
2386             case SPVM_OPCODE_C_ID_WEAKEN_FIELD: {
2387 19           int32_t field_current_basic_type_id = opcode->operand2;
2388 19           int32_t field_index = (uint16_t)opcode->operand3;
2389            
2390 19           SPVM_RUNTIME_BASIC_TYPE* field_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, field_current_basic_type_id);
2391 19           SPVM_RUNTIME_FIELD* field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, field_current_basic_type, field_index);
2392 19           const char* basic_type_name = field_current_basic_type->name;
2393 19           const char* field_name = field->name;
2394            
2395 19           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2396 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2397 19           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2398            
2399 19           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2400 19           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2401 19           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2402            
2403 19           SPVM_STRING_BUFFER_add(string_buffer, " field_name = \"");
2404 19           SPVM_STRING_BUFFER_add(string_buffer, (char*)field_name);
2405 19           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2406            
2407 19           SPVM_STRING_BUFFER_add(string_buffer, " decl_field_offset = ");
2408 19           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
2409 19           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2410            
2411 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_WEAKEN_FIELD(env, stack, object, decl_field_offset, &error_id, object_header_size);\n");
2412            
2413 19           break;
2414             }
2415             case SPVM_OPCODE_C_ID_UNWEAKEN_FIELD: {
2416 1           int32_t field_current_basic_type_id = opcode->operand2;
2417 1           int32_t field_index = (uint16_t)opcode->operand3;
2418            
2419 1           SPVM_RUNTIME_BASIC_TYPE* field_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, field_current_basic_type_id);
2420 1           SPVM_RUNTIME_FIELD* field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, field_current_basic_type, field_index);
2421 1           const char* basic_type_name = field_current_basic_type->name;
2422 1           const char* field_name = field->name;
2423            
2424 1           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2425 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2426 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2427            
2428 1           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2429 1           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2430 1           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2431            
2432 1           SPVM_STRING_BUFFER_add(string_buffer, " field_name = \"");
2433 1           SPVM_STRING_BUFFER_add(string_buffer, (char*)field_name);
2434 1           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2435            
2436 1           SPVM_STRING_BUFFER_add(string_buffer, " decl_field_offset = ");
2437 1           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
2438 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2439            
2440 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_UNWEAKEN_FIELD(env, stack, object, decl_field_offset, &error_id, object_header_size);\n");
2441            
2442 1           break;
2443             }
2444             case SPVM_OPCODE_C_ID_ISWEAK_FIELD: {
2445 3           int32_t field_current_basic_type_id = opcode->operand2;
2446 3           int32_t field_index = (uint16_t)opcode->operand3;
2447            
2448 3           SPVM_RUNTIME_BASIC_TYPE* field_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, field_current_basic_type_id);
2449 3           SPVM_RUNTIME_FIELD* field = SPVM_API_BASIC_TYPE_get_field_by_index(runtime, field_current_basic_type, field_index);
2450 3           const char* basic_type_name = field_current_basic_type->name;
2451 3           const char* field_name = field->name;
2452            
2453 3           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2454 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2455 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2456            
2457 3           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2458 3           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2459 3           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2460            
2461 3           SPVM_STRING_BUFFER_add(string_buffer, " field_name = \"");
2462 3           SPVM_STRING_BUFFER_add(string_buffer, (char*)field_name);
2463 3           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2464            
2465 3           SPVM_STRING_BUFFER_add(string_buffer, " decl_field_offset = ");
2466 3           SPVM_PRECOMPILE_add_field_offset(precompile, string_buffer, basic_type_name, field_name);
2467 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2468            
2469 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ISWEAK_FIELD(env, stack, &int_vars[0], object, decl_field_offset, &error_id, object_header_size);\n");
2470            
2471 3           break;
2472             }
2473             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_BYTE:
2474             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_SHORT:
2475             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_INT:
2476             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_LONG:
2477             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_FLOAT:
2478             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_DOUBLE:
2479             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_OBJECT:
2480             {
2481 445           int32_t class_var_current_basic_type_id = opcode->operand1;
2482 445           int32_t class_var_index = opcode->operand2;
2483            
2484 445           SPVM_RUNTIME_BASIC_TYPE* class_var_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, class_var_current_basic_type_id);
2485 445           SPVM_RUNTIME_CLASS_VAR* class_var = SPVM_API_BASIC_TYPE_get_class_var_by_index(runtime, class_var_current_basic_type, class_var_index);
2486 445           const char* basic_type_name = class_var_current_basic_type->name;
2487 445           const char* class_var_name = class_var->name;
2488            
2489 445           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2490 445           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2491 445           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2492            
2493 445           SPVM_STRING_BUFFER_add(string_buffer, " class_var_name = \"");
2494 445           SPVM_STRING_BUFFER_add(string_buffer, (char*)class_var_name);
2495 445           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2496            
2497 445           SPVM_STRING_BUFFER_add(string_buffer, " decl_class_var = ");
2498 445           SPVM_PRECOMPILE_add_class_var(precompile, string_buffer, basic_type_name, class_var_name);
2499 445           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2500            
2501 445           switch (opcode_id) {
2502             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_BYTE: {
2503 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_BYTE(env, stack, ");
2504 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
2505 34           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2506 34           break;
2507             }
2508             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_SHORT: {
2509 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_SHORT(env, stack, ");
2510 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
2511 34           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2512 34           break;
2513             }
2514             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_INT: {
2515 179           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_INT(env, stack, ");
2516 179           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2517 179           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2518 179           break;
2519             }
2520             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_LONG: {
2521 52           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_LONG(env, stack, ");
2522 52           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
2523 52           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2524 52           break;
2525             }
2526             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_FLOAT: {
2527 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_FLOAT(env, stack, ");
2528 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
2529 34           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2530 34           break;
2531             }
2532             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_DOUBLE: {
2533 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_DOUBLE(env, stack, ");
2534 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
2535 34           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2536 34           break;
2537             }
2538             case SPVM_OPCODE_C_ID_GET_CLASS_VAR_OBJECT: {
2539 78           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_CLASS_VAR_OBJECT(env, stack, &");
2540 78           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2541 78           SPVM_STRING_BUFFER_add(string_buffer, ", decl_class_var);\n");
2542 78           break;
2543             }
2544             default: {
2545 0           assert(0);
2546             }
2547             }
2548            
2549 445           break;
2550             }
2551             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_BYTE:
2552             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_SHORT:
2553             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_INT:
2554             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_LONG:
2555             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_FLOAT:
2556             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_DOUBLE:
2557             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_OBJECT:
2558             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_UNDEF:
2559             {
2560 427           int32_t class_var_current_basic_type_id = opcode->operand0;
2561 427           int32_t class_var_index = opcode->operand1;
2562            
2563 427           SPVM_RUNTIME_BASIC_TYPE* class_var_current_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, class_var_current_basic_type_id);
2564 427           SPVM_RUNTIME_CLASS_VAR* class_var = SPVM_API_BASIC_TYPE_get_class_var_by_index(runtime, class_var_current_basic_type, class_var_index);
2565 427           const char* basic_type_name = class_var_current_basic_type->name;
2566 427           const char* class_var_name = class_var->name;
2567            
2568 427           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2569 427           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2570 427           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2571            
2572 427           SPVM_STRING_BUFFER_add(string_buffer, " class_var_name = \"");
2573 427           SPVM_STRING_BUFFER_add(string_buffer, (char*)class_var_name);
2574 427           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2575            
2576 427           SPVM_STRING_BUFFER_add(string_buffer, " decl_class_var = ");
2577 427           SPVM_PRECOMPILE_add_class_var(precompile, string_buffer, basic_type_name, class_var_name);
2578 427           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2579            
2580 427           switch (opcode_id) {
2581             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_BYTE: {
2582 36           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_BYTE(env, stack, decl_class_var, ");
2583 36           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand2);
2584 36           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2585 36           break;
2586             }
2587             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_SHORT: {
2588 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_SHORT(env, stack, decl_class_var, ");
2589 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand2);
2590 34           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2591 34           break;
2592             }
2593             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_INT: {
2594 113           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_INT(env, stack, decl_class_var, ");
2595 113           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
2596 113           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2597 113           break;
2598             }
2599             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_LONG: {
2600 51           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_LONG(env, stack, decl_class_var, ");
2601 51           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
2602 51           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2603 51           break;
2604             }
2605             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_FLOAT: {
2606 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_FLOAT(env, stack, decl_class_var, ");
2607 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
2608 34           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2609 34           break;
2610             }
2611             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_DOUBLE: {
2612 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_DOUBLE(env, stack, decl_class_var, ");
2613 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
2614 34           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2615 34           break;
2616             }
2617             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_OBJECT: {
2618 41           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_OBJECT(env, stack, decl_class_var, ");
2619 41           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand2);
2620 41           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2621 41           break;
2622             }
2623             case SPVM_OPCODE_C_ID_SET_CLASS_VAR_UNDEF: {
2624 84           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_CLASS_VAR_UNDEF(env, stack, decl_class_var);\n");
2625 84           break;
2626             }
2627             default: {
2628 0           assert(0);
2629             }
2630             }
2631            
2632 427           break;
2633             }
2634             case SPVM_OPCODE_C_ID_GET_EXCEPTION_VAR: {
2635 1444           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_EXCEPTION_VAR(env, stack, ");
2636 1444           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2637 1444           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2638 1444           break;
2639             }
2640             case SPVM_OPCODE_C_ID_SET_EXCEPTION_VAR: {
2641 213           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_EXCEPTION_VAR(env, stack, ");
2642 213           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2643 213           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2644 213           break;
2645             }
2646             case SPVM_OPCODE_C_ID_SET_EXCEPTION_VAR_UNDEF: {
2647 2246           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_EXCEPTION_VAR_UNDEF(env, stack);\n");
2648 2246           break;
2649             }
2650             case SPVM_OPCODE_C_ID_ISA:
2651             {
2652 259           int32_t basic_type_id = opcode->operand2;
2653 259           int32_t type_dimension = opcode->operand3;
2654 259           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2655 259           const char* basic_type_name = basic_type->name;
2656            
2657 259           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2658 259           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2659 259           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2660            
2661 259           SPVM_STRING_BUFFER_add(string_buffer, " type_dimension = ");
2662 259           SPVM_STRING_BUFFER_add_int(string_buffer, type_dimension);
2663 259           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2664            
2665 259           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2666 259           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2667 259           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2668            
2669 259           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ISA(env, stack, ");
2670 259           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
2671 259           SPVM_STRING_BUFFER_add(string_buffer, ", object, basic_type, type_dimension);\n");
2672            
2673 259           break;
2674             }
2675             case SPVM_OPCODE_C_ID_ISA_ERROR:
2676             {
2677 7           int32_t basic_type_id = opcode->operand2;
2678 7           int32_t type_dimension = opcode->operand3;
2679 7           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2680 7           const char* basic_type_name = basic_type->name;
2681            
2682 7           SPVM_STRING_BUFFER_add(string_buffer, " src_basic_type_id = ");
2683 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2684 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2685            
2686 7           SPVM_STRING_BUFFER_add(string_buffer, " src_basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, src_basic_type_id);");
2687            
2688 7           SPVM_STRING_BUFFER_add(string_buffer, " type_dimension = ");
2689 7           SPVM_STRING_BUFFER_add_int(string_buffer, type_dimension);
2690 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2691            
2692 7           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2693 7           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2694 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2695            
2696 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ISA_ERROR(env, stack, ");
2697 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
2698 7           SPVM_STRING_BUFFER_add(string_buffer, ", src_basic_type, basic_type, type_dimension);\n");
2699            
2700 7           break;
2701             }
2702             case SPVM_OPCODE_C_ID_IS_TYPE:
2703             {
2704 43           int32_t basic_type_id = opcode->operand2;
2705 43           int32_t type_dimension = opcode->operand3;
2706 43           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2707 43           const char* basic_type_name = basic_type->name;
2708            
2709 43           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2710 43           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2711 43           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2712            
2713 43           SPVM_STRING_BUFFER_add(string_buffer, " type_dimension = ");
2714 43           SPVM_STRING_BUFFER_add_int(string_buffer, type_dimension);
2715 43           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2716            
2717 43           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2718 43           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2719 43           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2720            
2721 43           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_IS_TYPE(env, stack, ");
2722 43           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
2723 43           SPVM_STRING_BUFFER_add(string_buffer, ", object, basic_type, type_dimension);\n");
2724            
2725 43           break;
2726             }
2727             case SPVM_OPCODE_C_ID_IS_ERROR:
2728             {
2729 6           int32_t basic_type_id = opcode->operand2;
2730 6           int32_t type_dimension = opcode->operand3;
2731 6           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2732 6           const char* basic_type_name = basic_type->name;
2733            
2734 6           SPVM_STRING_BUFFER_add(string_buffer, " src_basic_type_id = ");
2735 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2736 6           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2737            
2738 6           SPVM_STRING_BUFFER_add(string_buffer, " type_dimension = ");
2739 6           SPVM_STRING_BUFFER_add_int(string_buffer, type_dimension);
2740 6           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2741            
2742 6           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2743 6           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2744 6           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2745            
2746 6           SPVM_STRING_BUFFER_add(string_buffer, " src_basic_type = env->api->runtime->get_basic_type_by_id(env->runtime, src_basic_type_id);\n");
2747            
2748 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_IS_ERROR(env, stack, ");
2749 6           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
2750 6           SPVM_STRING_BUFFER_add(string_buffer, ", src_basic_type, basic_type, type_dimension);\n");
2751            
2752 6           break;
2753             }
2754             case SPVM_OPCODE_C_ID_CAN: {
2755 5           int32_t decl_basic_type_id = opcode->operand1;
2756 5           int32_t decl_method_index = opcode->operand2;
2757            
2758 5           SPVM_RUNTIME_BASIC_TYPE* decl_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, decl_basic_type_id);
2759 5           SPVM_RUNTIME_METHOD* method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, decl_basic_type, decl_method_index);
2760 5           SPVM_RUNTIME_BASIC_TYPE* method_current_basic_type = method->current_basic_type;
2761 5           const char* method_name = method->name;
2762            
2763 5           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2764 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2765 5           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2766            
2767 5           SPVM_STRING_BUFFER_add(string_buffer, " method_name = \"");
2768 5           SPVM_STRING_BUFFER_add(string_buffer, (char*)method_name);
2769 5           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2770            
2771 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CAN(env, stack, ");
2772 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, 0);
2773 5           SPVM_STRING_BUFFER_add(string_buffer, ", object, method_name);\n");
2774            
2775 5           break;
2776             }
2777             case SPVM_OPCODE_C_ID_PRINT: {
2778 33           SPVM_STRING_BUFFER_add(string_buffer, " string = ");
2779 33           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2780 33           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2781            
2782 33           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_PRINT(env, stack, string);\n");
2783 33           break;
2784             }
2785             case SPVM_OPCODE_C_ID_SAY: {
2786 30           SPVM_STRING_BUFFER_add(string_buffer, " string = ");
2787 30           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2788 30           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2789            
2790 30           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SAY(env, stack, string);\n");
2791 30           break;
2792             }
2793             case SPVM_OPCODE_C_ID_WARN: {
2794 93           int32_t line = opcode->operand1;
2795            
2796 93           const char* class_dir = current_basic_type->class_dir;
2797 93           const char* class_rel_file = current_basic_type->class_rel_file;
2798            
2799 93           SPVM_STRING_BUFFER_add(string_buffer, " string = ");
2800 93           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2801 93           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2802            
2803 93           SPVM_STRING_BUFFER_add(string_buffer, " class_dir = \"");
2804 93           SPVM_STRING_BUFFER_add(string_buffer, class_dir);
2805 93           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2806            
2807 93           SPVM_STRING_BUFFER_add(string_buffer, " class_rel_file = \"");
2808 93           SPVM_STRING_BUFFER_add(string_buffer, class_rel_file);
2809 93           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2810            
2811 93           SPVM_STRING_BUFFER_add(string_buffer, " line = ");
2812 93           SPVM_STRING_BUFFER_add_int(string_buffer, line);
2813 93           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2814            
2815 93           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_WARN(env, stack, string, class_dir, class_rel_file, line);\n");
2816 93           break;
2817             }
2818             case SPVM_OPCODE_C_ID_CLEAR_EVAL_ERROR_ID: {
2819 1450           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CLEAR_EVAL_ERROR_ID(eval_error_id);\n");
2820 1450           break;
2821             }
2822             case SPVM_OPCODE_C_ID_GET_EVAL_ERROR_ID: {
2823 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_EVAL_ERROR_ID(");
2824 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2825 5           SPVM_STRING_BUFFER_add(string_buffer, ", eval_error_id);\n");
2826            
2827 5           break;
2828             }
2829             case SPVM_OPCODE_C_ID_SET_ERROR_ID: {
2830 186           int32_t basic_type_id = opcode->operand0;
2831 186           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2832 186           const char* basic_type_name = basic_type->name;
2833            
2834 186           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2835 186           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2836 186           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2837            
2838 186           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2839 186           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2840 186           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2841            
2842 186           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_ERROR_ID(error_id, basic_type);\n");
2843 186           break;
2844             }
2845             case SPVM_OPCODE_C_ID_ARGS_WIDTH: {
2846 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_ARGS_WIDTH(env, stack, ");
2847 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2848 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2849 5           break;
2850             }
2851             case SPVM_OPCODE_C_ID_GET_BASIC_TYPE_ID: {
2852 31           int32_t basic_type_id = opcode->operand1;
2853 31           SPVM_RUNTIME_BASIC_TYPE* basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, basic_type_id);
2854 31           const char* basic_type_name = basic_type->name;
2855            
2856 31           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
2857 31           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
2858 31           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
2859            
2860 31           SPVM_STRING_BUFFER_add(string_buffer, " basic_type = ");
2861 31           SPVM_PRECOMPILE_add_basic_type(precompile, string_buffer, basic_type_name);
2862 31           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2863            
2864 31           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_BASIC_TYPE_ID(env, stack, ");
2865 31           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2866 31           SPVM_STRING_BUFFER_add(string_buffer, ", basic_type);\n");
2867            
2868 31           break;
2869             }
2870             case SPVM_OPCODE_C_ID_TYPE_NAME: {
2871            
2872 9           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2873 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2874 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2875            
2876 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_NAME(env, stack, ");
2877 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2878 9           SPVM_STRING_BUFFER_add(string_buffer, " , object);\n");
2879 9           break;
2880             }
2881             case SPVM_OPCODE_C_ID_DUMP: {
2882 19           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2883 19           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2884 19           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2885            
2886 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DUMP(env, stack, ");
2887 19           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2888 19           SPVM_STRING_BUFFER_add(string_buffer, ", object);\n");
2889 19           break;
2890             }
2891             case SPVM_OPCODE_C_ID_COPY: {
2892 31           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
2893 31           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
2894 31           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
2895            
2896 31           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_COPY(env, stack, ");
2897 31           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
2898 31           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id);\n");
2899 31           break;
2900             }
2901             case SPVM_OPCODE_C_ID_REF_BYTE: {
2902 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_BYTE(*(void**)");
2903 34           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2904 34           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2905 34           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
2906 34           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2907 34           break;
2908             }
2909             case SPVM_OPCODE_C_ID_REF_SHORT: {
2910 32           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_SHORT(*(void**)");
2911 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2912 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2913 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
2914 32           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2915 32           break;
2916             }
2917             case SPVM_OPCODE_C_ID_REF_INT: {
2918 72           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_INT(*(void**)");
2919 72           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2920 72           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2921 72           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
2922 72           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2923 72           break;
2924             }
2925             case SPVM_OPCODE_C_ID_REF_LONG: {
2926 32           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_LONG(*(void**)");
2927 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2928 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2929 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
2930 32           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2931 32           break;
2932             }
2933             case SPVM_OPCODE_C_ID_REF_FLOAT: {
2934 32           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_FLOAT(*(void**)");
2935 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2936 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2937 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
2938 32           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2939 32           break;
2940             }
2941             case SPVM_OPCODE_C_ID_REF_DOUBLE: {
2942 33           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_REF_DOUBLE(*(void**)");
2943 33           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
2944 33           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2945 33           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
2946 33           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2947 33           break;
2948             }
2949             case SPVM_OPCODE_C_ID_GET_DEREF_BYTE: {
2950 36           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_BYTE(");
2951 36           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
2952 36           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2953 36           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2954 36           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2955 36           break;
2956             }
2957             case SPVM_OPCODE_C_ID_GET_DEREF_SHORT: {
2958 35           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_SHORT(");
2959 35           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
2960 35           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2961 35           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2962 35           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2963 35           break;
2964             }
2965             case SPVM_OPCODE_C_ID_GET_DEREF_INT: {
2966 49           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_INT(");
2967 49           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
2968 49           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2969 49           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2970 49           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2971 49           break;
2972             }
2973             case SPVM_OPCODE_C_ID_GET_DEREF_LONG: {
2974 35           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_LONG(");
2975 35           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
2976 35           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2977 35           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2978 35           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2979 35           break;
2980             }
2981             case SPVM_OPCODE_C_ID_GET_DEREF_FLOAT: {
2982 35           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_FLOAT(");
2983 35           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
2984 35           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2985 35           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2986 35           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2987 35           break;
2988             }
2989             case SPVM_OPCODE_C_ID_GET_DEREF_DOUBLE: {
2990 36           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_DEREF_DOUBLE(");
2991 36           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
2992 36           SPVM_STRING_BUFFER_add(string_buffer, ", ");
2993 36           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
2994 36           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
2995 36           break;
2996             }
2997             case SPVM_OPCODE_C_ID_SET_DEREF_BYTE: {
2998 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_BYTE(");
2999 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3000 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3001 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3002 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3003 9           break;
3004             }
3005             case SPVM_OPCODE_C_ID_SET_DEREF_SHORT: {
3006 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_SHORT(");
3007 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3008 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3009 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
3010 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3011 9           break;
3012             }
3013             case SPVM_OPCODE_C_ID_SET_DEREF_INT: {
3014 15           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_INT(");
3015 15           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3016 15           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3017 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3018 15           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3019 15           break;
3020             }
3021             case SPVM_OPCODE_C_ID_SET_DEREF_LONG: {
3022 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_LONG(");
3023 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3024 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3025 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
3026 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3027 9           break;
3028             }
3029             case SPVM_OPCODE_C_ID_SET_DEREF_FLOAT: {
3030 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_FLOAT(");
3031 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3032 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3033 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
3034 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3035 9           break;
3036             }
3037             case SPVM_OPCODE_C_ID_SET_DEREF_DOUBLE: {
3038 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_DEREF_DOUBLE(");
3039 9           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3040 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3041 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
3042 9           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3043 9           break;
3044             }
3045             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_BYTE: {
3046 89           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3047 89           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3048 89           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3049            
3050 89           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_BYTE(");
3051 89           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3052 89           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3053 89           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3054 89           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3055 89           break;
3056             }
3057             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_SHORT: {
3058 85           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3059 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3060 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3061            
3062 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_SHORT(");
3063 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3064 85           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3065 85           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
3066 85           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3067 85           break;
3068             }
3069             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_INT: {
3070 85           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3071 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3072 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3073            
3074 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_INT(");
3075 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3076 85           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3077 85           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3078 85           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3079 85           break;
3080             }
3081             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_LONG: {
3082 85           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3083 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3084 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3085            
3086 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_LONG(");
3087 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3088 85           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3089 85           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
3090 85           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3091 85           break;
3092             }
3093             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_FLOAT: {
3094 85           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3095 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3096 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3097            
3098 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_FLOAT(");
3099 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3100 85           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3101 85           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
3102 85           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3103 85           break;
3104             }
3105             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DOUBLE: {
3106 92           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3107 92           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3108 92           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3109            
3110 92           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DOUBLE(");
3111 92           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3112 92           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3113 92           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
3114 92           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3115 92           break;
3116             }
3117             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_BYTE: {
3118 79           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3119 79           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3120 79           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3121            
3122 79           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_BYTE(");
3123 79           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3124 79           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3125 79           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3126 79           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3127 79           break;
3128             }
3129             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_SHORT: {
3130 77           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3131 77           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3132 77           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3133            
3134 77           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_SHORT(");
3135 77           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3136 77           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3137 77           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
3138 77           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3139 77           break;
3140             }
3141             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_INT: {
3142 77           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3143 77           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3144 77           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3145            
3146 77           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_INT(");
3147 77           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3148 77           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3149 77           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3150 77           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3151 77           break;
3152             }
3153             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_LONG: {
3154 77           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3155 77           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3156 77           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3157            
3158 77           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_LONG(");
3159 77           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3160 77           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3161 77           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
3162 77           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3163 77           break;
3164             }
3165             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_FLOAT: {
3166 74           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3167 74           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3168 74           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3169            
3170 74           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_FLOAT(");
3171 74           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3172 74           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3173 74           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
3174 74           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3175 74           break;
3176             }
3177             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DOUBLE: {
3178 79           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3179 79           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3180 79           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3181            
3182 79           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DOUBLE(");
3183 79           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3184 79           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3185 79           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
3186 79           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3187 79           break;
3188             }
3189             case SPVM_OPCODE_C_ID_MOVE_MULNUM_BYTE: {
3190 0           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3191 0           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3192 0           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3193            
3194 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_BYTE(env, stack, ");
3195 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3196 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3197 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3198 0           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3199 0           break;
3200             }
3201             case SPVM_OPCODE_C_ID_MOVE_MULNUM_SHORT: {
3202 0           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3203 0           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3204 0           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3205            
3206 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_SHORT(env, stack, ");
3207 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3208 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3209 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
3210 0           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3211 0           break;
3212             }
3213             case SPVM_OPCODE_C_ID_MOVE_MULNUM_INT: {
3214 0           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3215 0           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3216 0           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3217            
3218 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_INT(env, stack, ");
3219 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3220 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3221 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3222 0           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3223 0           break;
3224             }
3225             case SPVM_OPCODE_C_ID_MOVE_MULNUM_LONG: {
3226 0           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3227 0           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3228 0           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3229            
3230 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_LONG(env, stack, ");
3231 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3232 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3233 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
3234 0           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3235 0           break;
3236             }
3237             case SPVM_OPCODE_C_ID_MOVE_MULNUM_FLOAT: {
3238 0           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3239 0           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3240 0           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3241            
3242 0           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_FLOAT(env, stack, ");
3243 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3244 0           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3245 0           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
3246 0           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3247 0           break;
3248             }
3249             case SPVM_OPCODE_C_ID_MOVE_MULNUM_DOUBLE: {
3250 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3251 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3252 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3253            
3254 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_MOVE_MULNUM_DOUBLE(env, stack, ");
3255 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3256 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3257 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
3258 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3259 3           break;
3260             }
3261             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_BYTE: {
3262 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3263 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3264 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3265              
3266 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3267 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3268 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3269              
3270 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3271 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3272 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3273            
3274 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_BYTE(env, stack, ");
3275 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3276 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3277            
3278 1           break;
3279             }
3280             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_SHORT: {
3281 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3282 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3283 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3284              
3285 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3286 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3287 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3288              
3289 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3290 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3291 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3292            
3293 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_SHORT(env, stack, ");
3294 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3295 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3296 1           break;
3297             }
3298             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_INT: {
3299 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3300 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3301 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3302              
3303 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3304 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3305 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3306              
3307 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3308 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3309 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3310            
3311 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_INT(env, stack, ");
3312 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3313 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3314 1           break;
3315             }
3316             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_LONG: {
3317 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3318 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3319 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3320              
3321 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3322 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3323 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3324              
3325 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3326 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3327 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3328            
3329 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_LONG(env, stack, ");
3330 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3331 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3332 1           break;
3333             }
3334             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FLOAT: {
3335 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3336 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3337 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3338              
3339 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3340 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3341 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3342              
3343 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3344 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3345 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3346            
3347 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FLOAT(env, stack, ");
3348 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3349 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3350 1           break;
3351             }
3352             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_DOUBLE: {
3353 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3354 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3355 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3356              
3357 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3358 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3359 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3360              
3361 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3362 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3363 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3364            
3365 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_DOUBLE(env, stack, ");
3366 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3367 1           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3368 1           break;
3369             }
3370             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_BYTE: {
3371 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3372 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3373 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3374              
3375 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3376 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3377 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3378              
3379 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3380 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3381 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3382            
3383 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_BYTE(env, stack, array, index, fields_length, ");
3384 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand2);
3385 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3386 1           break;
3387             }
3388             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_SHORT: {
3389 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3390 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3391 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3392              
3393 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3394 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3395 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3396              
3397 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3398 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3399 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3400            
3401 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_SHORT(env, stack, array, index, fields_length, ");
3402 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand2);
3403 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3404 1           break;
3405             }
3406             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_INT: {
3407 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3408 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3409 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3410              
3411 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3412 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3413 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3414              
3415 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3416 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3417 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3418            
3419 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_INT(env, stack, array, index, fields_length, ");
3420 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3421 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3422 1           break;
3423             }
3424             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_LONG: {
3425 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3426 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3427 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3428              
3429 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3430 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3431 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3432              
3433 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3434 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3435 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3436            
3437 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_LONG(env, stack, array, index, fields_length, ");
3438 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
3439 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3440 1           break;
3441             }
3442             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FLOAT: {
3443 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3444 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3445 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3446              
3447 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3448 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3449 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3450              
3451 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3452 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3453 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3454            
3455 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FLOAT(env, stack, array, index, fields_length, ");
3456 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
3457 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3458 1           break;
3459             }
3460             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_DOUBLE: {
3461 1           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3462 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3463 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3464              
3465 1           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3466 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3467 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3468              
3469 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3470 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3471 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3472            
3473 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_DOUBLE(env, stack, array, index, fields_length, ");
3474 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
3475 1           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);\n");
3476 1           break;
3477             }
3478             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_BYTE: {
3479 103           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3480 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3481 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3482              
3483 103           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3484 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3485 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3486              
3487 103           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3488 103           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3489 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3490              
3491 103           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3492 103           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3493 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3494            
3495 103           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_BYTE(env, stack, ");
3496 103           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3497 103           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3498 103           break;
3499             }
3500             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_SHORT: {
3501 103           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3502 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3503 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3504              
3505 103           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3506 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3507 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3508              
3509 103           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3510 103           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3511 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3512              
3513 103           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3514 103           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3515 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3516            
3517 103           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_SHORT(env, stack, ");
3518 103           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3519 103           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3520 103           break;
3521             }
3522             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_INT: {
3523 119           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3524 119           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3525 119           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3526              
3527 119           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3528 119           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3529 119           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3530              
3531 119           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3532 119           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3533 119           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3534              
3535 119           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3536 119           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3537 119           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3538            
3539 119           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_INT(env, stack, ");
3540 119           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3541 119           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3542 119           break;
3543             }
3544             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_LONG: {
3545 103           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3546 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3547 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3548              
3549 103           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3550 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3551 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3552              
3553 103           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3554 103           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3555 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3556              
3557 103           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3558 103           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3559 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3560            
3561 103           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_LONG(env, stack, ");
3562 103           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3563 103           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3564 103           break;
3565             }
3566             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_FLOAT: {
3567 103           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3568 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3569 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3570              
3571 103           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3572 103           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3573 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3574              
3575 103           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3576 103           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3577 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3578              
3579 103           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3580 103           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3581 103           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3582            
3583 103           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_FLOAT(env, stack, ");
3584 103           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3585 103           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3586 103           break;
3587             }
3588             case SPVM_OPCODE_C_ID_GET_MULNUM_ARRAY_FIELD_DOUBLE: {
3589 120           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3590 120           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
3591 120           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3592              
3593 120           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3594 120           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3595 120           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3596              
3597 120           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3598 120           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3599 120           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3600              
3601 120           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3602 120           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3603 120           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3604            
3605 120           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_ARRAY_FIELD_DOUBLE(env, stack, ");
3606 120           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3607 120           SPVM_STRING_BUFFER_add(string_buffer, ", array, index, field_index, fields_length, &error_id, object_header_size, object_length_offset);\n");
3608 120           break;
3609             }
3610             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_BYTE: {
3611 73           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3612 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3613 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3614              
3615 73           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3616 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3617 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3618              
3619 73           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3620 73           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3621 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3622              
3623 73           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3624 73           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3625 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3626            
3627 73           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_BYTE(env, stack, array, index, field_index, fields_length, ");
3628 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand2);
3629 73           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3630 73           break;
3631             }
3632             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_SHORT: {
3633 73           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3634 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3635 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3636              
3637 73           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3638 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3639 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3640              
3641 73           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3642 73           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3643 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3644              
3645 73           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3646 73           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3647 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3648            
3649 73           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_SHORT(env, stack, array, index, field_index, fields_length, ");
3650 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand2);
3651 73           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3652 73           break;
3653             }
3654             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_INT: {
3655 82           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3656 82           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3657 82           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3658              
3659 82           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3660 82           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3661 82           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3662              
3663 82           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3664 82           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3665 82           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3666              
3667 82           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3668 82           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3669 82           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3670            
3671 82           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_INT(env, stack, array, index, field_index, fields_length, ");
3672 82           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand2);
3673 82           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3674 82           break;
3675             }
3676             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_LONG: {
3677 73           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3678 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3679 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3680              
3681 73           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3682 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3683 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3684              
3685 73           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3686 73           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3687 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3688              
3689 73           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3690 73           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3691 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3692            
3693 73           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_LONG(env, stack, array, index, field_index, fields_length, ");
3694 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand2);
3695 73           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3696 73           break;
3697             }
3698             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_FLOAT: {
3699 73           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3700 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3701 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3702              
3703 73           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3704 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3705 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3706              
3707 73           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3708 73           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3709 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3710              
3711 73           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3712 73           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3713 73           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3714            
3715 73           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_FLOAT(env, stack, array, index, field_index, fields_length, ");
3716 73           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand2);
3717 73           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3718 73           break;
3719             }
3720             case SPVM_OPCODE_C_ID_SET_MULNUM_ARRAY_FIELD_DOUBLE: {
3721 85           SPVM_STRING_BUFFER_add(string_buffer, " array = ");
3722 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
3723 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3724              
3725 85           SPVM_STRING_BUFFER_add(string_buffer, " index = ");
3726 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3727 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3728              
3729 85           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3730 85           SPVM_STRING_BUFFER_add_int(string_buffer, (opcode->operand3 & 0xFF) + 1);
3731 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3732              
3733 85           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3734 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
3735 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3736            
3737 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_ARRAY_FIELD_DOUBLE(env, stack, array, index, field_index, fields_length, ");
3738 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand2);
3739 85           SPVM_STRING_BUFFER_add(string_buffer, ", &error_id, object_header_size, object_length_offset);");
3740 85           break;
3741             }
3742             case SPVM_OPCODE_C_ID_DEREF_MULNUM_BYTE: {
3743 2           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3744 2           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3745 2           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3746            
3747 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_BYTE(env, stack, ");
3748 2           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3749 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3750 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3751 2           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3752 2           break;
3753             }
3754             case SPVM_OPCODE_C_ID_DEREF_MULNUM_SHORT: {
3755 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3756 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3757 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3758            
3759 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_SHORT(env, stack, ");
3760 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3761 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3762 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3763 1           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3764 1           break;
3765             }
3766             case SPVM_OPCODE_C_ID_DEREF_MULNUM_INT: {
3767 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3768 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3769 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3770            
3771 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_INT(env, stack, ");
3772 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3773 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3774 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3775 1           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3776 1           break;
3777             }
3778             case SPVM_OPCODE_C_ID_DEREF_MULNUM_LONG: {
3779 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3780 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3781 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3782            
3783 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_LONG(env, stack, ");
3784 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3785 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3786 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3787 1           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3788 1           break;
3789             }
3790             case SPVM_OPCODE_C_ID_DEREF_MULNUM_FLOAT: {
3791 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3792 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3793 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3794            
3795 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_FLOAT(env, stack, ");
3796 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3797 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3798 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3799 1           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3800 1           break;
3801             }
3802             case SPVM_OPCODE_C_ID_DEREF_MULNUM_DOUBLE: {
3803 1           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
3804 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
3805 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3806            
3807 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_DEREF_MULNUM_DOUBLE(env, stack, ");
3808 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3809 1           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3810 1           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3811 1           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
3812 1           break;
3813             }
3814             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_BYTE: {
3815 9           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3816 9           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3817 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3818            
3819 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_BYTE(");
3820 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
3821 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3822 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3823 9           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3824 9           break;
3825             }
3826             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_SHORT: {
3827 9           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3828 9           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3829 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3830            
3831 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_SHORT(");
3832 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3833 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3834 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3835 9           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3836 9           break;
3837             }
3838             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_INT: {
3839 21           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3840 21           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3841 21           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3842            
3843 21           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_INT(");
3844 21           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3845 21           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3846 21           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3847 21           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3848 21           break;
3849             }
3850             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_LONG: {
3851 9           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3852 9           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3853 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3854            
3855 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_LONG(");
3856 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3857 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3858 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3859 9           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3860 9           break;
3861             }
3862             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_FLOAT: {
3863 9           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3864 9           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3865 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3866            
3867 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_FLOAT(");
3868 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3869 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3870 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3871 9           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3872 9           break;
3873             }
3874             case SPVM_OPCODE_C_ID_GET_MULNUM_FIELD_DEREF_DOUBLE: {
3875 9           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3876 9           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3877 9           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3878            
3879 9           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_MULNUM_FIELD_DEREF_DOUBLE(");
3880 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3881 9           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3882 9           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand1);
3883 9           SPVM_STRING_BUFFER_add(string_buffer, ", field_index);\n");
3884 9           break;
3885             }
3886             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_BYTE: {
3887 12           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3888 12           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3889 12           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3890            
3891 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_BYTE(");
3892 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3893 12           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3894 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3895 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3896 12           break;
3897             }
3898             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_SHORT: {
3899 12           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3900 12           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3901 12           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3902            
3903 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_SHORT(");
3904 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3905 12           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3906 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
3907 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3908 12           break;
3909             }
3910             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_INT: {
3911 24           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3912 24           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3913 24           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3914            
3915 24           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_INT(");
3916 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3917 24           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3918 24           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
3919 24           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3920 24           break;
3921             }
3922             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_LONG: {
3923 12           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3924 12           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3925 12           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3926            
3927 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_LONG(");
3928 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3929 12           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3930 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
3931 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3932 12           break;
3933             }
3934             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_FLOAT: {
3935 15           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3936 15           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3937 15           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3938            
3939 15           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_FLOAT(");
3940 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3941 15           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3942 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
3943 15           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3944 15           break;
3945             }
3946             case SPVM_OPCODE_C_ID_SET_MULNUM_FIELD_DEREF_DOUBLE: {
3947 15           SPVM_STRING_BUFFER_add(string_buffer, " field_index = ");
3948 15           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
3949 15           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
3950            
3951 15           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_MULNUM_FIELD_DEREF_DOUBLE(");
3952 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
3953 15           SPVM_STRING_BUFFER_add(string_buffer, ", field_index, ");
3954 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
3955 15           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3956 15           break;
3957             }
3958             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_SHORT: {
3959 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_SHORT(");
3960 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
3961 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3962 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3963 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3964 5           break;
3965             }
3966             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_INT: {
3967 1719           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_INT(");
3968 1719           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
3969 1719           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3970 1719           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3971 1719           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3972 1719           break;
3973             }
3974             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_LONG: {
3975 5           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_LONG(");
3976 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
3977 5           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3978 5           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3979 5           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3980 5           break;
3981             }
3982             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_FLOAT: {
3983 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_FLOAT(");
3984 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
3985 14           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3986 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3987 14           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3988 14           break;
3989             }
3990             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_DOUBLE: {
3991 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_DOUBLE(");
3992 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
3993 14           SPVM_STRING_BUFFER_add(string_buffer, ", ");
3994 14           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
3995 14           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
3996 14           break;
3997             }
3998             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_BYTE: {
3999 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_BYTE(");
4000 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4001 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4002 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4003 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4004 2           break;
4005             }
4006             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_INT: {
4007 869           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_INT(");
4008 869           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4009 869           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4010 869           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4011 869           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4012 869           break;
4013             }
4014             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_LONG: {
4015 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_LONG(");
4016 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4017 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4018 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4019 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4020 3           break;
4021             }
4022             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_FLOAT: {
4023 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_FLOAT(");
4024 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4025 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4026 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4027 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4028 12           break;
4029             }
4030             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_DOUBLE: {
4031 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_DOUBLE(");
4032 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4033 12           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4034 12           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4035 12           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4036 12           break;
4037             }
4038             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_BYTE: {
4039 1432           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_BYTE(");
4040 1432           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4041 1432           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4042 1432           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4043 1432           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4044 1432           break;
4045             }
4046             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_SHORT: {
4047 1339           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_SHORT(");
4048 1339           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4049 1339           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4050 1339           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4051 1339           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4052 1339           break;
4053             }
4054             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_LONG: {
4055 1266           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_LONG(");
4056 1266           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4057 1266           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4058 1266           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4059 1266           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4060 1266           break;
4061             }
4062             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_FLOAT: {
4063 1001           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_FLOAT(");
4064 1001           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4065 1001           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4066 1001           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4067 1001           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4068 1001           break;
4069             }
4070             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_DOUBLE: {
4071 1072           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_DOUBLE(");
4072 1072           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4073 1072           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4074 1072           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4075 1072           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4076 1072           break;
4077             }
4078             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_BYTE: {
4079 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_BYTE(");
4080 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4081 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4082 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4083 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4084 2           break;
4085             }
4086             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_SHORT: {
4087 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_SHORT(");
4088 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4089 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4090 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4091 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4092 2           break;
4093             }
4094             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_INT: {
4095 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_INT(");
4096 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4097 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4098 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4099 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4100 4           break;
4101             }
4102             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_FLOAT: {
4103 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_FLOAT(");
4104 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4105 3           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4106 3           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4107 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4108 3           break;
4109             }
4110             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_DOUBLE: {
4111 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_DOUBLE(");
4112 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4113 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4114 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4115 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4116 2           break;
4117             }
4118             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_BYTE: {
4119 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_BYTE(");
4120 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4121 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4122 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4123 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4124 2           break;
4125             }
4126             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_SHORT: {
4127 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_SHORT(");
4128 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4129 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4130 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4131 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4132 2           break;
4133             }
4134             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_INT: {
4135 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_INT(");
4136 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4137 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4138 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4139 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4140 2           break;
4141             }
4142             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_LONG: {
4143 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_LONG(");
4144 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4145 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4146 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4147 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4148 2           break;
4149             }
4150             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_DOUBLE: {
4151 56           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_DOUBLE(");
4152 56           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4153 56           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4154 56           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4155 56           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4156 56           break;
4157             }
4158             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_BYTE: {
4159 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_BYTE(");
4160 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4161 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4162 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4163 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4164 2           break;
4165             }
4166             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_SHORT: {
4167 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_SHORT(");
4168 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4169 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4170 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4171 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4172 2           break;
4173             }
4174             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_INT: {
4175 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_INT(");
4176 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4177 4           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4178 4           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4179 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4180 4           break;
4181             }
4182             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_LONG: {
4183 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_LONG(");
4184 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4185 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4186 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4187 2           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4188 2           break;
4189             }
4190             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_FLOAT: {
4191 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_FLOAT(");
4192 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4193 6           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4194 6           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4195 6           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4196 6           break;
4197             }
4198             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_STRING: {
4199 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_STRING(env, stack, ");
4200 2           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4201 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4202 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
4203 2           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4204 2           break;
4205             }
4206             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_STRING: {
4207 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_STRING(env, stack, ");
4208 2           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4209 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4210 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4211 2           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4212 2           break;
4213             }
4214             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_STRING: {
4215 664           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_STRING(env, stack, ");
4216 664           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4217 664           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4218 664           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4219 664           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4220 664           break;
4221             }
4222             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_STRING: {
4223 2           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_STRING(env, stack, ");
4224 2           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4225 2           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4226 2           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4227 2           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4228 2           break;
4229             }
4230             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_STRING: {
4231 34           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_STRING(env, stack, ");
4232 34           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4233 34           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4234 34           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4235 34           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4236 34           break;
4237             }
4238             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_STRING: {
4239 32           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_STRING(env, stack, ");
4240 32           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4241 32           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4242 32           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4243 32           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_buffer, sizeof(tmp_buffer));\n");
4244 32           break;
4245             }
4246             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_STRING_TO_BYTE_ARRAY: {
4247 31           SPVM_STRING_BUFFER_add(string_buffer, " src_string = ");
4248 31           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4249 31           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4250            
4251 31           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_STRING_TO_BYTE_ARRAY(env, stack, ");
4252 31           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4253 31           SPVM_STRING_BUFFER_add(string_buffer, " , src_string);\n");
4254 31           break;
4255             }
4256             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_ARRAY_TO_STRING: {
4257 13           SPVM_STRING_BUFFER_add(string_buffer, " src_byte_array = ");
4258 13           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4259 13           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4260            
4261 13           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_ARRAY_TO_STRING(env, stack, ");
4262 13           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4263 13           SPVM_STRING_BUFFER_add(string_buffer, " , src_byte_array);\n");
4264 13           break;
4265             }
4266             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_TO_BYTE_OBJECT: {
4267 15           SPVM_STRING_BUFFER_add(string_buffer, " value_byte = ");
4268 15           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand1);
4269 15           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4270            
4271 15           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_TO_BYTE_OBJECT(env, stack, ");
4272 15           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4273 15           SPVM_STRING_BUFFER_add(string_buffer, ", value_byte, object_header_size);\n");
4274 15           break;
4275             }
4276             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_TO_SHORT_OBJECT: {
4277 8           SPVM_STRING_BUFFER_add(string_buffer, " value_short = ");
4278 8           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand1);
4279 8           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4280            
4281 8           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_TO_SHORT_OBJECT(env, stack, ");
4282 8           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4283 8           SPVM_STRING_BUFFER_add(string_buffer, ", value_short, object_header_size);\n");
4284 8           break;
4285             }
4286             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_TO_INT_OBJECT: {
4287 176           SPVM_STRING_BUFFER_add(string_buffer, " value_int = ");
4288 176           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand1);
4289 176           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4290            
4291 176           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_TO_INT_OBJECT(env, stack, ");
4292 176           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4293 176           SPVM_STRING_BUFFER_add(string_buffer, ", value_int, object_header_size);\n");
4294 176           break;
4295             }
4296             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_TO_LONG_OBJECT: {
4297 35           SPVM_STRING_BUFFER_add(string_buffer, " value_long = ");
4298 35           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand1);
4299 35           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4300            
4301 35           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_TO_LONG_OBJECT(env, stack, ");
4302 35           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4303 35           SPVM_STRING_BUFFER_add(string_buffer, ", value_long, object_header_size);\n");
4304 35           break;
4305             }
4306             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_TO_FLOAT_OBJECT: {
4307 10           SPVM_STRING_BUFFER_add(string_buffer, " value_float = ");
4308 10           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand1);
4309 10           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4310            
4311 10           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_TO_FLOAT_OBJECT(env, stack, ");
4312 10           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4313 10           SPVM_STRING_BUFFER_add(string_buffer, ", value_float, object_header_size);\n");
4314 10           break;
4315             }
4316             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_TO_DOUBLE_OBJECT: {
4317 23           SPVM_STRING_BUFFER_add(string_buffer, " value_double = ");
4318 23           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand1);
4319 23           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4320            
4321 23           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_TO_DOUBLE_OBJECT(env, stack, ");
4322 23           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4323 23           SPVM_STRING_BUFFER_add(string_buffer, ", value_double, object_header_size);\n");
4324 23           break;
4325             }
4326             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_BYTE_OBJECT_TO_BYTE: {
4327 7           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4328 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4329 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4330            
4331 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_BYTE_OBJECT_TO_BYTE(env, stack, ");
4332 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4333 7           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4334 7           break;
4335             }
4336             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_SHORT_OBJECT_TO_SHORT: {
4337 7           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4338 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4339 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4340            
4341 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_SHORT_OBJECT_TO_SHORT(env, stack, ");
4342 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4343 7           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4344 7           break;
4345             }
4346             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_INT_OBJECT_TO_INT: {
4347 71           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4348 71           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4349 71           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4350            
4351 71           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_INT_OBJECT_TO_INT(env, stack, ");
4352 71           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4353 71           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4354 71           break;
4355             }
4356             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_LONG_OBJECT_TO_LONG: {
4357 11           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4358 11           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4359 11           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4360            
4361 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_LONG_OBJECT_TO_LONG(env, stack, ");
4362 11           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4363 11           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4364 11           break;
4365             }
4366             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_FLOAT_OBJECT_TO_FLOAT: {
4367 7           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4368 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4369 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4370            
4371 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_FLOAT_OBJECT_TO_FLOAT(env, stack, ");
4372 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4373 7           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4374 7           break;
4375             }
4376             case SPVM_OPCODE_C_ID_TYPE_CONVERSION_DOUBLE_OBJECT_TO_DOUBLE: {
4377 7           SPVM_STRING_BUFFER_add(string_buffer, " object = ");
4378 7           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand1);
4379 7           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4380            
4381 7           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_TYPE_CONVERSION_DOUBLE_OBJECT_TO_DOUBLE(env, stack, ");
4382 7           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4383 7           SPVM_STRING_BUFFER_add(string_buffer, ", object, &error_id, object_header_size);\n");
4384 7           break;
4385             }
4386             case SPVM_OPCODE_C_ID_GET_STACK_BYTE: {
4387 185           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_BYTE(");
4388 185           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4389 185           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4390 185           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4391 185           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4392 185           break;
4393             }
4394             case SPVM_OPCODE_C_ID_GET_STACK_SHORT: {
4395 185           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_SHORT(");
4396 185           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4397 185           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4398 185           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4399 185           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4400 185           break;
4401             }
4402             case SPVM_OPCODE_C_ID_GET_STACK_INT: {
4403 5483           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_INT(");
4404 5483           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4405 5483           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4406 5483           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4407 5483           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4408 5483           break;
4409             }
4410             case SPVM_OPCODE_C_ID_GET_STACK_LONG: {
4411 823           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_LONG(");
4412 823           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4413 823           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4414 823           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4415 823           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4416 823           break;
4417             }
4418             case SPVM_OPCODE_C_ID_GET_STACK_FLOAT: {
4419 734           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_FLOAT(");
4420 734           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4421 734           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4422 734           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4423 734           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4424 734           break;
4425             }
4426             case SPVM_OPCODE_C_ID_GET_STACK_DOUBLE: {
4427 776           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_DOUBLE(");
4428 776           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4429 776           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4430 776           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4431 776           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4432 776           break;
4433             }
4434             case SPVM_OPCODE_C_ID_GET_STACK_OBJECT: {
4435 4900           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OBJECT(env, ");
4436 4900           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4437 4900           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4438 4900           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4439 4900           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4440 4900           break;
4441             }
4442             case SPVM_OPCODE_C_ID_GET_STACK_REF: {
4443 53           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_REF(");
4444 53           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
4445 53           SPVM_STRING_BUFFER_add(string_buffer, ", stack, ");
4446 53           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4447 53           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4448 53           break;
4449             }
4450             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_BYTE: {
4451 12           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4452 12           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4453 12           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4454            
4455 12           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_BYTE(env, ");
4456 12           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4457 12           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4458 12           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4459 12           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4460 12           break;
4461             }
4462             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_SHORT: {
4463 11           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4464 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4465 11           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4466            
4467 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_SHORT(env, ");
4468 11           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4469 11           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4470 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4471 11           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4472 11           break;
4473             }
4474             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_INT: {
4475 11           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4476 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4477 11           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4478            
4479 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_INT(env, ");
4480 11           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4481 11           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4482 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4483 11           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4484 11           break;
4485             }
4486             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_LONG: {
4487 11           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4488 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4489 11           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4490            
4491 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_LONG(env, ");
4492 11           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4493 11           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4494 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4495 11           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4496 11           break;
4497             }
4498             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_FLOAT: {
4499 11           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4500 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4501 11           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4502            
4503 11           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_FLOAT(env, ");
4504 11           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4505 11           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4506 11           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4507 11           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4508 11           break;
4509             }
4510             case SPVM_OPCODE_C_ID_GET_STACK_MULNUM_DOUBLE: {
4511 13           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4512 13           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 >> 8);
4513 13           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4514            
4515 13           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_MULNUM_DOUBLE(env, ");
4516 13           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4517 13           SPVM_STRING_BUFFER_add(string_buffer, " , stack, ");
4518 13           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4519 13           SPVM_STRING_BUFFER_add(string_buffer, ", args_width);\n");
4520 13           break;
4521             }
4522             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_BYTE: {
4523 3           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4524 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4525 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4526            
4527 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_BYTE(env, ");
4528 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4529 3           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, ");
4530 3           SPVM_STRING_BUFFER_add_int(string_buffer, (int8_t)(uint8_t)opcode->operand1);
4531 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4532 3           break;
4533             }
4534             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_SHORT: {
4535 3           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4536 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4537 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4538            
4539 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_SHORT(env, ");
4540 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4541 3           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, ");
4542 3           SPVM_STRING_BUFFER_add_int(string_buffer, (int16_t)(uint16_t)opcode->operand1);
4543 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4544 3           break;
4545             }
4546             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_INT: {
4547 42           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4548 42           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4549 42           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4550            
4551 42           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_INT(env, ");
4552 42           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4553 42           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, ");
4554 42           SPVM_STRING_BUFFER_add_int(string_buffer, (int32_t)opcode->operand1);
4555 42           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4556 42           break;
4557             }
4558             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_LONG: {
4559 4           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4560 4           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4561 4           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4562            
4563 4           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_LONG(env, ");
4564 4           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4565 4           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, ");
4566 4           SPVM_STRING_BUFFER_add_long(string_buffer, *(int64_t*)&opcode->operand1);
4567 4           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4568 4           break;
4569             }
4570             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_FLOAT: {
4571             SPVM_VALUE value;
4572 1           value.ival = (int32_t)opcode->operand1;
4573              
4574 1           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4575 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4576 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4577            
4578 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_FLOAT(env, ");
4579 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4580 1           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, (tmp_constant.ival = ");
4581 1           SPVM_STRING_BUFFER_add_int(string_buffer, value.ival);
4582 1           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_constant.fval));\n");
4583 1           break;
4584             }
4585             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_DOUBLE: {
4586 1           double double_value = *(double*)&opcode->operand1;
4587             SPVM_VALUE value;
4588 1           value.dval = double_value;
4589              
4590 1           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4591 1           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4592 1           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4593            
4594 1           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_DOUBLE(env, ");
4595 1           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4596 1           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index, (tmp_constant.lval = ");
4597 1           SPVM_STRING_BUFFER_add_long(string_buffer, value.lval);
4598 1           SPVM_STRING_BUFFER_add(string_buffer, ", tmp_constant.dval));\n");
4599 1           break;
4600             }
4601             case SPVM_OPCODE_C_ID_GET_STACK_OPTIONAL_OBJECT: {
4602 6           SPVM_STRING_BUFFER_add(string_buffer, " stack_index = ");
4603 6           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3 & 0xFF);
4604 6           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4605            
4606 6           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_GET_STACK_OPTIONAL_OBJECT(env, ");
4607 6           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4608 6           SPVM_STRING_BUFFER_add(string_buffer, ", stack, stack_index);\n");
4609 6           break;
4610             }
4611             case SPVM_OPCODE_C_ID_END_ARGS: {
4612             // Do nothing
4613 5777           break;
4614             }
4615             case SPVM_OPCODE_C_ID_SET_STACK_BYTE:
4616             {
4617 83           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_BYTE(stack, ");
4618 83           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4619 83           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4620 83           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4621 83           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4622 83           break;
4623             }
4624             case SPVM_OPCODE_C_ID_SET_STACK_SHORT:
4625             {
4626 70           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_SHORT(stack, ");
4627 70           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4628 70           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4629 70           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4630 70           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4631 70           break;
4632             }
4633             case SPVM_OPCODE_C_ID_SET_STACK_INT:
4634             {
4635 3442           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_INT(stack, ");
4636 3442           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4637 3442           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4638 3442           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4639 3442           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4640 3442           break;
4641             }
4642             case SPVM_OPCODE_C_ID_SET_STACK_LONG:
4643             {
4644 144           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_LONG(stack, ");
4645 144           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4646 144           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4647 144           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4648 144           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4649 144           break;
4650             }
4651             case SPVM_OPCODE_C_ID_SET_STACK_FLOAT:
4652             {
4653 155           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_FLOAT(stack, ");
4654 155           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4655 155           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4656 155           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4657 155           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4658 155           break;
4659             }
4660             case SPVM_OPCODE_C_ID_SET_STACK_DOUBLE:
4661             {
4662 157           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_DOUBLE(stack, ");
4663 157           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4664 157           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4665 157           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4666 157           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4667 157           break;
4668             }
4669             case SPVM_OPCODE_C_ID_SET_STACK_OBJECT:
4670             {
4671 8026           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_OBJECT(stack, ");
4672 8026           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4673 8026           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4674 8026           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4675 8026           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4676 8026           break;
4677             }
4678             case SPVM_OPCODE_C_ID_SET_STACK_REF:
4679             {
4680 167           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_REF(stack, ");
4681 167           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4682 167           SPVM_STRING_BUFFER_add(string_buffer, ", ");
4683 167           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_REF, opcode->operand0);
4684 167           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4685 167           break;
4686             }
4687             case SPVM_OPCODE_C_ID_SET_STACK_UNDEF:
4688             {
4689 195           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_UNDEF(stack, ");
4690 195           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4691 195           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4692 195           break;
4693             }
4694             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_BYTE: {
4695 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4696 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4697 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4698              
4699 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_BYTE(env, stack, ");
4700 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4701 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4702 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4703 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4704 3           break;
4705             }
4706             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_SHORT: {
4707 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4708 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4709 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4710              
4711 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_SHORT(env, stack, ");
4712 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4713 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4714 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4715 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4716 3           break;
4717             }
4718             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_INT: {
4719 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4720 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4721 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4722              
4723 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_INT(env, stack, ");
4724 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4725 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4726 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4727 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4728 3           break;
4729             }
4730             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_LONG: {
4731 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4732 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4733 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4734              
4735 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_LONG(env, stack, ");
4736 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4737 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4738 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4739 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4740 3           break;
4741             }
4742             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_FLOAT: {
4743 3           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4744 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4745 3           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4746              
4747 3           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_FLOAT(env, stack, ");
4748 3           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4749 3           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4750 3           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4751 3           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4752 3           break;
4753             }
4754             case SPVM_OPCODE_C_ID_SET_STACK_MULNUM_DOUBLE: {
4755 49           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4756 49           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4757 49           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4758              
4759 49           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_SET_STACK_MULNUM_DOUBLE(env, stack, ");
4760 49           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand3);
4761 49           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length, ");
4762 49           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4763 49           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4764 49           break;
4765             }
4766             case SPVM_OPCODE_C_ID_RETURN_VOID:
4767             {
4768 401           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4769 401           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4770 401           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4771 401           break;
4772             }
4773             case SPVM_OPCODE_C_ID_RETURN_BYTE: {
4774 87           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_BYTE(stack, ");
4775 87           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4776 87           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4777              
4778 87           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4779 87           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4780 87           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4781 87           break;
4782             }
4783             case SPVM_OPCODE_C_ID_RETURN_SHORT: {
4784 85           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_SHORT(stack, ");
4785 85           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4786 85           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4787              
4788 85           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4789 85           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4790 85           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4791 85           break;
4792             }
4793             case SPVM_OPCODE_C_ID_RETURN_INT: {
4794 16666           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_INT(stack, ");
4795 16666           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4796 16666           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4797              
4798 16666           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4799 16666           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4800 16666           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4801 16666           break;
4802             }
4803             case SPVM_OPCODE_C_ID_RETURN_LONG: {
4804 334           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_LONG(stack, ");
4805 334           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4806 334           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4807              
4808 334           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4809 334           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4810 334           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4811 334           break;
4812             }
4813             case SPVM_OPCODE_C_ID_RETURN_FLOAT: {
4814 178           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_FLOAT(stack, ");
4815 178           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4816 178           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4817              
4818 178           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4819 178           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4820 178           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4821 178           break;
4822             }
4823             case SPVM_OPCODE_C_ID_RETURN_DOUBLE: {
4824 184           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_DOUBLE(stack, ");
4825 184           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4826 184           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4827              
4828 184           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4829 184           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4830 184           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4831 184           break;
4832             }
4833             case SPVM_OPCODE_C_ID_RETURN_OBJECT: {
4834 892           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_OBJECT(env, stack, ");
4835 892           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT, opcode->operand0);
4836 892           SPVM_STRING_BUFFER_add(string_buffer, ");\n");
4837              
4838 892           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4839 892           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4840 892           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4841 892           break;
4842             }
4843             case SPVM_OPCODE_C_ID_RETURN_UNDEF: {
4844 19           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_UNDEF(stack);\n");
4845              
4846 19           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4847 19           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4848 19           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4849 19           break;
4850             }
4851             case SPVM_OPCODE_C_ID_RETURN_MULNUM_BYTE: {
4852 16           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4853 16           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4854 16           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4855            
4856 16           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_BYTE(env, stack, ");
4857 16           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_BYTE, opcode->operand0);
4858 16           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4859            
4860 16           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4861 16           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4862 16           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4863 16           break;
4864             }
4865             case SPVM_OPCODE_C_ID_RETURN_MULNUM_SHORT: {
4866 14           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4867 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4868 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4869            
4870 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_SHORT(env, stack, ");
4871 14           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_SHORT, opcode->operand0);
4872 14           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4873            
4874 14           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4875 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4876 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4877 14           break;
4878             }
4879             case SPVM_OPCODE_C_ID_RETURN_MULNUM_INT: {
4880 14           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4881 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4882 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4883            
4884 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_INT(env, stack, ");
4885 14           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_INT, opcode->operand0);
4886 14           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4887            
4888 14           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4889 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4890 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4891 14           break;
4892             }
4893             case SPVM_OPCODE_C_ID_RETURN_MULNUM_LONG: {
4894 14           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4895 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4896 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4897            
4898 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_LONG(env, stack, ");
4899 14           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_LONG, opcode->operand0);
4900 14           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4901            
4902 14           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4903 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4904 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4905 14           break;
4906             }
4907             case SPVM_OPCODE_C_ID_RETURN_MULNUM_FLOAT: {
4908 14           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4909 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4910 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4911            
4912 14           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_FLOAT(env, stack, ");
4913 14           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT, opcode->operand0);
4914 14           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4915            
4916 14           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4917 14           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4918 14           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4919 14           break;
4920             }
4921             case SPVM_OPCODE_C_ID_RETURN_MULNUM_DOUBLE: {
4922 16           SPVM_STRING_BUFFER_add(string_buffer, " fields_length = ");
4923 16           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand2);
4924 16           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4925            
4926 16           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_RETURN_MULNUM_DOUBLE(env, stack, ");
4927 16           SPVM_PRECOMPILE_add_operand_address(precompile, string_buffer, SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE, opcode->operand0);
4928 16           SPVM_STRING_BUFFER_add(string_buffer, ", fields_length);\n");
4929            
4930 16           SPVM_STRING_BUFFER_add(string_buffer, " goto L");
4931 16           SPVM_STRING_BUFFER_add_int(string_buffer, opcode->operand1);
4932 16           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4933 16           break;
4934             }
4935             case SPVM_OPCODE_C_ID_CALL_CLASS_METHOD: {
4936 9437           int32_t invocant_decl_basic_type_id = opcode->operand0;
4937 9437           int32_t decl_method_index = opcode->operand1;
4938 9437           int32_t args_width = opcode->operand2;
4939            
4940 9437           SPVM_RUNTIME_BASIC_TYPE* invocant_decl_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, invocant_decl_basic_type_id);
4941 9437           SPVM_RUNTIME_METHOD* decl_method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, invocant_decl_basic_type, decl_method_index);
4942 9437           const char* method_name = decl_method->name;
4943 9437           const char* basic_type_name = invocant_decl_basic_type->name;
4944            
4945 9437           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
4946 9437           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
4947 9437           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
4948            
4949 9437           SPVM_STRING_BUFFER_add(string_buffer, " method_name = \"");
4950 9437           SPVM_STRING_BUFFER_add(string_buffer, (char*)method_name);
4951 9437           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
4952            
4953 9437           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4954 9437           SPVM_STRING_BUFFER_add_int(string_buffer, args_width);
4955 9437           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4956            
4957 9437           SPVM_STRING_BUFFER_add(string_buffer, " decl_method = ");
4958 9437           SPVM_PRECOMPILE_add_method(precompile, string_buffer, basic_type_name, method_name);
4959 9437           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4960            
4961 9437           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CALL_CLASS_METHOD(env, stack, error_id, decl_method, args_width);\n");
4962            
4963 9437           break;
4964             }
4965             case SPVM_OPCODE_C_ID_CALL_INSTANCE_METHOD_STATIC: {
4966 4           int32_t invocant_decl_basic_type_id = opcode->operand0;
4967 4           int32_t decl_method_index = opcode->operand1;
4968 4           int32_t args_width = opcode->operand2;
4969            
4970 4           SPVM_RUNTIME_BASIC_TYPE* invocant_decl_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, invocant_decl_basic_type_id);
4971 4           SPVM_RUNTIME_METHOD* decl_method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, invocant_decl_basic_type, decl_method_index);
4972 4           const char* method_name = decl_method->name;
4973 4           const char* basic_type_name = invocant_decl_basic_type->name;
4974            
4975 4           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
4976 4           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
4977 4           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
4978            
4979 4           SPVM_STRING_BUFFER_add(string_buffer, " method_name = \"");
4980 4           SPVM_STRING_BUFFER_add(string_buffer, (char*)method_name);
4981 4           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
4982            
4983 4           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
4984 4           SPVM_STRING_BUFFER_add_int(string_buffer, args_width);
4985 4           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4986            
4987 4           SPVM_STRING_BUFFER_add(string_buffer, " decl_method = ");
4988 4           SPVM_PRECOMPILE_add_method(precompile, string_buffer, basic_type_name, method_name);
4989 4           SPVM_STRING_BUFFER_add(string_buffer, ";\n");
4990            
4991 4           SPVM_STRING_BUFFER_add(string_buffer,
4992             " SPVM_IMPLEMENT_CALL_INSTANCE_METHOD_STATIC(env, stack, error_id, decl_method, args_width);\n");
4993            
4994 4           break;
4995             }
4996             case SPVM_OPCODE_C_ID_CALL_INSTANCE_METHOD: {
4997 2517           int32_t invocant_decl_basic_type_id = opcode->operand0;
4998 2517           int32_t decl_method_index = opcode->operand1;
4999 2517           int32_t args_width = opcode->operand2;
5000            
5001 2517           SPVM_RUNTIME_BASIC_TYPE* invocant_decl_basic_type = SPVM_API_RUNTIME_get_basic_type_by_id(runtime, invocant_decl_basic_type_id);
5002 2517           SPVM_RUNTIME_METHOD* decl_method = SPVM_API_BASIC_TYPE_get_method_by_index(runtime, invocant_decl_basic_type, decl_method_index);
5003 2517           const char* method_name = decl_method->name;
5004 2517           const char* basic_type_name = invocant_decl_basic_type->name;
5005            
5006 2517           SPVM_STRING_BUFFER_add(string_buffer, " basic_type_name = \"");
5007 2517           SPVM_STRING_BUFFER_add(string_buffer, (char*)basic_type_name);
5008 2517           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
5009            
5010 2517           SPVM_STRING_BUFFER_add(string_buffer, " method_name = \"");
5011 2517           SPVM_STRING_BUFFER_add(string_buffer, (char*)method_name);
5012 2517           SPVM_STRING_BUFFER_add(string_buffer, "\";\n");
5013            
5014 2517           SPVM_STRING_BUFFER_add(string_buffer, " args_width = ");
5015 2517           SPVM_STRING_BUFFER_add_int(string_buffer, args_width);
5016 2517           SPVM_STRING_BUFFER_add(string_buffer,
5017             ";\n");
5018 2517           SPVM_STRING_BUFFER_add(string_buffer, " SPVM_IMPLEMENT_CALL_INSTANCE_METHOD(env, stack, basic_type_name, method_name, args_width, &error_id, tmp_buffer, sizeof(tmp_buffer));\n");
5019            
5020 2517           break;
5021             }
5022             default: {
5023 0           spvm_warn("[Unexpected Error]The \"%s\" opcode is not defined", SPVM_OPCODE_get_opcode_name(opcode_id));
5024 0           assert(0);
5025             }
5026             }
5027 256948           opcode_index++;
5028             }
5029            
5030             // No exception
5031 5777           SPVM_STRING_BUFFER_add(string_buffer, " END_OF_METHOD:\n");
5032 5777           SPVM_STRING_BUFFER_add(string_buffer, " if (error_id == 0) {\n");
5033 5777           SPVM_RUNTIME_BASIC_TYPE* current_method_return_basic_type = current_method->return_basic_type;
5034 5777           int32_t current_method_return_type_dimension = current_method->return_type_dimension;
5035 5777           int32_t current_method_return_type_flag =current_method->return_type_flag;
5036 5777           int32_t method_return_type_is_object = SPVM_API_TYPE_is_object_type(runtime, current_method_return_basic_type, current_method_return_type_dimension, current_method_return_type_flag);
5037 5777 100         if (method_return_type_is_object) {
5038 437           SPVM_STRING_BUFFER_add(string_buffer, " if (stack[0].oval != NULL) {\n"
5039             " env->api->internal->lock_object(env, stack, stack[0].oval);\n"
5040             " env->api->internal->dec_ref_count(env, stack, stack[0].oval);\n"
5041             " env->api->internal->unlock_object(env, stack, stack[0].oval);\n"
5042             " }\n");
5043             }
5044 5777           SPVM_STRING_BUFFER_add(string_buffer, " }\n"
5045             " return error_id;\n"
5046             "}\n"
5047             "\n");
5048 5777           }
5049              
5050 0           const char* SPVM_PRECOMPILE_get_ctype_name(SPVM_PRECOMPILE* precompile, int32_t ctype_id) {
5051 0           SPVM_RUNTIME* runtime = precompile->runtime;
5052              
5053            
5054 0           switch (ctype_id) {
5055             case SPVM_PRECOMPILE_C_CTYPE_ID_BYTE:
5056 0           return "int8_t";
5057             break;
5058             case SPVM_PRECOMPILE_C_CTYPE_ID_SHORT:
5059 0           return "int16_t";
5060             break;
5061             case SPVM_PRECOMPILE_C_CTYPE_ID_INT:
5062 0           return "int32_t";
5063             break;
5064             case SPVM_PRECOMPILE_C_CTYPE_ID_LONG:
5065 0           return "int64_t";
5066             break;
5067             case SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT:
5068 0           return "float";
5069             break;
5070             case SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE:
5071 0           return "double";
5072             break;
5073             case SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT:
5074 0           return "void*";
5075             break;
5076             case SPVM_PRECOMPILE_C_CTYPE_ID_REF:
5077 0           return "void*";
5078             break;
5079             }
5080            
5081 0           return NULL;
5082             }
5083              
5084 233458           void SPVM_PRECOMPILE_add_operand(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, int32_t ctype_id, int32_t index) {
5085 233458           SPVM_RUNTIME* runtime = precompile->runtime;
5086            
5087 233458           switch (ctype_id) {
5088             case SPVM_PRECOMPILE_C_CTYPE_ID_BYTE: {
5089 6419           SPVM_STRING_BUFFER_add(string_buffer, "byte_vars[");
5090 6419           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5091 6419           SPVM_STRING_BUFFER_add(string_buffer, "]");
5092 6419           break;
5093             }
5094             case SPVM_PRECOMPILE_C_CTYPE_ID_SHORT: {
5095 4408           SPVM_STRING_BUFFER_add(string_buffer, "short_vars[");
5096 4408           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5097 4408           SPVM_STRING_BUFFER_add(string_buffer, "]");
5098 4408           break;
5099             }
5100             case SPVM_PRECOMPILE_C_CTYPE_ID_INT: {
5101 157418           SPVM_STRING_BUFFER_add(string_buffer, "int_vars[");
5102 157418           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5103 157418           SPVM_STRING_BUFFER_add(string_buffer, "]");
5104 157418           break;
5105             }
5106             case SPVM_PRECOMPILE_C_CTYPE_ID_LONG: {
5107 6933           SPVM_STRING_BUFFER_add(string_buffer, "long_vars[");
5108 6933           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5109 6933           SPVM_STRING_BUFFER_add(string_buffer, "]");
5110 6933           break;
5111             }
5112             case SPVM_PRECOMPILE_C_CTYPE_ID_FLOAT: {
5113 6313           SPVM_STRING_BUFFER_add(string_buffer, "float_vars[");
5114 6313           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5115 6313           SPVM_STRING_BUFFER_add(string_buffer, "]");
5116 6313           break;
5117             }
5118             case SPVM_PRECOMPILE_C_CTYPE_ID_DOUBLE: {
5119 7023           SPVM_STRING_BUFFER_add(string_buffer, "double_vars[");
5120 7023           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5121 7023           SPVM_STRING_BUFFER_add(string_buffer, "]");
5122 7023           break;
5123             }
5124             case SPVM_PRECOMPILE_C_CTYPE_ID_BOOL_CONVERSION_OBJECT:
5125             case SPVM_PRECOMPILE_C_CTYPE_ID_OBJECT:
5126             {
5127 44022           SPVM_STRING_BUFFER_add(string_buffer, "object_vars[");
5128 44022           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5129 44022           SPVM_STRING_BUFFER_add(string_buffer, "]");
5130 44022           break;
5131             }
5132             case SPVM_PRECOMPILE_C_CTYPE_ID_REF: {
5133 922           SPVM_STRING_BUFFER_add(string_buffer, "ref_vars[");
5134 922           SPVM_STRING_BUFFER_add_int(string_buffer, index);
5135 922           SPVM_STRING_BUFFER_add(string_buffer, "]");
5136 922           break;
5137             }
5138             default:
5139 0           assert(0);
5140             }
5141 233458           }
5142              
5143 21557           void SPVM_PRECOMPILE_add_operand_address(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, int32_t ctype_id, int32_t var_index) {
5144 21557           SPVM_RUNTIME* runtime = precompile->runtime;
5145 21557           SPVM_STRING_BUFFER_add(string_buffer, "&");
5146 21557           SPVM_PRECOMPILE_add_operand(precompile, string_buffer, ctype_id, var_index);
5147 21557           }
5148              
5149 22552           void SPVM_PRECOMPILE_add_basic_type(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, const char* basic_type_name) {
5150 22552           SPVM_STRING_BUFFER_add(string_buffer, "basic_type");
5151 22552           SPVM_STRING_BUFFER_add(string_buffer, "____");
5152 22552           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
5153 22552           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(basic_type_name));
5154 22552           SPVM_STRING_BUFFER_add(string_buffer, "____");
5155 22552           }
5156              
5157 2339           void SPVM_PRECOMPILE_add_class_var(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, const char* basic_type_name, const char* class_var_name) {
5158 2339           SPVM_STRING_BUFFER_add(string_buffer, "class_var");
5159 2339           SPVM_STRING_BUFFER_add(string_buffer, "____");
5160 2339           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
5161 2339           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(basic_type_name));
5162 2339           SPVM_STRING_BUFFER_add(string_buffer, "____");
5163 2339           SPVM_STRING_BUFFER_add(string_buffer, class_var_name);
5164 2339           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(class_var_name));
5165 2339           SPVM_STRING_BUFFER_add(string_buffer, "____");
5166 2339           }
5167              
5168 0           void SPVM_PRECOMPILE_add_field(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, const char* basic_type_name, const char* field_name) {
5169 0           SPVM_STRING_BUFFER_add(string_buffer, "field");
5170 0           SPVM_STRING_BUFFER_add(string_buffer, "____");
5171 0           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
5172 0           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(basic_type_name));
5173 0           SPVM_STRING_BUFFER_add(string_buffer, "____");
5174 0           SPVM_STRING_BUFFER_add(string_buffer, field_name);
5175 0           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(field_name));
5176 0           SPVM_STRING_BUFFER_add(string_buffer, "____");
5177 0           }
5178              
5179 7057           void SPVM_PRECOMPILE_add_field_offset(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, const char* basic_type_name, const char* field_name) {
5180 7057           SPVM_STRING_BUFFER_add(string_buffer, "field_offset");
5181 7057           SPVM_STRING_BUFFER_add(string_buffer, "____");
5182 7057           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
5183 7057           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(basic_type_name));
5184 7057           SPVM_STRING_BUFFER_add(string_buffer, "____");
5185 7057           SPVM_STRING_BUFFER_add(string_buffer, field_name);
5186 7057           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(field_name));
5187 7057           SPVM_STRING_BUFFER_add(string_buffer, "____");
5188 7057           }
5189              
5190 27096           void SPVM_PRECOMPILE_add_method(SPVM_PRECOMPILE* precompile, SPVM_STRING_BUFFER* string_buffer, const char* basic_type_name, const char* method_name) {
5191 27096           SPVM_STRING_BUFFER_add(string_buffer, "method");
5192 27096           SPVM_STRING_BUFFER_add(string_buffer, "____");
5193 27096           SPVM_STRING_BUFFER_add(string_buffer, basic_type_name);
5194 27096           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(basic_type_name));
5195 27096           SPVM_STRING_BUFFER_add(string_buffer, "____");
5196 27096           SPVM_STRING_BUFFER_add(string_buffer, method_name);
5197 27096           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, string_buffer->string + string_buffer->length - strlen(method_name));
5198 27096           SPVM_STRING_BUFFER_add(string_buffer, "____");
5199 27096           }
5200              
5201 872           int32_t SPVM_PRECOMPILE_contains_class_var(SPVM_PRECOMPILE* precompile, const char* string, const char* basic_type_name, const char* class_var_name) {
5202            
5203 872           const char* label = "class_var";
5204 872           int32_t found = SPVM_PRECOMPILE_contains_access_id(precompile,string, label, basic_type_name, class_var_name);
5205            
5206 872           return found;
5207             }
5208              
5209 0           int32_t SPVM_PRECOMPILE_contains_field(SPVM_PRECOMPILE* precompile, const char* string, const char* basic_type_name, const char* field_name) {
5210            
5211 0           const char* label = "field";
5212 0           int32_t found = SPVM_PRECOMPILE_contains_access_id(precompile,string, label, basic_type_name, field_name);
5213            
5214 0           return found;
5215             }
5216              
5217 1999           int32_t SPVM_PRECOMPILE_contains_field_offset(SPVM_PRECOMPILE* precompile, const char* string, const char* basic_type_name, const char* field_name) {
5218            
5219 1999           const char* label = "field_offset";
5220 1999           int32_t found = SPVM_PRECOMPILE_contains_access_id(precompile,string, label, basic_type_name, field_name);
5221            
5222 1999           return found;
5223             }
5224              
5225 9441           int32_t SPVM_PRECOMPILE_contains_method(SPVM_PRECOMPILE* precompile, const char* string, const char* basic_type_name, const char* method_name) {
5226            
5227 9441           const char* label = "method";
5228 9441           int32_t found = SPVM_PRECOMPILE_contains_access_id(precompile,string, label, basic_type_name, method_name);
5229            
5230 9441           return found;
5231             }
5232              
5233 14254           int32_t SPVM_PRECOMPILE_contains_basic_type(SPVM_PRECOMPILE* precompile, const char* string, const char* basic_type_name) {
5234            
5235 14254           const char* label = "basic_type";
5236            
5237 14254           int32_t found = SPVM_PRECOMPILE_contains_access_id(precompile,string, label, basic_type_name, NULL);
5238            
5239 14254           return found;
5240             }
5241              
5242 26566           int32_t SPVM_PRECOMPILE_contains_access_id(SPVM_PRECOMPILE* precompile, const char* string, const char* label, const char* name1, const char* name2) {
5243            
5244 26566           int32_t label_length = strlen(label);
5245            
5246 26566           const char* separator = "____";
5247 26566           int32_t separator_length = strlen(separator);
5248            
5249 26566           int32_t name1_length = strlen(name1);
5250            
5251 26566           int32_t name2_length = 0;
5252 26566 100         if (name2) {
5253 12312           name2_length = strlen(name2);
5254             }
5255            
5256 26566           int32_t length = label_length + separator_length + name1_length + separator_length;
5257 26566 100         if (name2) {
5258 12312           length += separator_length + name2_length + separator_length;
5259             }
5260            
5261 26566           char* name_abs = SPVM_ALLOCATOR_alloc_memory_block_unmanaged(length + 1);
5262            
5263 26566           memcpy(name_abs, label, label_length);
5264 26566           memcpy(name_abs + label_length, separator, separator_length);
5265 26566           memcpy(name_abs + label_length + separator_length, name1, name1_length);
5266 26566           memcpy(name_abs + label_length + separator_length + name1_length, separator, separator_length);
5267 26566 100         if (name2) {
5268 12312           memcpy(name_abs + label_length + separator_length + name1_length + separator_length, name2, name2_length);
5269 12312           memcpy(name_abs + label_length + separator_length + name1_length + separator_length + name2_length, separator, separator_length);
5270             }
5271            
5272 26566           SPVM_PRECOMPILE_replace_colon_with_under_score(precompile, name_abs);
5273            
5274 26566           const char* found_ptr = strstr(string, name_abs);
5275 26566           int32_t found = !!found_ptr;
5276            
5277 26566           SPVM_ALLOCATOR_free_memory_block_unmanaged(name_abs);
5278            
5279 26566           return found;
5280             }
5281              
5282 122102           void SPVM_PRECOMPILE_replace_colon_with_under_score(SPVM_PRECOMPILE* precompile, char* string) {
5283 122102           int32_t offset = 0;
5284 2282495 100         while (string[offset] != '\0') {
5285 2160393 100         if (string[offset] == ':') {
5286 100050           string[offset] = '_';
5287             }
5288 2160393           offset++;
5289             }
5290 122102           }