1
diff -ruNE ports/hotspot/build/linux/makefiles/zero.make ports/hotspot/build/linux/makefiles/zero.make
2
--- ports/hotspot/build/linux/makefiles/zero.make 2009-03-05 14:43:47.000000000 +0000
3
+++ ports/hotspot/build/linux/makefiles/zero.make 2009-04-03 13:29:53.000000000 +0000
8
+# Not included in includeDB because it has no dependencies
9
+ifdef ICEDTEA_ZERO_BUILD
10
+# ECN - For the time being HOTSPOT_OPT only enabled for ARM
11
+# CFLAGS += -DHOTSPOT_OPT
12
+ifeq ($(ZERO_LIBARCH),arm)
13
+Obj_Files += bytecodeInterpreter_arm.o
14
+CFLAGS += -DHOTSPOT_OPT -DHOTSPOT_ASM -march=armv5t -mtune=cortex-a8 -O2 -falign-functions=32 -falign-loops=8
18
# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized
19
OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT)
20
# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized
21
diff -ruNE ports/hotspot/src/cpu/zero/vm/bytecodeInterpreter_arm.S ports/hotspot/src/cpu/zero/vm/bytecodeInterpreter_arm.S
22
--- ports/hotspot/src/cpu/zero/vm/bytecodeInterpreter_arm.S 1970-01-01 00:00:00.000000000 +0000
23
+++ ports/hotspot/src/cpu/zero/vm/bytecodeInterpreter_arm.S 2009-05-08 13:10:20.000000000 +0200
27
+#define opc_fadd 0x62
28
+#define opc_dadd 0x63
29
+#define opc_fsub 0x66
30
+#define opc_dsub 0x67
31
+#define opc_fmul 0x6a
32
+#define opc_dmul 0x6b
33
+#define opc_fdiv 0x6e
34
+#define opc_ddiv 0x6f
39
+#define opc_fcmpl 0x95
40
+#define opc_fcmpg 0x96
41
+#define opc_dcmpl 0x97
42
+#define opc_dcmpg 0x98
44
+#define opc_ifeq 0x99
45
+#define opc_ifne 0x9a
46
+#define opc_iflt 0x9b
47
+#define opc_ifge 0x9c
48
+#define opc_ifgt 0x9d
49
+#define opc_ifle 0x9e
51
+#define opc_if_icmpeq 0x9f
52
+#define opc_if_icmpne 0xa0
53
+#define opc_if_icmplt 0xa1
54
+#define opc_if_icmpge 0xa2
55
+#define opc_if_icmpgt 0xa3
56
+#define opc_if_icmple 0xa4
58
+#define opc_if_acmpeq 0xa5
59
+#define opc_if_acmpne 0xa6
61
+#define opc_goto 0xa7
63
+#define opc_tableswitch 0xaa
64
+#define opc_lookupswitch 0xab
66
+#define opc_getfield 0xb4
68
+#define opc_invokevirtual 0xb6
69
+#define opc_invokespecial 0xb7
70
+#define opc_invokestatic 0xb8
72
+#define opc_ifnull 0xc6
73
+#define opc_ifnonnull 0xc7
75
+#define msg_no_request 0
76
+#define msg_initialize 1
77
+#define msg_method_entry 2
78
+#define msg_method_resume 3
79
+#define msg_deopt_resume 4
80
+#define msg_deopt_resume2 5
81
+#define msg_got_monitors 6
82
+#define msg_rethrow_exception 7
83
+#define msg_call_method 8
84
+#define msg_return_from_method 9
85
+#define msg_more_monitors 10
86
+#define msg_throwing_exception 11
87
+#define msg_popping_frame 12
88
+#define msg_do_osr 13
90
+#define methodInterface 24
91
+#define volatileField 25
92
+#define vfinalMethod 26
93
+#define finalField 27
95
+#define ISTATE_JAVA_THREAD 0
96
+#define ISTATE_JAVA_PC 4
97
+#define ISTATE_JAVA_LOCALS 8
98
+#define ISTATE_CONSTANT_POOL 12
99
+#define ISTATE_JAVA_METHOD 16
100
+#define ISTATE_JAVA_MDX 20
101
+#define ISTATE_JAVA_STACK 24
102
+#define ISTATE_JAVA_MSG 28
104
+#define ISTATE_JAVA_CALL_MSG_CALLEE 32
105
+#define ISTATE_JAVA_CALL_MSG_CALLEE_ENTRY 36
106
+#define ISTATE_JAVA_CALL_MSG_BCP_ADVANCE 40
108
+#define ISTATE_JAVA_RETURN_KIND 32
122
+#define java_locals r4
123
+#define constant_pool r5
124
+#define dtos_table r6
125
+#define java_stack r7
127
+#define itos_table r9
129
+#define vtos_table r11
131
+#define PUSHNE(Rn) strne Rn, [java_stack], #-4
132
+#define PUSH(Rn) str Rn, [java_stack], #-4
133
+#define POP(Rn) ldr Rn, [java_stack, #4]!
135
+#define POPGE(Rn) ldrge Rn, [java_stack, #4]!
138
+ sub java_stack, java_stack, #8
139
+ vstr \Dn, [java_stack, #4]
143
+ vldr \Dn, [java_stack, #4]
144
+ add java_stack, java_stack, #8
147
+ .macro OpcodeEntry label
153
+ .eabi_attribute 27, 3
155
+ .eabi_attribute 20, 1
156
+ .eabi_attribute 21, 1
157
+ .eabi_attribute 23, 3
158
+ .eabi_attribute 24, 1
159
+ .eabi_attribute 25, 1
160
+ .eabi_attribute 26, 2
161
+ .eabi_attribute 30, 2
162
+ .eabi_attribute 18, 4
164
+ .global __aeabi_idiv
165
+ .global __aeabi_ldivmod
166
+ .global __aeabi_idivmod
167
+ .global __aeabi_ldivmod
168
+ .global __aeabi_l2f
169
+ .global __aeabi_l2d
171
+@ --- update_table(bool to_safe) --------------------------------------------
175
+ .global _Z21update_table_opt_safeb
176
+ .type _Z21update_table_opt_safeb, %function
177
+_Z21update_table_opt_safeb:
180
+@ ECN: A nasty hack here. We want to update the vtos, itos and dtos tables
181
+@ However, the dtos table only has one entry to be updated (opc_goto).
182
+@ This is because all other entries (ifeq, icmp_ifeq, tableswitch etc) by definition
183
+@ do not have a double on top of stack.
184
+@ dtos entries are also by definition vfp (otherwise we couldn't have a double in d0)
185
+@ Rather than creating an extra entry in each of the vfp and unsafe tables we
186
+@ just smash the single opc_goto entry here.
187
+ adrl r0, do_goto_dtos_unsafe
188
+ adrnel r0, do_goto_dtos
189
+ ldr r2, .globals_table_1
190
+ ldr r3, .globals_table_1+4
194
+ str r0, [r2, #opc_goto << 2]
195
+@ ECN: End nasty hack
197
+ adr r0, unsafe_table
198
+ addne r0, r0, #safe_table - unsafe_table
201
+ ldr r2, .globals_table_0
202
+ ldr r3, .globals_table_0+4
206
+ add r3, r2, #opclabels_data_itos-opclabels_data_vtos
212
+ strne ip, [r2, r1, lsl #2]
214
+ strne ip, [r3, r1, lsl #2]
220
+ .word _GLOBAL_OFFSET_TABLE_-(.LPIC0+8)
221
+ .word opclabels_data_vtos(GOTOFF)
224
+ .word _GLOBAL_OFFSET_TABLE_-(.LPIC1+8)
225
+ .word opclabels_data_dtos(GOTOFF)
228
+ .word opc_ifeq, do_ifeq_vtos_unsafe, do_ifeq_itos_unsafe
229
+ .word opc_ifne, do_ifne_vtos_unsafe, do_ifne_itos_unsafe
230
+ .word opc_iflt, do_iflt_vtos_unsafe, do_iflt_itos_unsafe
231
+ .word opc_ifge, do_ifge_vtos_unsafe, do_ifge_itos_unsafe
232
+ .word opc_ifgt, do_ifgt_vtos_unsafe, do_ifgt_itos_unsafe
233
+ .word opc_ifle, do_ifle_vtos_unsafe, do_ifle_itos_unsafe
235
+ .word opc_if_icmpeq, do_if_icmpeq_vtos_unsafe, do_if_icmpeq_itos_unsafe
236
+ .word opc_if_icmpne, do_if_icmpne_vtos_unsafe, do_if_icmpne_itos_unsafe
237
+ .word opc_if_icmplt, do_if_icmplt_vtos_unsafe, do_if_icmplt_itos_unsafe
238
+ .word opc_if_icmpge, do_if_icmpge_vtos_unsafe, do_if_icmpge_itos_unsafe
239
+ .word opc_if_icmpgt, do_if_icmpgt_vtos_unsafe, do_if_icmpgt_itos_unsafe
240
+ .word opc_if_icmple, do_if_icmple_vtos_unsafe, do_if_icmple_itos_unsafe
241
+ .word opc_if_acmpeq, do_if_acmpeq_vtos_unsafe, do_if_acmpeq_itos_unsafe
242
+ .word opc_if_acmpne, do_if_acmpne_vtos_unsafe, do_if_acmpne_itos_unsafe
244
+ .word opc_goto, do_goto_vtos_unsafe, do_goto_itos_unsafe
246
+ .word opc_tableswitch, do_tableswitch_vtos_unsafe, do_tableswitch_itos_unsafe
247
+ .word opc_lookupswitch, do_lookupswitch_vtos_unsafe, do_lookupswitch_itos_unsafe
249
+ .word opc_ifnull, do_ifnull_vtos_unsafe, do_ifnull_itos_unsafe
250
+ .word opc_ifnonnull, do_ifnonnull_vtos_unsafe, do_ifnonnull_itos_unsafe
255
+ .word opc_ifeq, do_ifeq_vtos, do_ifeq_itos
256
+ .word opc_ifne, do_ifne_vtos, do_ifne_itos
257
+ .word opc_iflt, do_iflt_vtos, do_iflt_itos
258
+ .word opc_ifge, do_ifge_vtos, do_ifge_itos
259
+ .word opc_ifgt, do_ifgt_vtos, do_ifgt_itos
260
+ .word opc_ifle, do_ifle_vtos, do_ifle_itos
262
+ .word opc_if_icmpeq, do_if_icmpeq_vtos, do_if_icmpeq_itos
263
+ .word opc_if_icmpne, do_if_icmpne_vtos, do_if_icmpne_itos
264
+ .word opc_if_icmplt, do_if_icmplt_vtos, do_if_icmplt_itos
265
+ .word opc_if_icmpge, do_if_icmpge_vtos, do_if_icmpge_itos
266
+ .word opc_if_icmpgt, do_if_icmpgt_vtos, do_if_icmpgt_itos
267
+ .word opc_if_icmple, do_if_icmple_vtos, do_if_icmple_itos
268
+ .word opc_if_acmpeq, do_if_acmpeq_vtos, do_if_acmpeq_itos
269
+ .word opc_if_acmpne, do_if_acmpne_vtos, do_if_acmpne_itos
271
+ .word opc_goto, do_goto_vtos, do_goto_itos
273
+ .word opc_tableswitch, do_tableswitch_vtos, do_tableswitch_itos
274
+ .word opc_lookupswitch, do_lookupswitch_vtos, do_lookupswitch_itos
276
+ .word opc_ifnull, do_ifnull_vtos, do_ifnull_itos
277
+ .word opc_ifnonnull, do_ifnonnull_vtos, do_ifnonnull_itos
282
+ .word opc_fadd, do_fadd_vtos_vfp, do_fadd_itos_vfp
283
+ .word opc_dadd, do_dadd_vtos_vfp, do_dadd_itos_vfp
284
+ .word opc_fsub, do_fsub_vtos_vfp, do_fsub_itos_vfp
285
+ .word opc_dsub, do_dsub_vtos_vfp, do_dsub_itos_vfp
286
+ .word opc_fmul, do_fmul_vtos_vfp, do_fmul_itos_vfp
287
+ .word opc_dmul, do_dmul_vtos_vfp, do_dmul_itos_vfp
288
+ .word opc_fdiv, do_fdiv_vtos_vfp, do_fdiv_itos_vfp
289
+ .word opc_ddiv, do_ddiv_vtos_vfp, do_ddiv_itos_vfp
290
+ .word opc_i2f, do_i2f_vtos_vfp, do_i2f_itos_vfp
291
+ .word opc_i2d, do_i2d_vtos_vfp, do_i2d_itos_vfp
292
+ .word opc_f2d, do_f2d_vtos_vfp, do_f2d_itos_vfp
293
+ .word opc_d2f, do_d2f_vtos_vfp, do_d2f_itos_vfp
294
+ .word opc_fcmpl, do_fcmpl_vtos_vfp, do_fcmpl_itos_vfp
295
+ .word opc_fcmpg, do_fcmpg_vtos_vfp, do_fcmpg_itos_vfp
296
+ .word opc_dcmpl, do_dcmpl_vtos_vfp, do_dcmpl_itos_vfp
297
+ .word opc_dcmpg, do_dcmpg_vtos_vfp, do_dcmpg_itos_vfp
301
+ .ascii "/proc/self/auxv\000"
305
+ .type vfp_init, %function
307
+ stmfd sp!, {r4, r5, lr}
310
+ adr r0, proc_self_auxv
315
+.vfp_init_read_loop:
324
+ ldmia r2!, {r1, ip}
334
+ bpl .vfp_init_vec_loop
336
+ beq .vfp_init_read_loop
343
+ ldmfd sp!, {r4, r5, lr}
344
+ adrne r0, vfp_table
345
+ bne do_update_table
347
+ .size vfp_init, .-vfp_init
349
+ .section .init_array,"aw",%init_array
350
+ .word vfp_init(target1)
354
+opclabels_data_vtos:
356
+ .word do_aconst_null_vtos
357
+ .word do_iconst_m1_vtos
358
+ .word do_iconst_0_vtos
359
+ .word do_iconst_1_vtos
360
+ .word do_iconst_2_vtos
361
+ .word do_iconst_3_vtos
362
+ .word do_iconst_4_vtos
363
+ .word do_iconst_5_vtos
364
+ .word do_lconst_0_vtos
365
+ .word do_lconst_1_vtos
366
+ .word do_fconst_0_vtos
367
+ .word do_fconst_1_vtos
368
+ .word do_fconst_2_vtos
369
+ .word do_dconst_0_vtos
370
+ .word do_dconst_1_vtos
371
+ .word do_bipush_vtos
372
+ .word do_sipush_vtos
374
+ .word do_ldc_w_vtos
375
+ .word do_ldc2_w_vtos
376
+ .word do_iload_vtos
377
+ .word do_lload_vtos
378
+ .word do_fload_vtos
379
+ .word do_dload_vtos
380
+ .word do_aload_vtos
381
+ .word do_iload_0_vtos
382
+ .word do_iload_1_vtos
383
+ .word do_iload_2_vtos
384
+ .word do_iload_3_vtos
385
+ .word do_lload_0_vtos
386
+ .word do_lload_1_vtos
387
+ .word do_lload_2_vtos
388
+ .word do_lload_3_vtos
389
+ .word do_fload_0_vtos
390
+ .word do_fload_1_vtos
391
+ .word do_fload_2_vtos
392
+ .word do_fload_3_vtos
393
+ .word do_dload_0_vtos
394
+ .word do_dload_1_vtos
395
+ .word do_dload_2_vtos
396
+ .word do_dload_3_vtos
397
+ .word do_aload_0_vtos
398
+ .word do_aload_1_vtos
399
+ .word do_aload_2_vtos
400
+ .word do_aload_3_vtos
401
+ .word do_iaload_vtos
402
+ .word do_laload_vtos
403
+ .word do_faload_vtos
404
+ .word do_daload_vtos
405
+ .word do_aaload_vtos
406
+ .word do_baload_vtos
407
+ .word do_caload_vtos
408
+ .word do_saload_vtos
409
+ .word do_istore_vtos
410
+ .word do_lstore_vtos
411
+ .word do_fstore_vtos
412
+ .word do_dstore_vtos
413
+ .word do_astore_vtos
414
+ .word do_istore_0_vtos
415
+ .word do_istore_1_vtos
416
+ .word do_istore_2_vtos
417
+ .word do_istore_3_vtos
418
+ .word do_lstore_0_vtos
419
+ .word do_lstore_1_vtos
420
+ .word do_lstore_2_vtos
421
+ .word do_lstore_3_vtos
422
+ .word do_fstore_0_vtos
423
+ .word do_fstore_1_vtos
424
+ .word do_fstore_2_vtos
425
+ .word do_fstore_3_vtos
426
+ .word do_dstore_0_vtos
427
+ .word do_dstore_1_vtos
428
+ .word do_dstore_2_vtos
429
+ .word do_dstore_3_vtos
430
+ .word do_astore_0_vtos
431
+ .word do_astore_1_vtos
432
+ .word do_astore_2_vtos
433
+ .word do_astore_3_vtos
434
+ .word do_iastore_vtos
435
+ .word do_lastore_vtos
436
+ .word do_fastore_vtos
437
+ .word do_dastore_vtos
438
+ .word do_aastore_vtos
439
+ .word do_bastore_vtos
440
+ .word do_castore_vtos
441
+ .word do_sastore_vtos
445
+ .word do_dup_x1_vtos
446
+ .word do_dup_x2_vtos
448
+ .word do_dup2_x1_vtos
449
+ .word do_dup2_x2_vtos
479
+ .word do_iushr_vtos
480
+ .word do_lushr_vtos
504
+ .word do_fcmpl_vtos
505
+ .word do_fcmpg_vtos
506
+ .word do_dcmpl_vtos
507
+ .word do_dcmpg_vtos
508
+ .word do_ifeq_vtos_unsafe
509
+ .word do_ifne_vtos_unsafe
510
+ .word do_iflt_vtos_unsafe
511
+ .word do_ifge_vtos_unsafe
512
+ .word do_ifgt_vtos_unsafe
513
+ .word do_ifle_vtos_unsafe
514
+ .word do_if_icmpeq_vtos_unsafe
515
+ .word do_if_icmpne_vtos_unsafe
516
+ .word do_if_icmplt_vtos_unsafe
517
+ .word do_if_icmpge_vtos_unsafe
518
+ .word do_if_icmpgt_vtos_unsafe
519
+ .word do_if_icmple_vtos_unsafe
520
+ .word do_if_acmpeq_vtos_unsafe
521
+ .word do_if_acmpne_vtos_unsafe
522
+ .word do_goto_vtos_unsafe
525
+ .word do_tableswitch_vtos_unsafe
526
+ .word do_lookupswitch_vtos_unsafe
527
+ .word do_ireturn_vtos
528
+ .word do_lreturn_vtos
529
+ .word do_freturn_vtos
530
+ .word do_dreturn_vtos
531
+ .word do_areturn_vtos
532
+ .word do_return_vtos
533
+ .word do_getstatic_vtos
534
+ .word do_putstatic_vtos
535
+ .word do_getfield_vtos
536
+ .word do_putfield_vtos
537
+ .word do_invokevirtual_vtos
538
+ .word do_invokespecial_vtos
539
+ .word do_invokestatic_vtos
540
+ .word do_invokeinterface_vtos
541
+ .word do_xxxunusedxxx_vtos
543
+ .word do_newarray_vtos
544
+ .word do_anewarray_vtos
545
+ .word do_arraylength_vtos
546
+ .word do_athrow_vtos
547
+ .word do_checkcast_vtos
548
+ .word do_instanceof_vtos
549
+ .word do_monitorenter_vtos
550
+ .word do_monitorexit_vtos
552
+ .word do_multianewarray_vtos
553
+ .word do_ifnull_vtos_unsafe
554
+ .word do_ifnonnull_vtos_unsafe
555
+ .word do_goto_w_vtos
556
+ .word do_jsr_w_vtos
557
+ .word do_breakpoint_vtos
558
+ .word do_exit_asm_vtos
559
+ .word do_exit_asm_vtos
560
+ .word do_exit_asm_vtos
561
+ .word do_exit_asm_vtos
562
+ .word do_exit_asm_vtos
563
+ .word do_exit_asm_vtos
564
+ .word do_exit_asm_vtos
565
+ .word do_exit_asm_vtos
566
+ .word do_exit_asm_vtos
567
+ .word do_exit_asm_vtos
568
+ .word do_exit_asm_vtos
569
+ .word do_exit_asm_vtos
570
+ .word do_exit_asm_vtos
571
+ .word do_exit_asm_vtos
572
+ .word do_exit_asm_vtos
573
+ .word do_exit_asm_vtos
574
+ .word do_exit_asm_vtos
575
+ .word do_exit_asm_vtos
576
+ .word do_exit_asm_vtos
577
+ .word do_exit_asm_vtos
578
+ .word do_exit_asm_vtos
579
+ .word do_exit_asm_vtos
580
+ .word do_exit_asm_vtos
581
+ .word do_exit_asm_vtos
582
+ .word do_exit_asm_vtos
583
+ .word do_exit_asm_vtos
584
+ .word do_exit_asm_vtos
585
+ .word do_exit_asm_vtos
586
+ .word do_exit_asm_vtos
587
+ .word do_exit_asm_vtos
588
+ .word do_exit_asm_vtos
589
+ .word do_exit_asm_vtos
590
+ .word do_exit_asm_vtos
591
+ .word do_exit_asm_vtos
592
+ .word do_exit_asm_vtos
593
+ .word do_exit_asm_vtos
594
+ .word do_exit_asm_vtos
595
+ .word do_exit_asm_vtos
596
+ .word do_exit_asm_vtos
597
+ .word do_exit_asm_vtos
598
+ .word do_exit_asm_vtos
599
+ .word do_exit_asm_vtos
600
+ .word do_exit_asm_vtos
601
+ .word do_exit_asm_vtos
602
+ .word do_exit_asm_vtos
603
+ .word do_exit_asm_vtos
604
+ .word do_exit_asm_vtos
605
+ .word do_exit_asm_vtos
606
+ .word do_exit_asm_vtos
607
+ .word do_exit_asm_vtos
608
+ .word do_exit_asm_vtos
609
+ .word do_exit_asm_vtos
610
+ .word do_exit_asm_vtos
611
+opclabels_data_itos:
613
+ .word do_aconst_null_itos
614
+ .word do_iconst_m1_itos
615
+ .word do_iconst_0_itos
616
+ .word do_iconst_1_itos
617
+ .word do_iconst_2_itos
618
+ .word do_iconst_3_itos
619
+ .word do_iconst_4_itos
620
+ .word do_iconst_5_itos
621
+ .word do_lconst_0_itos
622
+ .word do_lconst_1_itos
623
+ .word do_fconst_0_itos
624
+ .word do_fconst_1_itos
625
+ .word do_fconst_2_itos
626
+ .word do_dconst_0_itos
627
+ .word do_dconst_1_itos
628
+ .word do_bipush_itos
629
+ .word do_sipush_itos
631
+ .word do_ldc_w_itos
632
+ .word do_ldc2_w_itos
633
+ .word do_iload_itos
634
+ .word do_lload_itos
635
+ .word do_fload_itos
636
+ .word do_dload_itos
637
+ .word do_aload_itos
638
+ .word do_iload_0_itos
639
+ .word do_iload_1_itos
640
+ .word do_iload_2_itos
641
+ .word do_iload_3_itos
642
+ .word do_lload_0_itos
643
+ .word do_lload_1_itos
644
+ .word do_lload_2_itos
645
+ .word do_lload_3_itos
646
+ .word do_fload_0_itos
647
+ .word do_fload_1_itos
648
+ .word do_fload_2_itos
649
+ .word do_fload_3_itos
650
+ .word do_dload_0_itos
651
+ .word do_dload_1_itos
652
+ .word do_dload_2_itos
653
+ .word do_dload_3_itos
654
+ .word do_aload_0_itos
655
+ .word do_aload_1_itos
656
+ .word do_aload_2_itos
657
+ .word do_aload_3_itos
658
+ .word do_iaload_itos
659
+ .word do_laload_itos
660
+ .word do_faload_itos
661
+ .word do_daload_itos
662
+ .word do_aaload_itos
663
+ .word do_baload_itos
664
+ .word do_caload_itos
665
+ .word do_saload_itos
666
+ .word do_istore_itos
667
+ .word do_lstore_itos
668
+ .word do_fstore_itos
669
+ .word do_dstore_itos
670
+ .word do_astore_itos
671
+ .word do_istore_0_itos
672
+ .word do_istore_1_itos
673
+ .word do_istore_2_itos
674
+ .word do_istore_3_itos
675
+ .word do_lstore_0_itos
676
+ .word do_lstore_1_itos
677
+ .word do_lstore_2_itos
678
+ .word do_lstore_3_itos
679
+ .word do_fstore_0_itos
680
+ .word do_fstore_1_itos
681
+ .word do_fstore_2_itos
682
+ .word do_fstore_3_itos
683
+ .word do_dstore_0_itos
684
+ .word do_dstore_1_itos
685
+ .word do_dstore_2_itos
686
+ .word do_dstore_3_itos
687
+ .word do_astore_0_itos
688
+ .word do_astore_1_itos
689
+ .word do_astore_2_itos
690
+ .word do_astore_3_itos
691
+ .word do_iastore_itos
692
+ .word do_lastore_itos
693
+ .word do_fastore_itos
694
+ .word do_dastore_itos
695
+ .word do_aastore_itos
696
+ .word do_bastore_itos
697
+ .word do_castore_itos
698
+ .word do_sastore_itos
702
+ .word do_dup_x1_itos
703
+ .word do_dup_x2_itos
705
+ .word do_dup2_x1_itos
706
+ .word do_dup2_x2_itos
736
+ .word do_iushr_itos
737
+ .word do_lushr_itos
761
+ .word do_fcmpl_itos
762
+ .word do_fcmpg_itos
763
+ .word do_dcmpl_itos
764
+ .word do_dcmpg_itos
765
+ .word do_ifeq_itos_unsafe
766
+ .word do_ifne_itos_unsafe
767
+ .word do_iflt_itos_unsafe
768
+ .word do_ifge_itos_unsafe
769
+ .word do_ifgt_itos_unsafe
770
+ .word do_ifle_itos_unsafe
771
+ .word do_if_icmpeq_itos_unsafe
772
+ .word do_if_icmpne_itos_unsafe
773
+ .word do_if_icmplt_itos_unsafe
774
+ .word do_if_icmpge_itos_unsafe
775
+ .word do_if_icmpgt_itos_unsafe
776
+ .word do_if_icmple_itos_unsafe
777
+ .word do_if_acmpeq_itos_unsafe
778
+ .word do_if_acmpne_itos_unsafe
779
+ .word do_goto_itos_unsafe
782
+ .word do_tableswitch_itos_unsafe
783
+ .word do_lookupswitch_itos_unsafe
784
+ .word do_ireturn_itos
785
+ .word do_lreturn_itos
786
+ .word do_freturn_itos
787
+ .word do_dreturn_itos
788
+ .word do_areturn_itos
789
+ .word do_return_itos
790
+ .word do_getstatic_itos
791
+ .word do_putstatic_itos
792
+ .word do_getfield_itos
793
+ .word do_putfield_itos
794
+ .word do_invokevirtual_itos
795
+ .word do_invokespecial_itos
796
+ .word do_invokestatic_itos
797
+ .word do_invokeinterface_itos
798
+ .word do_xxxunusedxxx_itos
800
+ .word do_newarray_itos
801
+ .word do_anewarray_itos
802
+ .word do_arraylength_itos
803
+ .word do_athrow_itos
804
+ .word do_checkcast_itos
805
+ .word do_instanceof_itos
806
+ .word do_monitorenter_itos
807
+ .word do_monitorexit_itos
809
+ .word do_multianewarray_itos
810
+ .word do_ifnull_itos_unsafe
811
+ .word do_ifnonnull_itos_unsafe
812
+ .word do_goto_w_itos
813
+ .word do_jsr_w_itos
814
+ .word do_breakpoint_itos
815
+ .word do_exit_asm_itos
816
+ .word do_exit_asm_itos
817
+ .word do_exit_asm_itos
818
+ .word do_exit_asm_itos
819
+ .word do_exit_asm_itos
820
+ .word do_exit_asm_itos
821
+ .word do_exit_asm_itos
822
+ .word do_exit_asm_itos
823
+ .word do_exit_asm_itos
824
+ .word do_exit_asm_itos
825
+ .word do_exit_asm_itos
826
+ .word do_exit_asm_itos
827
+ .word do_exit_asm_itos
828
+ .word do_exit_asm_itos
829
+ .word do_exit_asm_itos
830
+ .word do_exit_asm_itos
831
+ .word do_exit_asm_itos
832
+ .word do_exit_asm_itos
833
+ .word do_exit_asm_itos
834
+ .word do_exit_asm_itos
835
+ .word do_exit_asm_itos
836
+ .word do_exit_asm_itos
837
+ .word do_exit_asm_itos
838
+ .word do_exit_asm_itos
839
+ .word do_exit_asm_itos
840
+ .word do_exit_asm_itos
841
+ .word do_exit_asm_itos
842
+ .word do_exit_asm_itos
843
+ .word do_exit_asm_itos
844
+ .word do_exit_asm_itos
845
+ .word do_exit_asm_itos
846
+ .word do_exit_asm_itos
847
+ .word do_exit_asm_itos
848
+ .word do_exit_asm_itos
849
+ .word do_exit_asm_itos
850
+ .word do_exit_asm_itos
851
+ .word do_exit_asm_itos
852
+ .word do_exit_asm_itos
853
+ .word do_exit_asm_itos
854
+ .word do_exit_asm_itos
855
+ .word do_exit_asm_itos
856
+ .word do_exit_asm_itos
857
+ .word do_exit_asm_itos
858
+ .word do_exit_asm_itos
859
+ .word do_exit_asm_itos
860
+ .word do_exit_asm_itos
861
+ .word do_exit_asm_itos
862
+ .word do_exit_asm_itos
863
+ .word do_exit_asm_itos
864
+ .word do_exit_asm_itos
865
+ .word do_exit_asm_itos
866
+ .word do_exit_asm_itos
867
+ .word do_exit_asm_itos
868
+opclabels_data_dtos:
870
+ .word do_aconst_null_dtos
871
+ .word do_iconst_m1_dtos
872
+ .word do_iconst_0_dtos
873
+ .word do_iconst_1_dtos
874
+ .word do_iconst_2_dtos
875
+ .word do_iconst_3_dtos
876
+ .word do_iconst_4_dtos
877
+ .word do_iconst_5_dtos
878
+ .word do_lconst_0_dtos
879
+ .word do_lconst_1_dtos
880
+ .word do_fconst_0_dtos
881
+ .word do_fconst_1_dtos
882
+ .word do_fconst_2_dtos
883
+ .word do_dconst_0_dtos
884
+ .word do_dconst_1_dtos
885
+ .word do_bipush_dtos
886
+ .word do_sipush_dtos
888
+ .word do_ldc_w_dtos
889
+ .word do_ldc2_w_dtos
890
+ .word do_iload_dtos
891
+ .word do_lload_dtos
892
+ .word do_fload_dtos
893
+ .word do_dload_dtos
894
+ .word do_aload_dtos
895
+ .word do_iload_0_dtos
896
+ .word do_iload_1_dtos
897
+ .word do_iload_2_dtos
898
+ .word do_iload_3_dtos
899
+ .word do_lload_0_dtos
900
+ .word do_lload_1_dtos
901
+ .word do_lload_2_dtos
902
+ .word do_lload_3_dtos
903
+ .word do_fload_0_dtos
904
+ .word do_fload_1_dtos
905
+ .word do_fload_2_dtos
906
+ .word do_fload_3_dtos
907
+ .word do_dload_0_dtos
908
+ .word do_dload_1_dtos
909
+ .word do_dload_2_dtos
910
+ .word do_dload_3_dtos
911
+ .word do_aload_0_dtos
912
+ .word do_aload_1_dtos
913
+ .word do_aload_2_dtos
914
+ .word do_aload_3_dtos
915
+ .word do_iaload_dtos
916
+ .word do_laload_dtos
917
+ .word do_faload_dtos
918
+ .word do_daload_dtos
919
+ .word do_aaload_dtos
920
+ .word do_baload_dtos
921
+ .word do_caload_dtos
922
+ .word do_saload_dtos
923
+ .word do_istore_dtos
924
+ .word do_lstore_dtos
925
+ .word do_fstore_dtos
926
+ .word do_dstore_dtos
927
+ .word do_astore_dtos
928
+ .word do_istore_0_dtos
929
+ .word do_istore_1_dtos
930
+ .word do_istore_2_dtos
931
+ .word do_istore_3_dtos
932
+ .word do_lstore_0_dtos
933
+ .word do_lstore_1_dtos
934
+ .word do_lstore_2_dtos
935
+ .word do_lstore_3_dtos
936
+ .word do_fstore_0_dtos
937
+ .word do_fstore_1_dtos
938
+ .word do_fstore_2_dtos
939
+ .word do_fstore_3_dtos
940
+ .word do_dstore_0_dtos
941
+ .word do_dstore_1_dtos
942
+ .word do_dstore_2_dtos
943
+ .word do_dstore_3_dtos
944
+ .word do_astore_0_dtos
945
+ .word do_astore_1_dtos
946
+ .word do_astore_2_dtos
947
+ .word do_astore_3_dtos
948
+ .word do_iastore_dtos
949
+ .word do_lastore_dtos
950
+ .word do_fastore_dtos
951
+ .word do_dastore_dtos
952
+ .word do_aastore_dtos
953
+ .word do_bastore_dtos
954
+ .word do_castore_dtos
955
+ .word do_sastore_dtos
959
+ .word do_dup_x1_dtos
960
+ .word do_dup_x2_dtos
962
+ .word do_dup2_x1_dtos
963
+ .word do_dup2_x2_dtos
993
+ .word do_iushr_dtos
994
+ .word do_lushr_dtos
1000
+ .word do_lxor_dtos
1001
+ .word do_iinc_dtos
1017
+ .word do_lcmp_dtos
1018
+ .word do_fcmpl_dtos
1019
+ .word do_fcmpg_dtos
1020
+ .word do_dcmpl_dtos
1021
+ .word do_dcmpg_dtos
1022
+ .word do_ifeq_dtos
1023
+ .word do_ifne_dtos
1024
+ .word do_iflt_dtos
1025
+ .word do_ifge_dtos
1026
+ .word do_ifgt_dtos
1027
+ .word do_ifle_dtos
1028
+ .word do_if_icmpeq_dtos
1029
+ .word do_if_icmpne_dtos
1030
+ .word do_if_icmplt_dtos
1031
+ .word do_if_icmpge_dtos
1032
+ .word do_if_icmpgt_dtos
1033
+ .word do_if_icmple_dtos
1034
+ .word do_if_acmpeq_dtos
1035
+ .word do_if_acmpne_dtos
1036
+ .word do_goto_dtos
1039
+ .word do_tableswitch_dtos
1040
+ .word do_lookupswitch_dtos
1041
+ .word do_ireturn_dtos
1042
+ .word do_lreturn_dtos
1043
+ .word do_freturn_dtos
1044
+ .word do_dreturn_dtos
1045
+ .word do_areturn_dtos
1046
+ .word do_return_dtos
1047
+ .word do_getstatic_dtos
1048
+ .word do_putstatic_dtos
1049
+ .word do_getfield_dtos
1050
+ .word do_putfield_dtos
1051
+ .word do_invokevirtual_dtos
1052
+ .word do_invokespecial_dtos
1053
+ .word do_invokestatic_dtos
1054
+ .word do_invokeinterface_dtos
1055
+ .word do_xxxunusedxxx_dtos
1057
+ .word do_newarray_dtos
1058
+ .word do_anewarray_dtos
1059
+ .word do_arraylength_dtos
1060
+ .word do_athrow_dtos
1061
+ .word do_checkcast_dtos
1062
+ .word do_instanceof_dtos
1063
+ .word do_monitorenter_dtos
1064
+ .word do_monitorexit_dtos
1065
+ .word do_wide_dtos
1066
+ .word do_multianewarray_dtos
1067
+ .word do_ifnull_dtos
1068
+ .word do_ifnonnull_dtos
1069
+ .word do_goto_w_dtos
1070
+ .word do_jsr_w_dtos
1071
+ .word do_breakpoint_dtos
1072
+ .word do_exit_asm_dtos
1073
+ .word do_exit_asm_dtos
1074
+ .word do_exit_asm_dtos
1075
+ .word do_exit_asm_dtos
1076
+ .word do_exit_asm_dtos
1077
+ .word do_exit_asm_dtos
1078
+ .word do_exit_asm_dtos
1079
+ .word do_exit_asm_dtos
1080
+ .word do_exit_asm_dtos
1081
+ .word do_exit_asm_dtos
1082
+ .word do_exit_asm_dtos
1083
+ .word do_exit_asm_dtos
1084
+ .word do_exit_asm_dtos
1085
+ .word do_exit_asm_dtos
1086
+ .word do_exit_asm_dtos
1087
+ .word do_exit_asm_dtos
1088
+ .word do_exit_asm_dtos
1089
+ .word do_exit_asm_dtos
1090
+ .word do_exit_asm_dtos
1091
+ .word do_exit_asm_dtos
1092
+ .word do_exit_asm_dtos
1093
+ .word do_exit_asm_dtos
1094
+ .word do_exit_asm_dtos
1095
+ .word do_exit_asm_dtos
1096
+ .word do_exit_asm_dtos
1097
+ .word do_exit_asm_dtos
1098
+ .word do_exit_asm_dtos
1099
+ .word do_exit_asm_dtos
1100
+ .word do_exit_asm_dtos
1101
+ .word do_exit_asm_dtos
1102
+ .word do_exit_asm_dtos
1103
+ .word do_exit_asm_dtos
1104
+ .word do_exit_asm_dtos
1105
+ .word do_exit_asm_dtos
1106
+ .word do_exit_asm_dtos
1107
+ .word do_exit_asm_dtos
1108
+ .word do_exit_asm_dtos
1109
+ .word do_exit_asm_dtos
1110
+ .word do_exit_asm_dtos
1111
+ .word do_exit_asm_dtos
1112
+ .word do_exit_asm_dtos
1113
+ .word do_exit_asm_dtos
1114
+ .word do_exit_asm_dtos
1115
+ .word do_exit_asm_dtos
1116
+ .word do_exit_asm_dtos
1117
+ .word do_exit_asm_dtos
1118
+ .word do_exit_asm_dtos
1119
+ .word do_exit_asm_dtos
1120
+ .word do_exit_asm_dtos
1121
+ .word do_exit_asm_dtos
1122
+ .word do_exit_asm_dtos
1123
+ .word do_exit_asm_dtos
1124
+ .word do_exit_asm_dtos
1126
+@ ---- run_opt --------------------------------------------------------------
1129
+ .global _ZN19BytecodeInterpreter7run_optEPS_
1130
+ .type _ZN19BytecodeInterpreter7run_optEPS_, %function
1131
+_ZN19BytecodeInterpreter7run_optEPS_:
1132
+ @ args = 0, pretend = 0, frame = 40
1133
+ @ frame_needed = 0, uses_anonymous_args = 0
1134
+@ --- run_opt_entry -------------------------------------------------
1135
+ OpcodeEntry run_opt_entry
1136
+ stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
1138
+ ldr java_pc, [istate, #ISTATE_JAVA_PC]
1139
+ ldr r9, .globals_table
1140
+ ldrb r2, [java_pc, #0]
1141
+ ldr java_stack, [istate, #ISTATE_JAVA_STACK]
1143
+ add r9, pc, r9 @ Don't move this instruction from the .pic_location label
1144
+ ldr r0, .globals_table+4
1145
+ ldr java_locals, [istate, #ISTATE_JAVA_LOCALS]
1146
+ ldr constant_pool, [istate, #ISTATE_CONSTANT_POOL]
1147
+ add vtos_table, r9, r0
1148
+ ldr r2, [vtos_table, r2, asl #2]
1149
+ add itos_table, vtos_table, #opclabels_data_itos - opclabels_data_vtos
1150
+ add dtos_table, vtos_table, #opclabels_data_dtos - opclabels_data_vtos
1155
+ .word _GLOBAL_OFFSET_TABLE_-(.pic_location+8)
1156
+ .word opclabels_data_vtos(GOTOFF)
1158
+@ ----- The Bytecode Implementations --------------------------------------
1160
+@ --- do_getfield_vtos -------------------------------------------------
1161
+ OpcodeEntry do_getfield_vtos
1163
+@ --- do_getfield_itos -------------------------------------------------
1164
+ OpcodeEntry do_getfield_itos
1165
+ ldrb r3, [java_pc,#1]
1166
+ ldrb r2, [java_pc,#2]
1167
+ ldrb ip, [java_pc,#3]!
1168
+ orr r3, r3, r2, lsl #8
1169
+ add r1, constant_pool, #16
1170
+ ldr r3, [r1, r3, lsl #4]! @ r1 = cache
1171
+ ldr ip, [itos_table, ip, asl #2]
1172
+ and r3, r3, #0x00ff0000
1173
+ cmp r3, #180 << 16
1174
+ bne .exit_getfield
1176
+ beq .exit_getfield
1179
+ movs r2, r2, lsr #29
1180
+ ldrhi tos, [r3, lr] @ C = 1, Z = 0 => R2 == 3, 5, 7
1181
+ movhi pc, ip @ early exit for word accesses
1182
+ ldreqsb tos, [r3, lr] @ Z = 1 => R2 = 0, 1
1183
+ ldrcsh tos, [r3, lr] @ C = 1 => R2 = 1 (overwrites previous load)
1187
+ ldmneia r3, {r0, r1} @ 4, 6
1190
+ ldrsh tos, [r3, lr] @ 2
1193
+@ --- do_putstatic_dtos -------------------------------------------------
1194
+ OpcodeEntry do_putstatic_dtos
1196
+ b do_putstatic_vtos
1197
+@ --- do_putstatic_vtos -------------------------------------------------
1198
+ OpcodeEntry do_putstatic_vtos
1200
+@ --- do_putstatic_itos -------------------------------------------------
1201
+ OpcodeEntry do_putstatic_itos
1202
+ ldrb r3, [java_pc,#1]
1203
+ ldrb r2, [java_pc,#2]
1204
+ ldrb ip, [java_pc,#3]!
1205
+ orr r3, r3, r2, lsl #8
1206
+ add r1, constant_pool, #16
1207
+ ldr r3, [r1, r3, lsl #4]! @ r1 = cache
1208
+ ldr ip, [vtos_table, ip, asl #2]
1209
+ and r3, r3, #0xff000000
1210
+ cmp r3, #179 << 24
1211
+ bne .exit_putstatic_1
1212
+ ldr r3, [r1, #4] @ r3 = object
1213
+ ldr r2, [r1, #12] @ r2 = tos_type
1214
+ ldr lr, [r1, #8] @ lr = offset
1215
+ mov r2, r2, lsr #28
1217
+ beq .exit_putstatic_1 @ atos - let main loop handle it
1219
+ cmpne r2, #tos_dtos
1220
+ beq do_putstatic_1 @ ltos or dtos
1222
+ strcs tos, [r3, lr] @ itos or ftos
1225
+ strcsh tos, [r3, lr] @ ctos or stos
1226
+ strccb tos, [r3, lr] @ btos
1231
+ stmia r3, {r0, r1}
1234
+@ --- do_putfield_dtos -------------------------------------------------
1235
+ OpcodeEntry do_putfield_dtos
1237
+ b do_putfield_vtos
1238
+@ --- do_putfield_vtos -------------------------------------------------
1239
+ OpcodeEntry do_putfield_vtos
1241
+@ --- do_putfield_itos -------------------------------------------------
1242
+ OpcodeEntry do_putfield_itos
1243
+ ldrb r3, [java_pc,#1]
1244
+ ldrb r2, [java_pc,#2]
1245
+ ldrb ip, [java_pc,#3]!
1246
+ orr r3, r3, r2, lsl #8
1247
+ add r1, constant_pool, #16
1248
+ ldr r3, [r1, r3, lsl #4]! @ r1 = cache
1249
+ ldr ip, [vtos_table, ip, asl #2]
1250
+ and r3, r3, #0xff000000
1251
+ cmp r3, #181 << 24
1252
+ bne .exit_putfield_1
1253
+ ldr r2, [r1, #12] @ r2 = tos_type
1254
+ ldr lr, [r1, #8] @ lr = offset
1255
+ mov r2, r2, lsr #28
1257
+ beq .exit_putfield_1 @ atos - let main loop handle it
1259
+ cmpne r2, #tos_dtos
1260
+ beq do_putfield_1 @ ltos or dtos
1263
+ beq .exit_putfield_2
1265
+ strcs tos, [r3, lr] @ itos or ftos
1268
+ strcsh tos, [r3, lr] @ ctos or stos
1269
+ strccb tos, [r3, lr] @ btos
1275
+ beq .exit_putfield_3
1277
+ stmia r3, {r0, r1}
1280
+@ --- do_invokestatic_dtos -------------------------------------------------
1281
+ OpcodeEntry do_invokestatic_dtos
1283
+ b do_invokestatic_vtos
1284
+@ --- do_invokestatic_itos -------------------------------------------------
1285
+ OpcodeEntry do_invokestatic_itos
1287
+@ --- do_invokestatic_vtos -------------------------------------------------
1288
+ OpcodeEntry do_invokestatic_vtos
1289
+ ldrb r3, [java_pc, #2] @ zero_extendqisi2
1290
+ ldrb r2, [java_pc, #1] @ zero_extendqisi2
1291
+ add r1, constant_pool, #16
1292
+ orr r2, r2, r3, asl #8
1293
+ ldr r3, [r1, r2, lsl #4]!
1294
+ and r3, r3, #0x00ff0000
1295
+ cmp r3, #opc_invokestatic << 16
1298
+ mov ip, #msg_call_method
1299
+ str r2, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE]
1301
+ str ip, [istate, #ISTATE_JAVA_MSG]
1302
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE_ENTRY]
1304
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_BCP_ADVANCE]
1305
+ str java_pc, [istate, #ISTATE_JAVA_PC]
1306
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
1308
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1310
+@ --- do_invokevirtual_dtos -------------------------------------------------
1311
+ OpcodeEntry do_invokevirtual_dtos
1313
+ b do_invokevirtual_vtos
1314
+@ --- do_invokevirtual_itos -------------------------------------------------
1315
+ OpcodeEntry do_invokevirtual_itos
1317
+@ --- do_invokevirtual_vtos -------------------------------------------------
1318
+ OpcodeEntry do_invokevirtual_vtos
1319
+ ldrb r3, [java_pc, #2] @ zero_extendqisi2
1320
+ ldrb r2, [java_pc, #1] @ zero_extendqisi2
1321
+ add r1, constant_pool, #16
1322
+ orr r2, r2, r3, asl #8
1323
+ ldr r3, [r1, r2, lsl #4]!
1324
+ and r3, r3, #0xff000000
1325
+ cmp r3, #opc_invokevirtual << 24
1329
+ ldr r2, [java_stack, r2, asl #2]
1332
+ tst r3, #1 << vfinalMethod
1334
+ ldreq r3, [r2, #4]
1335
+ mov ip, #msg_call_method
1336
+ addeq r3, r3, r0, asl #2
1337
+ ldreq r0, [r3, #304]
1338
+ str ip, [istate, #ISTATE_JAVA_MSG]
1340
+ str r0, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE]
1341
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE_ENTRY]
1342
+ str java_pc, [istate, #ISTATE_JAVA_PC]
1344
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_BCP_ADVANCE]
1345
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
1347
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1349
+@ --- do_invokespecial_dtos -------------------------------------------------
1350
+ OpcodeEntry do_invokespecial_dtos
1352
+ b do_invokespecial_vtos
1353
+@ --- do_invokespecial_itos -------------------------------------------------
1354
+ OpcodeEntry do_invokespecial_itos
1356
+@ --- do_invokespecial_vtos -------------------------------------------------
1357
+ OpcodeEntry do_invokespecial_vtos
1358
+ ldrb r3, [java_pc, #2] @ zero_extendqisi2
1359
+ ldrb r2, [java_pc, #1] @ zero_extendqisi2
1360
+ add r1, constant_pool, #16
1361
+ orr r2, r2, r3, asl #8
1362
+ ldr r3, [r1, r2, lsl #4]!
1363
+ and r3, r3, #0x00ff0000
1364
+ cmp r3, #opc_invokespecial << 24
1368
+ ldr r2, [java_stack, r2, asl #2]
1372
+ mov ip, #msg_call_method
1373
+ str r2, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE]
1375
+ str ip, [istate, #ISTATE_JAVA_MSG]
1376
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_CALLEE_ENTRY]
1378
+ str r3, [istate, #ISTATE_JAVA_CALL_MSG_BCP_ADVANCE]
1379
+ str java_pc, [istate, #ISTATE_JAVA_PC]
1380
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
1382
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1384
+ OpcodeEntry do_ireturn_dtos
1385
+ OpcodeEntry do_lreturn_dtos
1386
+ OpcodeEntry do_freturn_dtos
1387
+ OpcodeEntry do_dreturn_dtos
1388
+ OpcodeEntry do_areturn_dtos
1389
+ OpcodeEntry do_return_dtos
1392
+ OpcodeEntry do_ireturn_itos
1393
+ OpcodeEntry do_lreturn_itos
1394
+ OpcodeEntry do_freturn_itos
1395
+ OpcodeEntry do_dreturn_itos
1396
+ OpcodeEntry do_areturn_itos
1397
+ OpcodeEntry do_return_itos
1399
+ OpcodeEntry do_ireturn_vtos
1400
+ OpcodeEntry do_lreturn_vtos
1401
+ OpcodeEntry do_freturn_vtos
1402
+ OpcodeEntry do_dreturn_vtos
1403
+ OpcodeEntry do_areturn_vtos
1404
+ OpcodeEntry do_return_vtos
1405
+ ldr r0, [istate, #ISTATE_JAVA_THREAD]
1406
+ ldr r2, [istate, #52]
1408
+ ldr r3, [istate, #60]
1413
+ bcc .exit_asm @ CC => r3 > r2 => r2 = end
1415
+ ldrb ip, [java_pc], #1
1416
+ mov r2, #msg_return_from_method
1417
+ str java_pc, [istate, #ISTATE_JAVA_PC]
1418
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
1419
+ str r2, [istate, #ISTATE_JAVA_MSG]
1420
+ str ip, [istate, #ISTATE_JAVA_RETURN_KIND]
1422
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
1424
+@ --- do_iload_vtos -------------------------------------------------
1425
+ OpcodeEntry do_iload_vtos
1426
+ ldrb ip, [java_pc, #2]!
1427
+ ldrb r3, [java_pc, #-1]
1428
+ ldr ip, [itos_table, ip, asl #2]
1429
+ ldr tos, [java_locals, -r3, asl #2]
1432
+@ --- do_iload_itos -------------------------------------------------
1433
+ OpcodeEntry do_iload_itos
1434
+ ldrb ip, [java_pc, #2]!
1435
+ ldrb r3, [java_pc, #-1]
1437
+ ldr ip, [itos_table, ip, asl #2]
1438
+ ldr tos, [java_locals, -r3, asl #2]
1441
+@ --- do_aload_vtos -------------------------------------------------
1442
+ OpcodeEntry do_aload_vtos
1443
+ ldrb ip, [java_pc, #2]!
1444
+ ldrb r3, [java_pc, #-1]
1445
+ ldr ip, [itos_table, ip, asl #2]
1446
+ ldr tos, [java_locals, -r3, asl #2]
1449
+@ --- do_aload_itos -------------------------------------------------
1450
+ OpcodeEntry do_aload_itos
1451
+ ldrb ip, [java_pc, #2]!
1452
+ ldrb r3, [java_pc, #-1]
1454
+ ldr ip, [itos_table, ip, asl #2]
1455
+ ldr tos, [java_locals, -r3, asl #2]
1458
+@ --- do_iconst_1_vtos -------------------------------------------------
1459
+ OpcodeEntry do_iconst_1_vtos
1460
+ ldrb r3, [java_pc, #1]!
1462
+ ldr r2, [itos_table, r3, asl #2]
1465
+@ --- do_iconst_1_itos -------------------------------------------------
1466
+ OpcodeEntry do_iconst_1_itos
1467
+ ldrb r3, [java_pc, #1]!
1469
+ ldr r2, [itos_table, r3, asl #2]
1473
+@ --- do_ifnull_vtos_unsafe -------------------------------------------------
1474
+ OpcodeEntry do_ifnull_vtos_unsafe
1475
+@ --- do_ifeq_vtos_unsafe -------------------------------------------------
1476
+ OpcodeEntry do_ifeq_vtos_unsafe
1480
+@ --- do_ifnull_itos_unsafe -------------------------------------------------
1481
+ OpcodeEntry do_ifnull_itos_unsafe
1482
+@ --- do_ifeq_itos_unsafe -------------------------------------------------
1483
+ OpcodeEntry do_ifeq_itos_unsafe
1485
+ ldrsb r1, [java_pc, #1]
1486
+ ldrb ip, [java_pc, #2]
1488
+ orreq ip, ip, r1, lsl #8
1489
+ ldreqb ip, [java_pc, ip]!
1490
+ ldrneb ip, [java_pc, #3]!
1491
+ ldr ip, [vtos_table, ip, lsl #2]
1494
+@ --- do_ifnonnull_vtos_unsafe -------------------------------------------------
1495
+ OpcodeEntry do_ifnonnull_vtos_unsafe
1496
+@ --- do_ifne_vtos_unsafe -------------------------------------------------
1497
+ OpcodeEntry do_ifne_vtos_unsafe
1500
+ ldrsb r1, [java_pc, #1]
1501
+ ldrb ip, [java_pc, #2]
1503
+ orrne ip, ip, r1, lsl #8
1504
+ ldrneb ip, [java_pc, ip]!
1505
+ ldreqb ip, [java_pc, #3]!
1506
+ ldr ip, [vtos_table, ip, lsl #2]
1509
+ OpcodeEntry do_ifnonnull_itos_unsafe
1510
+@ --- do_ifne_itos_unsafe -------------------------------------------------
1511
+ OpcodeEntry do_ifne_itos_unsafe
1513
+ ldrsb r1, [java_pc, #1]
1514
+ ldrb ip, [java_pc, #2]
1516
+ orrne ip, ip, r1, lsl #8
1517
+ ldrneb ip, [java_pc, ip]!
1518
+ ldreqb ip, [java_pc, #3]!
1519
+ ldr ip, [vtos_table, ip, lsl #2]
1522
+@ --- do_ifle_vtos_unsafe -------------------------------------------------
1523
+ OpcodeEntry do_ifle_vtos_unsafe
1526
+ ldrsb r1, [java_pc, #1]
1527
+ ldrb ip, [java_pc, #2]
1529
+ orrle ip, ip, r1, lsl #8
1530
+ ldrleb ip, [java_pc, ip]!
1531
+ ldrgtb ip, [java_pc, #3]!
1532
+ ldr ip, [vtos_table, ip, lsl #2]
1535
+@ --- do_ifle_itos_unsafe -------------------------------------------------
1536
+ OpcodeEntry do_ifle_itos_unsafe
1538
+ ldrsb r1, [java_pc, #1]
1539
+ ldrb ip, [java_pc, #2]
1541
+ orrle ip, ip, r1, lsl #8
1542
+ ldrleb ip, [java_pc, ip]!
1543
+ ldrgtb ip, [java_pc, #3]!
1544
+ ldr ip, [vtos_table, ip, lsl #2]
1547
+@ --- do_ifgt_vtos_unsafe -------------------------------------------------
1548
+ OpcodeEntry do_ifgt_vtos_unsafe
1552
+@ --- do_ifgt_itos_unsafe -------------------------------------------------
1553
+ OpcodeEntry do_ifgt_itos_unsafe
1555
+ ldrsb r1, [java_pc, #1]
1556
+ ldrb ip, [java_pc, #2]
1558
+ orrgt ip, ip, r1, lsl #8
1559
+ ldrgtb ip, [java_pc, ip]!
1560
+ ldrleb ip, [java_pc, #3]!
1561
+ ldr ip, [vtos_table, ip, lsl #2]
1564
+@ --- do_ifge_vtos_unsafe -------------------------------------------------
1565
+ OpcodeEntry do_ifge_vtos_unsafe
1569
+@ --- do_ifge_itos_unsafe -------------------------------------------------
1570
+ OpcodeEntry do_ifge_itos_unsafe
1572
+ ldrsb r1, [java_pc, #1]
1573
+ ldrb ip, [java_pc, #2]
1575
+ orrge ip, ip, r1, lsl #8
1576
+ ldrgeb ip, [java_pc, ip]!
1577
+ ldrltb ip, [java_pc, #3]!
1578
+ ldr ip, [vtos_table, ip, lsl #2]
1581
+@ --- do_iflt_vtos_unsafe -------------------------------------------------
1582
+ OpcodeEntry do_iflt_vtos_unsafe
1586
+@ --- do_iflt_itos_unsafe -------------------------------------------------
1587
+ OpcodeEntry do_iflt_itos_unsafe
1589
+ ldrsb r1, [java_pc, #1]
1590
+ ldrb ip, [java_pc, #2]
1592
+ orrlt ip, ip, r1, lsl #8
1593
+ ldrltb ip, [java_pc, ip]!
1594
+ ldrgeb ip, [java_pc, #3]!
1595
+ ldr ip, [vtos_table, ip, lsl #2]
1598
+@ --- do_if_acmpeq_vtos_unsafe -------------------------------------------------
1599
+ OpcodeEntry do_if_acmpeq_vtos_unsafe
1600
+@ --- do_if_icmpeq_vtos_unsafe -------------------------------------------------
1601
+ OpcodeEntry do_if_icmpeq_vtos_unsafe
1605
+@ --- do_if_acmpeq_itos_unsafe -------------------------------------------------
1606
+ OpcodeEntry do_if_acmpeq_itos_unsafe
1607
+@ --- do_if_icmpeq_itos_unsafe -------------------------------------------------
1608
+ OpcodeEntry do_if_icmpeq_itos_unsafe
1611
+ ldrsb r1, [java_pc, #1]
1612
+ ldrb ip, [java_pc, #2]
1614
+ orreq ip, ip, r1, lsl #8
1615
+ ldreqb ip, [java_pc, ip]!
1616
+ ldrneb ip, [java_pc, #3]!
1617
+ ldr ip, [vtos_table, ip, lsl #2]
1620
+@ --- do_if_acmpne_vtos_unsafe -------------------------------------------------
1621
+ OpcodeEntry do_if_acmpne_vtos_unsafe
1622
+@ --- do_if_icmpne_vtos_unsafe -------------------------------------------------
1623
+ OpcodeEntry do_if_icmpne_vtos_unsafe
1627
+@ --- do_if_acmpne_itos_unsafe -------------------------------------------------
1628
+ OpcodeEntry do_if_acmpne_itos_unsafe
1629
+@ --- do_if_icmpne_itos_unsafe -------------------------------------------------
1630
+ OpcodeEntry do_if_icmpne_itos_unsafe
1633
+ ldrsb r1, [java_pc, #1]
1634
+ ldrb ip, [java_pc, #2]
1636
+ orrne ip, ip, r1, lsl #8
1637
+ ldrneb ip, [java_pc, ip]!
1638
+ ldreqb ip, [java_pc, #3]!
1639
+ ldr ip, [vtos_table, ip, lsl #2]
1642
+@ --- do_if_icmplt_vtos_unsafe -------------------------------------------------
1643
+ OpcodeEntry do_if_icmplt_vtos_unsafe
1647
+ ldrsb r1, [java_pc, #1]
1648
+ ldrb ip, [java_pc, #2]
1650
+ orrlt ip, ip, r1, lsl #8
1651
+ ldrltb ip, [java_pc, ip]!
1652
+ ldrgeb ip, [java_pc, #3]!
1653
+ ldr ip, [vtos_table, ip, lsl #2]
1656
+@ --- do_if_icmplt_itos_unsafe -------------------------------------------------
1657
+ OpcodeEntry do_if_icmplt_itos_unsafe
1660
+ ldrsb r1, [java_pc, #1]
1661
+ ldrb ip, [java_pc, #2]
1663
+ orrlt ip, ip, r1, lsl #8
1664
+ ldrltb ip, [java_pc, ip]!
1665
+ ldrgeb ip, [java_pc, #3]!
1666
+ ldr ip, [vtos_table, ip, lsl #2]
1669
+@ --- do_if_icmpge_vtos_unsafe -------------------------------------------------
1670
+ OpcodeEntry do_if_icmpge_vtos_unsafe
1674
+@ --- do_if_icmpge_itos_unsafe -------------------------------------------------
1675
+ OpcodeEntry do_if_icmpge_itos_unsafe
1678
+ ldrsb r1, [java_pc, #1]
1679
+ ldrb ip, [java_pc, #2]
1681
+ orrge ip, ip, r1, lsl #8
1682
+ ldrgeb ip, [java_pc, ip]!
1683
+ ldrltb ip, [java_pc, #3]!
1684
+ ldr ip, [vtos_table, ip, lsl #2]
1687
+@ --- do_if_icmpgt_vtos_unsafe -------------------------------------------------
1688
+ OpcodeEntry do_if_icmpgt_vtos_unsafe
1692
+@ --- do_if_icmpgt_itos_unsafe -------------------------------------------------
1693
+ OpcodeEntry do_if_icmpgt_itos_unsafe
1696
+ ldrsb r1, [java_pc, #1]
1697
+ ldrb ip, [java_pc, #2]
1699
+ orrgt ip, ip, r1, lsl #8
1700
+ ldrgtb ip, [java_pc, ip]!
1701
+ ldrleb ip, [java_pc, #3]!
1702
+ ldr ip, [vtos_table, ip, lsl #2]
1705
+@ --- do_if_icmple_vtos_unsafe -------------------------------------------------
1706
+ OpcodeEntry do_if_icmple_vtos_unsafe
1710
+@ --- do_if_icmple_itos_unsafe -------------------------------------------------
1711
+ OpcodeEntry do_if_icmple_itos_unsafe
1714
+ ldrsb r1, [java_pc, #1]
1715
+ ldrb ip, [java_pc, #2]
1717
+ orrle ip, ip, r1, lsl #8
1718
+ ldrleb ip, [java_pc, ip]!
1719
+ ldrgtb ip, [java_pc, #3]!
1720
+ ldr ip, [vtos_table, ip, lsl #2]
1723
+@ --- do_goto_itos_unsafe -------------------------------------------------
1724
+ OpcodeEntry do_goto_itos_unsafe
1726
+ ldrsb r1, [java_pc, #1]
1727
+ ldrb ip, [java_pc, #2]
1728
+ orr ip, ip, r1, lsl #8
1729
+ ldrb ip, [java_pc, ip]!
1730
+ ldr ip, [itos_table, ip, lsl #2]
1733
+@ --- do_goto_vtos_unsafe -------------------------------------------------
1734
+ OpcodeEntry do_goto_vtos_unsafe
1736
+ ldrsb r1, [java_pc, #1]
1737
+ ldrb ip, [java_pc, #2]
1738
+ orr ip, ip, r1, lsl #8
1739
+ ldrb ip, [java_pc, ip]!
1740
+ ldr ip, [vtos_table, ip, lsl #2]
1743
+@ --- do_iload_0_itos -------------------------------------------------
1744
+ OpcodeEntry do_iload_0_itos
1745
+ ldrb r2, [java_pc, #1]!
1747
+ ldr r2, [itos_table, r2, asl #2]
1748
+ ldr tos, [java_locals, #0]
1751
+@ --- do_aload_0_itos -------------------------------------------------
1752
+ OpcodeEntry do_aload_0_itos
1754
+@ --- do_aload_0_vtos -------------------------------------------------
1755
+ OpcodeEntry do_aload_0_vtos
1756
+ ldrb r2, [java_pc, #1]!
1757
+ ldr tos, [java_locals, #0]
1758
+ cmp r2, #opc_getfield
1759
+ ldrne pc, [itos_table, r2, asl #2]
1760
+ ldrb r3, [java_pc,#1]
1761
+ ldrb r2, [java_pc,#2]
1762
+ ldrb ip, [java_pc,#3]!
1763
+ orr r3, r3, r2, lsl #8
1764
+ add r1, constant_pool, #16
1765
+ ldr r3, [r1, r3, lsl #4]! @ r1 = cache
1766
+ ldr ip, [itos_table, ip, asl #2]
1767
+ and r3, r3, #0x00ff0000
1768
+ cmp r3, #180 << 16
1769
+ bne .exit_getfield
1771
+ beq .exit_getfield
1774
+ movs r2, r2, lsr #29
1775
+ ldrhi tos, [r3, lr] @ C = 1, Z = 0 => R2 == 3, 5, 7
1776
+ movhi pc, ip @ early exit for word accesses
1777
+ ldreqsb tos, [r3, lr] @ Z = 1 => R2 = 0, 1
1778
+ ldrcsh tos, [r3, lr] @ C = 1 => R2 = 1 (overwrites previous load)
1782
+ ldmneia r3, {r0, r1} @ 4, 6
1785
+ ldrsh tos, [r3, lr] @ 2
1788
+@ --- do_iload_0_vtos -------------------------------------------------
1789
+ OpcodeEntry do_iload_0_vtos
1790
+ ldrb r2, [java_pc, #1]!
1791
+ ldr tos, [java_locals, #0]
1792
+ ldr r2, [itos_table, r2, asl #2]
1795
+@ --- do_aload_1_itos -------------------------------------------------
1796
+ OpcodeEntry do_aload_1_itos
1797
+ ldrb r2, [java_pc, #1]!
1799
+ ldr r2, [itos_table, r2, asl #2]
1800
+ ldr tos, [java_locals, #-4]
1803
+@ --- do_iload_1_itos -------------------------------------------------
1804
+ OpcodeEntry do_iload_1_itos
1805
+ ldrb r2, [java_pc, #1]!
1807
+ ldr r2, [itos_table, r2, asl #2]
1808
+ ldr tos, [java_locals, #-4]
1811
+@ --- do_aload_1_vtos -------------------------------------------------
1812
+ OpcodeEntry do_aload_1_vtos
1813
+ ldrb r2, [java_pc, #1]!
1814
+ ldr tos, [java_locals, #-4]
1815
+ ldr r2, [itos_table, r2, asl #2]
1818
+@ --- do_iload_1_vtos -------------------------------------------------
1819
+ OpcodeEntry do_iload_1_vtos
1820
+ ldrb r2, [java_pc, #1]!
1821
+ ldr tos, [java_locals, #-4]
1822
+ ldr r2, [itos_table, r2, asl #2]
1825
+@ --- do_aload_2_itos -------------------------------------------------
1826
+ OpcodeEntry do_aload_2_itos
1827
+ ldrb r2, [java_pc, #1]!
1829
+ ldr r2, [itos_table, r2, asl #2]
1830
+ ldr tos, [java_locals, #-8]
1833
+@ --- do_iload_2_itos -------------------------------------------------
1834
+ OpcodeEntry do_iload_2_itos
1835
+ ldrb r2, [java_pc, #1]!
1837
+ ldr r2, [itos_table, r2, asl #2]
1838
+ ldr tos, [java_locals, #-8]
1841
+@ --- do_aload_2_vtos -------------------------------------------------
1842
+ OpcodeEntry do_aload_2_vtos
1843
+ ldrb r2, [java_pc, #1]!
1844
+ ldr tos, [java_locals, #-8]
1845
+ ldr r2, [itos_table, r2, asl #2]
1848
+@ --- do_iload_2_vtos -------------------------------------------------
1849
+ OpcodeEntry do_iload_2_vtos
1850
+ ldrb r2, [java_pc, #1]!
1851
+ ldr tos, [java_locals, #-8]
1852
+ ldr r2, [itos_table, r2, asl #2]
1855
+@ --- do_aload_3_itos -------------------------------------------------
1856
+ OpcodeEntry do_aload_3_itos
1857
+ ldrb r2, [java_pc, #1]!
1859
+ ldr r2, [itos_table, r2, asl #2]
1860
+ ldr tos, [java_locals, #-12]
1863
+@ --- do_iload_3_itos -------------------------------------------------
1864
+ OpcodeEntry do_iload_3_itos
1865
+ ldrb r2, [java_pc, #1]!
1867
+ ldr r2, [itos_table, r2, asl #2]
1868
+ ldr tos, [java_locals, #-12]
1871
+@ --- do_aload_3_vtos -------------------------------------------------
1872
+ OpcodeEntry do_aload_3_vtos
1873
+ ldrb r2, [java_pc, #1]!
1874
+ ldr tos, [java_locals, #-12]
1875
+ ldr r2, [itos_table, r2, asl #2]
1878
+@ --- do_iload_3_vtos -------------------------------------------------
1879
+ OpcodeEntry do_iload_3_vtos
1880
+ ldrb r2, [java_pc, #1]!
1881
+ ldr tos, [java_locals, #-12]
1882
+ ldr r2, [itos_table, r2, asl #2]
1885
+@ --- do_iaload_vtos -------------------------------------------------
1886
+ OpcodeEntry do_iaload_vtos
1888
+@ --- do_iaload_itos -------------------------------------------------
1889
+ OpcodeEntry do_iaload_itos
1891
+ ldrb ip, [java_pc, #1]!
1893
+ beq .itos_exit_iaload
1896
+ bcs .itos_exit_iaload
1897
+ ldr ip, [itos_table, ip, asl #2]
1898
+ add r3, r2, tos, lsl #2
1899
+ ldr tos, [r3, #12]
1902
+@ --- do_aaload_vtos -------------------------------------------------
1903
+ OpcodeEntry do_aaload_vtos
1905
+@ --- do_aaload_itos -------------------------------------------------
1906
+ OpcodeEntry do_aaload_itos
1908
+ ldrb ip, [java_pc, #1]!
1910
+ beq .itos_exit_iaload
1913
+ bcs .itos_exit_iaload
1914
+ ldr ip, [itos_table, ip, asl #2]
1915
+ add r3, r2, tos, lsl #2
1916
+ ldr tos, [r3, #12]
1919
+@ --- do_istore_vtos -------------------------------------------------
1920
+ OpcodeEntry do_istore_vtos
1922
+@ --- do_istore_itos -------------------------------------------------
1923
+ OpcodeEntry do_istore_itos
1924
+ ldrb ip, [java_pc, #2]!
1925
+ ldrb r3, [java_pc, #-1]
1926
+ ldr ip, [vtos_table, ip, asl #2]
1927
+ str tos, [java_locals, -r3, asl #2]
1930
+@ --- do_istore_0_vtos -------------------------------------------------
1931
+ OpcodeEntry do_istore_0_vtos
1933
+@ --- do_istore_0_itos -------------------------------------------------
1934
+ OpcodeEntry do_istore_0_itos
1935
+ ldrb r2, [java_pc, #1]!
1936
+ ldr r2, [vtos_table, r2, asl #2]
1937
+ str tos, [java_locals, #0]
1940
+@ --- do_istore_1_vtos -------------------------------------------------
1941
+ OpcodeEntry do_istore_1_vtos
1943
+@ --- do_istore_1_itos -------------------------------------------------
1944
+ OpcodeEntry do_istore_1_itos
1945
+ ldrb r2, [java_pc, #1]!
1946
+ ldr r2, [vtos_table, r2, asl #2]
1947
+ str tos, [java_locals, #-4]
1950
+@ --- do_istore_2_vtos -------------------------------------------------
1951
+ OpcodeEntry do_istore_2_vtos
1953
+@ --- do_istore_2_itos -------------------------------------------------
1954
+ OpcodeEntry do_istore_2_itos
1955
+ ldrb r2, [java_pc, #1]!
1956
+ ldr r2, [vtos_table, r2, asl #2]
1957
+ str tos, [java_locals, #-8]
1960
+@ --- do_istore_3_vtos -------------------------------------------------
1961
+ OpcodeEntry do_istore_3_vtos
1963
+@ --- do_istore_3_itos -------------------------------------------------
1964
+ OpcodeEntry do_istore_3_itos
1965
+ ldrb r2, [java_pc, #1]!
1966
+ ldr r2, [vtos_table, r2, asl #2]
1967
+ str tos, [java_locals, #-12]
1970
+@ --- do_iinc_vtos -------------------------------------------------
1971
+ OpcodeEntry do_iinc_vtos
1972
+ ldrb r2, [java_pc, #1]
1973
+ ldrb ip, [java_pc, #3]!
1974
+ ldrsb r1, [java_pc, #-1]
1975
+ ldr r3, [java_locals, -r2, lsl #2]
1976
+ ldr ip, [vtos_table, ip, asl #2]
1978
+ str r3, [java_locals, -r2, lsl #2]
1981
+@ --- do_iinc_itos -------------------------------------------------
1982
+ OpcodeEntry do_iinc_itos
1983
+ ldrb r2, [java_pc, #1]
1984
+ ldrb ip, [java_pc, #3]!
1985
+ ldrsb r1, [java_pc, #-1]
1986
+ ldr r3, [java_locals, -r2, lsl #2]
1987
+ ldr ip, [itos_table, ip, asl #2]
1989
+ str r3, [java_locals, -r2, lsl #2]
1992
+@ --- do_iadd_vtos -------------------------------------------------
1993
+ OpcodeEntry do_iadd_vtos
1995
+@ --- do_iadd_itos -------------------------------------------------
1996
+ OpcodeEntry do_iadd_itos
1997
+ ldrb ip, [java_pc, #1]!
1999
+ ldr ip, [itos_table, ip, asl #2]
2003
+@ --- do_isub_vtos -------------------------------------------------
2004
+ OpcodeEntry do_isub_vtos
2006
+@ --- do_isub_itos -------------------------------------------------
2007
+ OpcodeEntry do_isub_itos
2008
+ ldrb ip, [java_pc, #1]!
2010
+ ldr ip, [itos_table, ip, asl #2]
2014
+@ --- do_iand_vtos -------------------------------------------------
2015
+ OpcodeEntry do_iand_vtos
2017
+@ --- do_iand_itos -------------------------------------------------
2018
+ OpcodeEntry do_iand_itos
2019
+ ldrb ip, [java_pc, #1]!
2021
+ ldr ip, [itos_table, ip, asl #2]
2025
+@ --- do_ior_vtos -------------------------------------------------
2026
+ OpcodeEntry do_ior_vtos
2028
+@ --- do_ior_itos -------------------------------------------------
2029
+ OpcodeEntry do_ior_itos
2030
+ ldrb ip, [java_pc, #1]!
2032
+ ldr ip, [itos_table, ip, asl #2]
2036
+@ --- do_ixor_vtos -------------------------------------------------
2037
+ OpcodeEntry do_ixor_vtos
2039
+@ --- do_ixor_itos -------------------------------------------------
2040
+ OpcodeEntry do_ixor_itos
2041
+ ldrb ip, [java_pc, #1]!
2043
+ ldr ip, [itos_table, ip, asl #2]
2047
+@ --- do_aconst_null_itos -------------------------------------------------
2048
+ OpcodeEntry do_aconst_null_itos
2049
+@ --- do_iconst_0_itos -------------------------------------------------
2050
+ OpcodeEntry do_iconst_0_itos
2052
+@ --- do_aconst_null_vtos -------------------------------------------------
2053
+ OpcodeEntry do_aconst_null_vtos
2054
+@ --- do_iconst_0_vtos -------------------------------------------------
2055
+ OpcodeEntry do_iconst_0_vtos
2056
+ ldrb r3, [java_pc, #1]!
2058
+ ldr r2, [itos_table, r3, asl #2]
2061
+@ --- do_iconst_2_itos -------------------------------------------------
2062
+ OpcodeEntry do_iconst_2_itos
2064
+@ --- do_iconst_2_vtos -------------------------------------------------
2065
+ OpcodeEntry do_iconst_2_vtos
2066
+ ldrb r3, [java_pc, #1]!
2068
+ ldr r2, [itos_table, r3, asl #2]
2071
+@ --- do_iconst_3_itos -------------------------------------------------
2072
+ OpcodeEntry do_iconst_3_itos
2074
+@ --- do_iconst_3_vtos -------------------------------------------------
2075
+ OpcodeEntry do_iconst_3_vtos
2076
+ ldrb r3, [java_pc, #1]!
2078
+ ldr r2, [itos_table, r3, asl #2]
2081
+@ --- do_iconst_4_itos -------------------------------------------------
2082
+ OpcodeEntry do_iconst_4_itos
2084
+@ --- do_iconst_4_vtos -------------------------------------------------
2085
+ OpcodeEntry do_iconst_4_vtos
2086
+ ldrb r3, [java_pc, #1]!
2088
+ ldr r2, [itos_table, r3, asl #2]
2091
+@ --- do_iconst_5_itos -------------------------------------------------
2092
+ OpcodeEntry do_iconst_5_itos
2094
+@ --- do_iconst_5_vtos -------------------------------------------------
2095
+ OpcodeEntry do_iconst_5_vtos
2096
+ ldrb r3, [java_pc, #1]!
2098
+ ldr r2, [itos_table, r3, asl #2]
2101
+@ --- do_nop_itos -------------------------------------------------
2102
+ OpcodeEntry do_nop_itos
2104
+@ --- do_nop_vtos -------------------------------------------------
2105
+ OpcodeEntry do_nop_vtos
2106
+ ldrb r3, [java_pc, #1]!
2107
+ ldr r2, [vtos_table, r3, asl #2]
2112
+@ --- do_iconst_m1_itos -------------------------------------------------
2113
+ OpcodeEntry do_iconst_m1_itos
2115
+@ --- do_iconst_m1_vtos -------------------------------------------------
2116
+ OpcodeEntry do_iconst_m1_vtos
2117
+ ldrb r3, [java_pc, #1]!
2119
+ ldr r2, [itos_table, r3, asl #2]
2122
+@ --- do_fconst_0_itos -------------------------------------------------
2123
+ OpcodeEntry do_fconst_0_itos
2125
+@ --- do_fconst_0_vtos -------------------------------------------------
2126
+ OpcodeEntry do_fconst_0_vtos
2127
+ ldrb r3, [java_pc, #1]!
2129
+ ldr r2, [itos_table, r3, asl #2]
2132
+@ --- do_fconst_1_itos -------------------------------------------------
2133
+ OpcodeEntry do_fconst_1_itos
2135
+@ --- do_fconst_1_vtos -------------------------------------------------
2136
+ OpcodeEntry do_fconst_1_vtos
2137
+ ldrb r3, [java_pc, #1]!
2138
+ mov tos, #1065353216
2139
+ ldr r2, [itos_table, r3, asl #2]
2142
+@ --- do_fconst_2_itos -------------------------------------------------
2143
+ OpcodeEntry do_fconst_2_itos
2145
+@ --- do_fconst_2_vtos -------------------------------------------------
2146
+ OpcodeEntry do_fconst_2_vtos
2147
+ ldrb r3, [java_pc, #1]!
2148
+ mov tos, #1073741824
2149
+ ldr r2, [itos_table, r3, asl #2]
2152
+@ --- do_dconst_0_itos -------------------------------------------------
2153
+ OpcodeEntry do_dconst_0_itos
2154
+@ --- do_lconst_0_itos -------------------------------------------------
2155
+ OpcodeEntry do_lconst_0_itos
2157
+@ --- do_dconst_0_vtos -------------------------------------------------
2158
+ OpcodeEntry do_dconst_0_vtos
2159
+@ --- do_lconst_0_vtos -------------------------------------------------
2160
+ OpcodeEntry do_lconst_0_vtos
2161
+ ldrb r2, [java_pc, #1]!
2163
+ ldr r2, [itos_table, r2, asl #2]
2167
+@ --- do_lconst_1_itos -------------------------------------------------
2168
+ OpcodeEntry do_lconst_1_itos
2170
+@ --- do_lconst_1_vtos -------------------------------------------------
2171
+ OpcodeEntry do_lconst_1_vtos
2172
+ ldrb r2, [java_pc, #1]!
2175
+ ldr r2, [itos_table, r2, asl #2]
2179
+@ --- do_dconst_1_itos -------------------------------------------------
2180
+ OpcodeEntry do_dconst_1_itos
2182
+@ --- do_dconst_1_vtos -------------------------------------------------
2183
+ OpcodeEntry do_dconst_1_vtos
2184
+ ldrb r2, [java_pc, #1]!
2185
+ mov r1, #0x3f000000
2187
+ ldr r2, [itos_table, r2, asl #2]
2188
+ orr r1, r1, #0x00f00000
2192
+@ --- do_bipush_itos -------------------------------------------------
2193
+ OpcodeEntry do_bipush_itos
2195
+@ --- do_bipush_vtos -------------------------------------------------
2196
+ OpcodeEntry do_bipush_vtos
2197
+ ldrb r2, [java_pc, #2]!
2198
+ ldrsb tos, [java_pc, #-1]
2199
+ ldr r2, [itos_table, r2, asl #2]
2202
+@ --- do_sipush_itos -------------------------------------------------
2203
+ OpcodeEntry do_sipush_itos
2205
+@ --- do_sipush_vtos -------------------------------------------------
2206
+ OpcodeEntry do_sipush_vtos
2207
+ ldrb r2, [java_pc, #3]!
2208
+ ldrsb r0, [java_pc, #-2]
2209
+ ldrb r1, [java_pc, #-1]
2210
+ ldr r2, [itos_table, r2, asl #2]
2211
+ orr tos, r1, r0, lsl #8
2214
+@ --- do_fload_itos -------------------------------------------------
2215
+ OpcodeEntry do_fload_itos
2217
+@ --- do_fload_vtos -------------------------------------------------
2218
+ OpcodeEntry do_fload_vtos
2219
+ ldrb ip, [java_pc, #2]!
2220
+ ldrb r3, [java_pc, #-1]
2221
+ ldr ip, [itos_table, ip, asl #2]
2222
+ ldr tos, [java_locals, -r3, asl #2]
2225
+@ --- do_dload_itos -------------------------------------------------
2226
+ OpcodeEntry do_dload_itos
2227
+@ --- do_lload_itos -------------------------------------------------
2228
+ OpcodeEntry do_lload_itos
2230
+@ --- do_dload_vtos -------------------------------------------------
2231
+ OpcodeEntry do_dload_vtos
2232
+@ --- do_lload_vtos -------------------------------------------------
2233
+ OpcodeEntry do_lload_vtos
2234
+ ldrb r3, [java_pc, #1]
2235
+ ldrb ip, [java_pc, #2]!
2236
+ sub r3, java_locals, r3, lsl #2
2237
+ ldmda r3, {r0, r1}
2238
+ ldr r2, [itos_table, ip, asl #2]
2242
+@ --- do_fload_0_itos -------------------------------------------------
2243
+ OpcodeEntry do_fload_0_itos
2245
+@ --- do_fload_0_vtos -------------------------------------------------
2246
+ OpcodeEntry do_fload_0_vtos
2247
+ ldrb r2, [java_pc, #1]!
2248
+ ldr tos, [java_locals, #0]
2249
+ ldr r2, [itos_table, r2, asl #2]
2252
+@ --- do_fload_1_itos -------------------------------------------------
2253
+ OpcodeEntry do_fload_1_itos
2255
+@ --- do_fload_1_vtos -------------------------------------------------
2256
+ OpcodeEntry do_fload_1_vtos
2257
+ ldrb r2, [java_pc, #1]!
2258
+ ldr tos, [java_locals, #-4]
2259
+ ldr r2, [itos_table, r2, asl #2]
2262
+@ --- do_fload_2_itos -------------------------------------------------
2263
+ OpcodeEntry do_fload_2_itos
2265
+@ --- do_fload_2_vtos -------------------------------------------------
2266
+ OpcodeEntry do_fload_2_vtos
2267
+ ldrb r2, [java_pc, #1]!
2268
+ ldr tos, [java_locals, #-8]
2269
+ ldr r2, [itos_table, r2, asl #2]
2272
+@ --- do_fload_3_itos -------------------------------------------------
2273
+ OpcodeEntry do_fload_3_itos
2275
+@ --- do_fload_3_vtos -------------------------------------------------
2276
+ OpcodeEntry do_fload_3_vtos
2277
+ ldrb r2, [java_pc, #1]!
2278
+ ldr tos, [java_locals, #-12]
2279
+ ldr r2, [itos_table, r2, asl #2]
2282
+@ --- do_dload_0_itos -------------------------------------------------
2283
+ OpcodeEntry do_dload_0_itos
2284
+@ --- do_lload_0_itos -------------------------------------------------
2285
+ OpcodeEntry do_lload_0_itos
2287
+@ --- do_dload_0_vtos -------------------------------------------------
2288
+ OpcodeEntry do_dload_0_vtos
2289
+@ --- do_lload_0_vtos -------------------------------------------------
2290
+ OpcodeEntry do_lload_0_vtos
2291
+ ldrb ip, [java_pc, #1]!
2292
+ ldmda java_locals, {r0-r1}
2293
+ ldr ip, [itos_table, ip, asl #2]
2297
+@ --- do_dload_1_itos -------------------------------------------------
2298
+ OpcodeEntry do_dload_1_itos
2299
+@ --- do_lload_1_itos -------------------------------------------------
2300
+ OpcodeEntry do_lload_1_itos
2302
+@ --- do_dload_1_vtos -------------------------------------------------
2303
+ OpcodeEntry do_dload_1_vtos
2304
+@ --- do_lload_1_vtos -------------------------------------------------
2305
+ OpcodeEntry do_lload_1_vtos
2306
+ ldrb ip, [java_pc, #1]!
2307
+ ldmdb java_locals, {r0-r1}
2308
+ ldr ip, [itos_table, ip, asl #2]
2312
+@ --- do_dload_2_itos -------------------------------------------------
2313
+ OpcodeEntry do_dload_2_itos
2314
+@ --- do_lload_2_itos -------------------------------------------------
2315
+ OpcodeEntry do_lload_2_itos
2317
+@ --- do_dload_2_vtos -------------------------------------------------
2318
+ OpcodeEntry do_dload_2_vtos
2319
+@ --- do_lload_2_vtos -------------------------------------------------
2320
+ OpcodeEntry do_lload_2_vtos
2321
+ ldrb ip, [java_pc, #1]!
2322
+ ldr r2, [java_locals, #-8]
2323
+ ldr r0, [java_locals, #-12]
2324
+ ldr ip, [itos_table, ip, asl #2]
2328
+@ --- do_dload_3_itos -------------------------------------------------
2329
+ OpcodeEntry do_dload_3_itos
2330
+@ --- do_lload_3_itos -------------------------------------------------
2331
+ OpcodeEntry do_lload_3_itos
2333
+@ --- do_dload_3_vtos -------------------------------------------------
2334
+ OpcodeEntry do_dload_3_vtos
2335
+@ --- do_lload_3_vtos -------------------------------------------------
2336
+ OpcodeEntry do_lload_3_vtos
2337
+ ldrb ip, [java_pc, #1]!
2338
+ ldr r2, [java_locals, #-12]
2339
+ ldr r0, [java_locals, #-16]
2340
+ ldr ip, [itos_table, ip, asl #2]
2344
+@ --- do_faload_vtos -------------------------------------------------
2345
+ OpcodeEntry do_faload_vtos
2347
+@ --- do_faload_itos -------------------------------------------------
2348
+ OpcodeEntry do_faload_itos
2350
+ ldrb ip, [java_pc, #1]!
2352
+ beq .itos_exit_iaload
2355
+ bcs .itos_exit_iaload
2356
+ ldr ip, [itos_table, ip, asl #2]
2357
+ add r3, r2, tos, lsl #2
2358
+ ldr tos, [r3, #12]
2361
+@ --- do_baload_vtos -------------------------------------------------
2362
+ OpcodeEntry do_baload_vtos
2364
+@ --- do_baload_itos -------------------------------------------------
2365
+ OpcodeEntry do_baload_itos
2367
+ ldrb ip, [java_pc, #1]!
2369
+ beq .itos_exit_iaload
2372
+ bcs .itos_exit_iaload
2373
+ ldr ip, [itos_table, ip, asl #2]
2375
+ ldrsb tos, [r3, #12]
2378
+@ --- do_caload_vtos -------------------------------------------------
2379
+ OpcodeEntry do_caload_vtos
2381
+@ --- do_caload_itos -------------------------------------------------
2382
+ OpcodeEntry do_caload_itos
2384
+ ldrb ip, [java_pc, #1]!
2386
+ beq .itos_exit_iaload
2389
+ bcs .itos_exit_iaload
2390
+ ldr ip, [itos_table, ip, asl #2]
2391
+ add r3, r2, tos, lsl #1
2392
+ ldrh tos, [r3, #12]
2395
+@ --- do_saload_vtos -------------------------------------------------
2396
+ OpcodeEntry do_saload_vtos
2398
+@ --- do_saload_itos -------------------------------------------------
2399
+ OpcodeEntry do_saload_itos
2401
+ ldrb ip, [java_pc, #1]!
2403
+ beq .itos_exit_iaload
2406
+ bcs .itos_exit_iaload
2407
+ ldr ip, [itos_table, ip, asl #2]
2408
+ add r3, r2, tos, lsl #1
2409
+ ldrsh tos, [r3, #12]
2412
+@ --- do_daload_vtos -------------------------------------------------
2413
+ OpcodeEntry do_daload_vtos
2414
+@ --- do_laload_vtos -------------------------------------------------
2415
+ OpcodeEntry do_laload_vtos
2417
+@ --- do_daload_itos -------------------------------------------------
2418
+ OpcodeEntry do_daload_itos
2419
+@ --- do_laload_itos -------------------------------------------------
2420
+ OpcodeEntry do_laload_itos
2422
+ ldrb ip, [java_pc, #1]!
2424
+ beq .itos_exit_laload
2427
+ bcs .itos_exit_laload
2428
+ add r3, r2, tos, asl #3
2430
+ ldr ip, [itos_table, ip, asl #2]
2431
+ ldr tos, [r3, #16]
2435
+@ --- do_fstore_vtos -------------------------------------------------
2436
+ OpcodeEntry do_fstore_vtos
2438
+@ --- do_fstore_itos -------------------------------------------------
2439
+ OpcodeEntry do_fstore_itos
2440
+ ldrb ip, [java_pc, #2]!
2441
+ ldrb r3, [java_pc, #-1]
2442
+ ldr ip, [vtos_table, ip, asl #2]
2443
+ str tos, [java_locals, -r3, asl #2]
2446
+@ --- do_dstore_vtos -------------------------------------------------
2447
+ OpcodeEntry do_dstore_vtos
2448
+@ --- do_lstore_vtos -------------------------------------------------
2449
+ OpcodeEntry do_lstore_vtos
2451
+@ --- do_dstore_itos -------------------------------------------------
2452
+ OpcodeEntry do_dstore_itos
2453
+@ --- do_lstore_itos -------------------------------------------------
2454
+ OpcodeEntry do_lstore_itos
2455
+ ldrb ip, [java_pc, #2]!
2456
+ ldrb r3, [java_pc, #-1]
2458
+ ldr ip, [vtos_table, ip, asl #2]
2459
+ sub r3, java_locals, r3, lsl #2
2460
+ stmda r3, {r0, r1}
2463
+@ --- do_fstore_0_vtos -------------------------------------------------
2464
+ OpcodeEntry do_fstore_0_vtos
2466
+@ --- do_fstore_0_itos -------------------------------------------------
2467
+ OpcodeEntry do_fstore_0_itos
2468
+ ldrb r2, [java_pc, #1]!
2469
+ ldr r2, [vtos_table, r2, asl #2]
2470
+ str tos, [java_locals, #0]
2473
+@ --- do_fstore_1_vtos -------------------------------------------------
2474
+ OpcodeEntry do_fstore_1_vtos
2476
+@ --- do_fstore_1_itos -------------------------------------------------
2477
+ OpcodeEntry do_fstore_1_itos
2478
+ ldrb r2, [java_pc, #1]!
2479
+ ldr r2, [vtos_table, r2, asl #2]
2480
+ str tos, [java_locals, #-4]
2483
+@ --- do_fstore_2_vtos -------------------------------------------------
2484
+ OpcodeEntry do_fstore_2_vtos
2486
+@ --- do_fstore_2_itos -------------------------------------------------
2487
+ OpcodeEntry do_fstore_2_itos
2488
+ ldrb r2, [java_pc, #1]!
2489
+ ldr r2, [vtos_table, r2, asl #2]
2490
+ str tos, [java_locals, #-8]
2493
+@ --- do_fstore_3_vtos -------------------------------------------------
2494
+ OpcodeEntry do_fstore_3_vtos
2496
+@ --- do_fstore_3_itos -------------------------------------------------
2497
+ OpcodeEntry do_fstore_3_itos
2498
+ ldrb r2, [java_pc, #1]!
2499
+ ldr r2, [vtos_table, r2, asl #2]
2500
+ str tos, [java_locals, #-12]
2503
+@ --- do_dstore_0_vtos -------------------------------------------------
2504
+ OpcodeEntry do_dstore_0_vtos
2505
+@ --- do_lstore_0_vtos -------------------------------------------------
2506
+ OpcodeEntry do_lstore_0_vtos
2508
+@ --- do_dstore_0_itos -------------------------------------------------
2509
+ OpcodeEntry do_dstore_0_itos
2510
+@ --- do_lstore_0_itos -------------------------------------------------
2511
+ OpcodeEntry do_lstore_0_itos
2512
+ ldrb ip, [java_pc, #1]!
2514
+ ldr ip, [vtos_table, ip, asl #2]
2515
+ stmda java_locals, {r0,r1}
2518
+@ --- do_dstore_1_vtos -------------------------------------------------
2519
+ OpcodeEntry do_dstore_1_vtos
2520
+@ --- do_lstore_1_vtos -------------------------------------------------
2521
+ OpcodeEntry do_lstore_1_vtos
2523
+@ --- do_dstore_1_itos -------------------------------------------------
2524
+ OpcodeEntry do_dstore_1_itos
2525
+@ --- do_lstore_1_itos -------------------------------------------------
2526
+ OpcodeEntry do_lstore_1_itos
2527
+ ldrb ip, [java_pc, #1]!
2529
+ ldr ip, [vtos_table, ip, asl #2]
2530
+ stmdb java_locals, {r0,r1}
2533
+@ --- do_dstore_2_vtos -------------------------------------------------
2534
+ OpcodeEntry do_dstore_2_vtos
2535
+@ --- do_lstore_2_vtos -------------------------------------------------
2536
+ OpcodeEntry do_lstore_2_vtos
2538
+@ --- do_dstore_2_itos -------------------------------------------------
2539
+ OpcodeEntry do_dstore_2_itos
2540
+@ --- do_lstore_2_itos -------------------------------------------------
2541
+ OpcodeEntry do_lstore_2_itos
2542
+ ldrb ip, [java_pc, #1]!
2544
+ str tos, [java_locals, #-12]
2545
+ ldr ip, [vtos_table, ip, asl #2]
2546
+ str r3, [java_locals, #-8]
2549
+@ --- do_dstore_3_vtos -------------------------------------------------
2550
+ OpcodeEntry do_dstore_3_vtos
2551
+@ --- do_lstore_3_vtos -------------------------------------------------
2552
+ OpcodeEntry do_lstore_3_vtos
2554
+@ --- do_dstore_3_itos -------------------------------------------------
2555
+ OpcodeEntry do_dstore_3_itos
2556
+@ --- do_lstore_3_itos -------------------------------------------------
2557
+ OpcodeEntry do_lstore_3_itos
2558
+ ldrb ip, [java_pc, #1]!
2560
+ str tos, [java_locals, #-16]
2561
+ ldr ip, [vtos_table, ip, asl #2]
2562
+ str r3, [java_locals, #-12]
2565
+@ --- do_fastore_vtos -------------------------------------------------
2566
+ OpcodeEntry do_fastore_vtos
2567
+@ --- do_iastore_vtos -------------------------------------------------
2568
+ OpcodeEntry do_iastore_vtos
2570
+@ --- do_fastore_itos -------------------------------------------------
2571
+ OpcodeEntry do_fastore_itos
2572
+@ --- do_iastore_itos -------------------------------------------------
2573
+ OpcodeEntry do_iastore_itos
2574
+ ldmib java_stack!, {r1, r2} @ r0 = value@ r1 = index@ r2 = arrayref
2575
+ ldrb ip, [java_pc, #1]!
2577
+ beq .itos_exit_iastore
2580
+ bcs .itos_exit_iastore
2581
+ ldr ip, [vtos_table, ip, asl #2]
2582
+ add r3, r2, r1, lsl #2
2583
+ str tos, [r3, #12]
2586
+@ --- do_bastore_vtos -------------------------------------------------
2587
+ OpcodeEntry do_bastore_vtos
2589
+@ --- do_bastore_itos -------------------------------------------------
2590
+ OpcodeEntry do_bastore_itos
2591
+ ldmib java_stack!, {r1, r2} @ r0 = value@ r1 = index@ r2 = arrayref
2592
+ ldrb ip, [java_pc, #1]!
2594
+ beq .itos_exit_iastore
2597
+ bcs .itos_exit_iastore
2598
+ ldr ip, [vtos_table, ip, asl #2]
2600
+ strb tos, [r3, #12]
2603
+@ --- do_castore_vtos -------------------------------------------------
2604
+ OpcodeEntry do_castore_vtos
2605
+@ --- do_sastore_vtos -------------------------------------------------
2606
+ OpcodeEntry do_sastore_vtos
2608
+@ --- do_castore_itos -------------------------------------------------
2609
+ OpcodeEntry do_castore_itos
2610
+@ --- do_sastore_itos -------------------------------------------------
2611
+ OpcodeEntry do_sastore_itos
2612
+ ldmib java_stack!, {r1, r2} @ r0 = value@ r1 = index@ r2 = arrayref
2613
+ ldrb ip, [java_pc, #1]!
2615
+ beq .itos_exit_iastore
2618
+ bcs .itos_exit_iastore
2619
+ ldr ip, [vtos_table, ip, asl #2]
2620
+ add r3, r2, r1, lsl #1
2621
+ strh tos, [r3, #12]
2624
+@ --- do_dastore_vtos -------------------------------------------------
2625
+ OpcodeEntry do_dastore_vtos
2626
+@ --- do_lastore_vtos -------------------------------------------------
2627
+ OpcodeEntry do_lastore_vtos
2629
+@ --- do_dastore_itos -------------------------------------------------
2630
+ OpcodeEntry do_dastore_itos
2631
+@ --- do_lastore_itos -------------------------------------------------
2632
+ OpcodeEntry do_lastore_itos
2633
+ ldmib java_stack!, {r1, r2, r3} @ r0,r1 = value, r2 = index, r3 = arrayref
2634
+ ldrb ip, [java_pc, #1]!
2636
+ beq .itos_exit_lastore
2639
+ bcs .itos_exit_lastore
2640
+ add r3, r3, r2, lsl #3
2641
+ ldr ip, [vtos_table, ip, asl #2]
2646
+@ --- do_pop_vtos -------------------------------------------------
2647
+ OpcodeEntry do_pop_vtos
2648
+ ldrb r3, [java_pc, #1]!
2649
+ add java_stack, java_stack, #4
2650
+ ldr r2, [vtos_table, r3, asl #2]
2652
+@ --- do_pop_itos -------------------------------------------------
2653
+ OpcodeEntry do_pop_itos
2654
+ ldrb r3, [java_pc, #1]!
2655
+ ldr r2, [vtos_table, r3, asl #2]
2658
+@ --- do_pop2_vtos -------------------------------------------------
2659
+ OpcodeEntry do_pop2_vtos
2660
+ ldrb r3, [java_pc, #1]!
2661
+ add java_stack, java_stack, #8
2662
+ ldr r2, [vtos_table, r3, asl #2]
2664
+@ --- do_pop2_itos -------------------------------------------------
2665
+ OpcodeEntry do_pop2_itos
2666
+ ldrb r3, [java_pc, #1]!
2667
+ add java_stack, java_stack, #4
2668
+ ldr r2, [vtos_table, r3, asl #2]
2671
+@ --- do_dup_vtos -------------------------------------------------
2672
+ OpcodeEntry do_dup_vtos
2673
+ ldrb r3, [java_pc, #1]!
2674
+ ldr r0, [java_stack, #4]
2675
+ ldr r2, [itos_table, r3, asl #2]
2677
+@ --- do_dup_itos -------------------------------------------------
2678
+ OpcodeEntry do_dup_itos
2679
+ ldrb r3, [java_pc, #1]!
2680
+ str r0, [java_stack], #-4
2681
+ ldr r2, [itos_table, r3, asl #2]
2684
+@ --- do_dup2_vtos -------------------------------------------------
2685
+ OpcodeEntry do_dup2_vtos
2686
+ ldrb r3, [java_pc, #1]!
2687
+ ldmib java_stack, {r0,r1}
2688
+ ldr r2, [itos_table, r3, asl #2]
2691
+@ --- do_dup2_itos -------------------------------------------------
2692
+ OpcodeEntry do_dup2_itos
2693
+ ldrb r3, [java_pc, #1]!
2694
+ ldr r1, [java_stack, #4]
2696
+ ldr r2, [itos_table, r3, asl #2]
2700
+@ --- do_dup_x1_vtos -------------------------------------------------
2701
+ OpcodeEntry do_dup_x1_vtos
2702
+ ldrb r3, [java_pc, #1]!
2703
+ ldmib java_stack!, {r0,r1}
2704
+ ldr r2, [itos_table, r3, asl #2]
2708
+@ --- do_dup_x1_itos -------------------------------------------------
2709
+ OpcodeEntry do_dup_x1_itos
2710
+ ldrb r3, [java_pc, #1]!
2713
+ ldr r2, [itos_table, r3, asl #2]
2717
+@ --- do_dup_x2_vtos -------------------------------------------------
2718
+ OpcodeEntry do_dup_x2_vtos
2720
+ ldrb ip, [java_pc, #1]!
2721
+ ldmib java_stack!, {r1,r2}
2723
+ ldr ip, [itos_table, ip, asl #2]
2724
+ stmda java_stack!, {r1,r2}
2726
+@ --- do_dup_x2_itos -------------------------------------------------
2727
+ OpcodeEntry do_dup_x2_itos
2728
+ ldrb ip, [java_pc, #1]!
2729
+ ldmib java_stack!, {r1,r2}
2731
+ ldr ip, [itos_table, ip, asl #2]
2732
+ stmda java_stack!, {r1,r2}
2735
+@ --- do_dup2_x1_vtos -------------------------------------------------
2736
+ OpcodeEntry do_dup2_x1_vtos
2738
+ ldrb ip, [java_pc, #1]!
2739
+ ldmib java_stack!, {r1,r2}
2740
+ ldr ip, [itos_table, ip, asl #2]
2741
+ stmda java_stack!, {r0,r1}
2742
+ stmda java_stack!, {r1,r2}
2744
+@ --- do_dup2_x1_itos -------------------------------------------------
2745
+ OpcodeEntry do_dup2_x1_itos
2746
+ ldrb ip, [java_pc, #1]!
2747
+ ldmib java_stack!, {r1,r2}
2748
+ ldr ip, [itos_table, ip, asl #2]
2749
+ stmda java_stack!, {r0,r1}
2750
+ stmda java_stack!, {r1,r2}
2753
+@ --- do_dup2_x2_vtos -------------------------------------------------
2754
+ OpcodeEntry do_dup2_x2_vtos
2756
+ ldrb ip, [java_pc, #1]!
2757
+ ldmib java_stack!, {r1,r2,r3}
2758
+ ldr ip, [itos_table, ip, asl #2]
2759
+ stmda java_stack!, {r0,r1}
2760
+ stmda java_stack!, {r1,r2,r3}
2762
+@ --- do_dup2_x2_itos -------------------------------------------------
2763
+ OpcodeEntry do_dup2_x2_itos
2764
+ ldrb ip, [java_pc, #1]!
2765
+ ldmib java_stack!, {r1,r2,r3}
2766
+ ldr ip, [itos_table, ip, asl #2]
2767
+ stmda java_stack!, {r0,r1}
2768
+ stmda java_stack!, {r1,r2,r3}
2771
+@ --- do_swap_vtos -------------------------------------------------
2772
+ OpcodeEntry do_swap_vtos
2774
+ ldrb ip, [java_pc, #1]!
2777
+ ldr ip, [itos_table, ip, asl #2]
2780
+@ --- do_swap_itos -------------------------------------------------
2781
+ OpcodeEntry do_swap_itos
2782
+ ldrb ip, [java_pc, #1]!
2785
+ ldr ip, [itos_table, ip, asl #2]
2789
+@ --- do_imul_vtos -------------------------------------------------
2790
+ OpcodeEntry do_imul_vtos
2792
+@ --- do_imul_itos -------------------------------------------------
2793
+ OpcodeEntry do_imul_itos
2794
+ ldrb ip, [java_pc, #1]!
2796
+ ldr ip, [itos_table, ip, asl #2]
2800
+@ --- do_ladd_vtos -------------------------------------------------
2801
+ OpcodeEntry do_ladd_vtos
2803
+@ --- do_ladd_itos -------------------------------------------------
2804
+ OpcodeEntry do_ladd_itos
2805
+ ldrb ip, [java_pc, #1]!
2806
+ ldmib java_stack!, {r1-r3}
2807
+ ldr ip, [itos_table, ip, asl #2]
2813
+@ --- do_lsub_vtos -------------------------------------------------
2814
+ OpcodeEntry do_lsub_vtos
2816
+@ --- do_lsub_itos -------------------------------------------------
2817
+ OpcodeEntry do_lsub_itos
2818
+ ldrb ip, [java_pc, #1]!
2819
+ ldmib java_stack!, {r1-r3}
2820
+ ldr ip, [itos_table, ip, asl #2]
2826
+@ --- do_lmul_vtos -------------------------------------------------
2827
+ OpcodeEntry do_lmul_vtos
2829
+@ --- do_lmul_itos -------------------------------------------------
2830
+ OpcodeEntry do_lmul_itos
2831
+ ldmib java_stack!, {r1-r3}
2832
+ umull lr, ip, r2, r0
2833
+ mla r1, r2, r1, ip
2834
+ ldrb r2, [java_pc, #1]!
2835
+ mla r1, r3, r0, r1
2837
+ ldr r2, [itos_table, r2, asl #2]
2841
+@ --- do_land_vtos -------------------------------------------------
2842
+ OpcodeEntry do_land_vtos
2844
+@ --- do_land_itos -------------------------------------------------
2845
+ OpcodeEntry do_land_itos
2846
+ ldrb ip, [java_pc, #1]!
2847
+ ldmib java_stack!, {r1-r3}
2848
+ ldr ip, [itos_table, ip, asl #2]
2854
+@ --- do_lor_vtos -------------------------------------------------
2855
+ OpcodeEntry do_lor_vtos
2857
+@ --- do_lor_itos -------------------------------------------------
2858
+ OpcodeEntry do_lor_itos
2859
+ ldrb ip, [java_pc, #1]!
2860
+ ldmib java_stack!, {r1-r3}
2861
+ ldr ip, [itos_table, ip, asl #2]
2867
+@ --- do_lxor_vtos -------------------------------------------------
2868
+ OpcodeEntry do_lxor_vtos
2870
+@ --- do_lxor_itos -------------------------------------------------
2871
+ OpcodeEntry do_lxor_itos
2872
+ ldrb ip, [java_pc, #1]!
2873
+ ldmib java_stack!, {r1-r3}
2874
+ ldr ip, [itos_table, ip, asl #2]
2880
+@ --- do_ineg_vtos -------------------------------------------------
2881
+ OpcodeEntry do_ineg_vtos
2883
+@ --- do_ineg_itos -------------------------------------------------
2884
+ OpcodeEntry do_ineg_itos
2885
+ ldrb r2, [java_pc, #1]!
2887
+ ldr r2, [itos_table, r2, asl #2]
2890
+@ --- do_lneg_vtos -------------------------------------------------
2891
+ OpcodeEntry do_lneg_vtos
2893
+@ --- do_lneg_itos -------------------------------------------------
2894
+ OpcodeEntry do_lneg_itos
2895
+ ldrb ip, [java_pc, #1]!
2898
+ ldr ip, [itos_table, ip, asl #2]
2903
+@ --- do_ishl_vtos -------------------------------------------------
2904
+ OpcodeEntry do_ishl_vtos
2906
+@ --- do_ishl_itos -------------------------------------------------
2907
+ OpcodeEntry do_ishl_itos
2908
+ ldrb ip, [java_pc, #1]!
2911
+ ldr ip, [itos_table, ip, asl #2]
2912
+ mov tos, r1, lsl r0
2915
+@ --- do_lshl_vtos -------------------------------------------------
2916
+ OpcodeEntry do_lshl_vtos
2918
+@ --- do_lshl_itos -------------------------------------------------
2919
+ OpcodeEntry do_lshl_itos
2920
+ ldrb ip, [java_pc, #1]!
2923
+ ldmib java_stack!, {r1,r3}
2924
+ ldr ip, [itos_table, ip, asl #2]
2926
+ movne r3, r1, lsl r2
2927
+ moveq r0, r1, lsl r2
2928
+ moveq r3, r3, lsl r2
2930
+ orreq r3, r3, r1, lsr r2
2934
+@ --- do_ishr_vtos -------------------------------------------------
2935
+ OpcodeEntry do_ishr_vtos
2937
+@ --- do_ishr_itos -------------------------------------------------
2938
+ OpcodeEntry do_ishr_itos
2939
+ ldrb ip, [java_pc, #1]!
2942
+ ldr ip, [itos_table, ip, asl #2]
2943
+ mov tos, r1, asr r0
2946
+@ --- do_lshr_vtos -------------------------------------------------
2947
+ OpcodeEntry do_lshr_vtos
2949
+@ --- do_lshr_itos -------------------------------------------------
2950
+ OpcodeEntry do_lshr_itos
2951
+ ldrb ip, [java_pc, #1]!
2954
+ ldmib java_stack!, {a1, a4}
2955
+ ldr ip, [itos_table, ip, asl #2]
2956
+ movne a2, a4, asr #31
2957
+ movne a1, a4, asr a3
2958
+ moveq a2, a4, asr a3
2959
+ moveq a1, a1, lsr a3
2961
+ orreq a1, a1, a4, lsl a3
2965
+@ --- do_iushr_vtos -------------------------------------------------
2966
+ OpcodeEntry do_iushr_vtos
2968
+@ --- do_iushr_itos -------------------------------------------------
2969
+ OpcodeEntry do_iushr_itos
2970
+ ldrb ip, [java_pc, #1]!
2973
+ ldr ip, [itos_table, ip, asl #2]
2974
+ mov tos, r1, lsr r0
2977
+@ --- do_lushr_vtos -------------------------------------------------
2978
+ OpcodeEntry do_lushr_vtos
2980
+@ --- do_lushr_itos -------------------------------------------------
2981
+ OpcodeEntry do_lushr_itos
2982
+ ldrb ip, [java_pc, #1]!
2985
+ ldmib java_stack!, {a1, a4}
2986
+ ldr ip, [itos_table, ip, asl #2]
2988
+ movne a1, a4, lsr a3
2989
+ moveq a2, a4, lsr a3
2990
+ moveq a1, a1, lsr a3
2992
+ orreq a1, a1, a4, lsl a3
2996
+@ --- do_dcmpl_itos_vfp -------------------------------------------------
2997
+ OpcodeEntry do_dcmpl_itos_vfp
2999
+@ --- do_dcmpl_vtos_vfp -------------------------------------------------
3000
+ OpcodeEntry do_dcmpl_vtos_vfp
3001
+ ldrb r3, [java_pc, #1]!
3002
+ fldd d6, [java_stack, #12]
3003
+ fldd d7, [java_stack, #4]
3005
+ ldr r2, [itos_table, r3, asl #2]
3008
+ bmi do_dcmpl_1_vtos
3010
+ bgt do_dcmpl_1_vtos
3016
+ add java_stack, java_stack, #16
3019
+@ --- do_ldiv_itos -------------------------------------------------
3020
+ OpcodeEntry do_ldiv_itos
3022
+@ --- do_ldiv_vtos -------------------------------------------------
3023
+ OpcodeEntry do_ldiv_vtos
3024
+ ldmib java_stack!, {r2, r3}
3025
+ ldmib java_stack!, {r0, r1}
3028
+ bl __aeabi_ldivmod(PLT)
3029
+ ldrb r3, [java_pc, #1]!
3031
+ ldr r2, [itos_table, r3, asl #2]
3034
+@ --- do_lrem_itos -------------------------------------------------
3035
+ OpcodeEntry do_lrem_itos
3037
+@ --- do_lrem_vtos -------------------------------------------------
3038
+ OpcodeEntry do_lrem_vtos
3039
+ ldmib java_stack!, {r2, r3}
3040
+ ldmib java_stack!, {r0, r1}
3043
+ bl __aeabi_ldivmod(PLT)
3044
+ ldrb r0, [java_pc, #1]!
3046
+ ldr ip, [itos_table, r0, asl #2]
3050
+@ --- do_dadd_itos_vfp -------------------------------------------------
3051
+ OpcodeEntry do_dadd_itos_vfp
3053
+@ --- do_dadd_vtos_vfp -------------------------------------------------
3054
+ OpcodeEntry do_dadd_vtos_vfp
3055
+ ldrb r3, [java_pc, #1]!
3056
+ fldd d7, [java_stack, #12]
3057
+ fldd d6, [java_stack, #4]
3058
+ ldr r2, [dtos_table, r3, asl #2]
3060
+ add java_stack, java_stack, #16
3063
+@ --- do_fadd_itos_vfp -------------------------------------------------
3064
+ OpcodeEntry do_fadd_itos_vfp
3066
+@ --- do_fadd_vtos_vfp -------------------------------------------------
3067
+ OpcodeEntry do_fadd_vtos_vfp
3068
+ ldrb r3, [java_pc, #1]!
3069
+ flds s15, [java_stack, #8]
3070
+ flds s14, [java_stack, #4]
3071
+ ldr r2, [vtos_table, r3, asl #2]
3072
+ fadds s15, s15, s14
3073
+ fsts s15, [java_stack, #8]
3074
+ add java_stack, java_stack, #4
3077
+@ --- do_dsub_itos_vfp -------------------------------------------------
3078
+ OpcodeEntry do_dsub_itos_vfp
3080
+@ --- do_dsub_vtos_vfp -------------------------------------------------
3081
+ OpcodeEntry do_dsub_vtos_vfp
3082
+ ldrb r3, [java_pc, #1]!
3083
+ fldd d7, [java_stack, #12]
3084
+ fldd d6, [java_stack, #4]
3085
+ ldr r2, [dtos_table, r3, asl #2]
3087
+ add java_stack, java_stack, #16
3090
+@ --- do_getstatic_dtos -------------------------------------------------
3091
+ OpcodeEntry do_getstatic_dtos
3093
+ b do_getstatic_vtos
3094
+@ --- do_getstatic_itos -------------------------------------------------
3095
+ OpcodeEntry do_getstatic_itos
3097
+@ --- do_getstatic_vtos -------------------------------------------------
3098
+ OpcodeEntry do_getstatic_vtos
3099
+ ldrb r3, [java_pc,#1]
3100
+ ldrb r2, [java_pc,#2]
3101
+ ldrb ip, [java_pc,#3]!
3102
+ orr r3, r3, r2, lsl #8
3103
+ add r1, constant_pool, #16
3104
+ ldr r3, [r1, r3, lsl #4]! @ r1 = cache
3105
+ ldr ip, [itos_table, ip, asl #2]
3106
+ and r3, r3, #0x00ff0000
3107
+ cmp r3, #178 << 16
3108
+ bne .exit_getstatic
3112
+ movs r2, r2, lsr #29
3113
+ ldrhi tos, [r3, lr] @ C = 1, Z = 0 => R2 == 3, 5, 7
3114
+ movhi pc, ip @ early exit for word accesses
3115
+ ldreqsb tos, [r3, lr] @ Z = 1 => R2 = 0, 1
3116
+ ldrcsh tos, [r3, lr] @ C = 1 => R2 = 1 (overwrites previous load)
3120
+ ldmneia r3, {r0, r1} @ 4, 6
3123
+ ldrsh tos, [r3, lr] @ 2
3126
+@ --- do_arraylength_vtos -------------------------------------------------
3127
+ OpcodeEntry do_arraylength_vtos
3129
+@ --- do_arraylength_itos -------------------------------------------------
3130
+ OpcodeEntry do_arraylength_itos
3131
+ ldrb r2, [java_pc, #1]!
3133
+ beq .exit_arraylength
3134
+ ldr r2, [itos_table, r2, asl #2]
3135
+ ldr tos, [tos, #8]
3138
+@ --- do_astore_0_itos -------------------------------------------------
3139
+ OpcodeEntry do_astore_0_itos
3141
+@ --- do_astore_0_vtos -------------------------------------------------
3142
+ OpcodeEntry do_astore_0_vtos
3143
+ mov r0, java_stack
3144
+ mov r2, java_locals
3147
+ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i(PLT)
3148
+ ldrb r3, [java_pc, #1]!
3149
+ add java_stack, java_stack, #4
3150
+ ldr r2, [vtos_table, r3, asl #2]
3153
+@ --- do_astore_1_itos -------------------------------------------------
3154
+ OpcodeEntry do_astore_1_itos
3156
+@ --- do_astore_1_vtos -------------------------------------------------
3157
+ OpcodeEntry do_astore_1_vtos
3158
+ mov r0, java_stack
3159
+ mov r2, java_locals
3162
+ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i(PLT)
3163
+ ldrb r3, [java_pc, #1]!
3164
+ add java_stack, java_stack, #4
3165
+ ldr r2, [vtos_table, r3, asl #2]
3168
+@ --- do_astore_2_itos -------------------------------------------------
3169
+ OpcodeEntry do_astore_2_itos
3171
+@ --- do_astore_2_vtos -------------------------------------------------
3172
+ OpcodeEntry do_astore_2_vtos
3173
+ mov r0, java_stack
3174
+ mov r2, java_locals
3177
+ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i(PLT)
3178
+ ldrb r3, [java_pc, #1]!
3179
+ add java_stack, java_stack, #4
3180
+ ldr r2, [vtos_table, r3, asl #2]
3183
+@ --- do_astore_3_itos -------------------------------------------------
3184
+ OpcodeEntry do_astore_3_itos
3186
+@ --- do_astore_3_vtos -------------------------------------------------
3187
+ OpcodeEntry do_astore_3_vtos
3188
+ mov r0, java_stack
3189
+ mov r2, java_locals
3192
+ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i(PLT)
3193
+ ldrb r3, [java_pc, #1]!
3194
+ add java_stack, java_stack, #4
3195
+ ldr r2, [vtos_table, r3, asl #2]
3198
+@ --- do_astore_itos -------------------------------------------------
3199
+ OpcodeEntry do_astore_itos
3201
+@ --- do_astore_vtos -------------------------------------------------
3202
+ OpcodeEntry do_astore_vtos
3203
+ mov r0, java_stack
3204
+ ldrb r3, [java_pc, #1]
3205
+ mov r2, java_locals
3207
+ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i(PLT)
3208
+ ldrb r3, [java_pc, #2]!
3209
+ add java_stack, java_stack, #4
3210
+ ldr r2, [vtos_table, r3, asl #2]
3213
+@ --- do_dcmpg_itos_vfp -------------------------------------------------
3214
+ OpcodeEntry do_dcmpg_itos_vfp
3216
+@ --- do_dcmpg_vtos_vfp -------------------------------------------------
3217
+ OpcodeEntry do_dcmpg_vtos_vfp
3218
+ ldrb r3, [java_pc, #1]!
3219
+ fldd d6, [java_stack, #12]
3220
+ fldd d7, [java_stack, #4]
3222
+ ldr r2, [itos_table, r3, asl #2]
3225
+ bmi do_dcmpg_1_itos
3227
+ bgt do_dcmpg_1_itos
3233
+ add java_stack, java_stack, #16
3236
+@ --- do_lcmp_vtos -------------------------------------------------
3237
+ OpcodeEntry do_lcmp_vtos
3239
+@ --- do_lcmp_itos -------------------------------------------------
3240
+ OpcodeEntry do_lcmp_itos
3241
+ ldmib java_stack!, {r1-r3}
3242
+ ldrb ip, [java_pc, #1]!
3246
+ ldr ip, [itos_table, ip, asl #2]
3248
+ rsblt tos, tos, #0
3251
+@ --- do_fsub_itos_vfp -------------------------------------------------
3252
+ OpcodeEntry do_fsub_itos_vfp
3254
+@ --- do_fsub_vtos_vfp -------------------------------------------------
3255
+ OpcodeEntry do_fsub_vtos_vfp
3256
+ ldrb r3, [java_pc, #1]!
3257
+ flds s15, [java_stack, #8]
3258
+ flds s14, [java_stack, #4]
3259
+ ldr r2, [vtos_table, r3, asl #2]
3260
+ fsubs s15, s15, s14
3261
+ fsts s15, [java_stack, #8]
3262
+ add java_stack, java_stack, #4
3265
+@ --- do_dmul_itos_vfp -------------------------------------------------
3266
+ OpcodeEntry do_dmul_itos_vfp
3268
+@ --- do_dmul_vtos_vfp -------------------------------------------------
3269
+ OpcodeEntry do_dmul_vtos_vfp
3270
+ ldrb r3, [java_pc, #1]!
3271
+ fldd d5, [java_stack, #12]
3272
+ fldd d7, [java_stack, #4]
3273
+ ldr r2, [dtos_table, r3, asl #2]
3275
+ add java_stack, java_stack, #16
3278
+@ --- do_fmul_itos_vfp -------------------------------------------------
3279
+ OpcodeEntry do_fmul_itos_vfp
3281
+@ --- do_fmul_vtos_vfp -------------------------------------------------
3282
+ OpcodeEntry do_fmul_vtos_vfp
3283
+ ldrb r3, [java_pc, #1]!
3284
+ flds s13, [java_stack, #8]
3285
+ flds s15, [java_stack, #4]
3286
+ ldr r2, [vtos_table, r3, asl #2]
3287
+ fmuls s14, s13, s15
3288
+ fsts s14, [java_stack, #8]
3289
+ add java_stack, java_stack, #4
3292
+@ --- do_ddiv_itos_vfp -------------------------------------------------
3293
+ OpcodeEntry do_ddiv_itos_vfp
3295
+@ --- do_ddiv_vtos_vfp -------------------------------------------------
3296
+ OpcodeEntry do_ddiv_vtos_vfp
3297
+ ldrb r3, [java_pc, #1]!
3298
+ fldd d5, [java_stack, #12]
3299
+ fldd d7, [java_stack, #4]
3300
+ ldr r2, [dtos_table, r3, asl #2]
3302
+ add java_stack, java_stack, #16
3305
+@ --- do_fdiv_itos_vfp -------------------------------------------------
3306
+ OpcodeEntry do_fdiv_itos_vfp
3308
+@ --- do_fdiv_vtos_vfp -------------------------------------------------
3309
+ OpcodeEntry do_fdiv_vtos_vfp
3310
+ ldrb r3, [java_pc, #1]!
3311
+ flds s13, [java_stack, #8]
3312
+ flds s15, [java_stack, #4]
3313
+ ldr r2, [vtos_table, r3, asl #2]
3314
+ fdivs s14, s13, s15
3315
+ fsts s14, [java_stack, #8]
3316
+ add java_stack, java_stack, #4
3319
+@ --- do_drem_vtos -------------------------------------------------
3320
+ OpcodeEntry do_drem_vtos
3322
+@ --- do_drem_itos -------------------------------------------------
3323
+ OpcodeEntry do_drem_itos
3326
+ ldmib java_stack!, {r0, r1}
3328
+ ldrb r3, [java_pc, #1]!
3330
+ ldr r2, [itos_table, r3, asl #2]
3333
+@ --- do_frem_vtos -------------------------------------------------
3334
+ OpcodeEntry do_frem_vtos
3336
+@ --- do_frem_itos -------------------------------------------------
3337
+ OpcodeEntry do_frem_itos
3338
+ bl __aeabi_f2d(PLT)
3340
+ stmda java_stack!, {r0, r1}
3342
+ bl __aeabi_f2d(PLT)
3343
+ ldmib java_stack!, {r2, r3}
3345
+ bl __aeabi_d2f(PLT)
3346
+ ldrb r3, [java_pc, #1]!
3347
+ ldr r2, [itos_table, r3, asl #2]
3350
+@ --- do_fneg_vtos -------------------------------------------------
3351
+ OpcodeEntry do_fneg_vtos
3353
+@ --- do_fneg_itos -------------------------------------------------
3354
+ OpcodeEntry do_fneg_itos
3355
+ ldrb r3, [java_pc, #1]!
3356
+ eor tos, tos, #0x80000000
3357
+ ldr r2, [itos_table, r3, asl #2]
3360
+@ --- do_dneg_vtos -------------------------------------------------
3361
+ OpcodeEntry do_dneg_vtos
3363
+@ --- do_dneg_itos -------------------------------------------------
3364
+ OpcodeEntry do_dneg_itos
3365
+ ldrb r3, [java_pc, #1]!
3367
+ eor r1, r1, #0x80000000
3368
+ ldr r2, [itos_table, r3, asl #2]
3372
+@ --- do_i2f_vtos_vfp -------------------------------------------------
3373
+ OpcodeEntry do_i2f_vtos_vfp
3375
+@ --- do_i2f_itos_vfp -------------------------------------------------
3376
+ OpcodeEntry do_i2f_itos_vfp
3377
+ ldrb r3, [java_pc, #1]!
3380
+ ldr r2, [vtos_table, r3, asl #2]
3381
+ fsts s15, [java_stack]
3382
+ sub java_stack, java_stack, #4
3385
+@ --- do_i2l_vtos -------------------------------------------------
3386
+ OpcodeEntry do_i2l_vtos
3388
+@ --- do_i2l_itos -------------------------------------------------
3389
+ OpcodeEntry do_i2l_itos
3390
+ ldrb r2, [java_pc, #1]!
3391
+ mov r1, tos, asr #31
3392
+ ldr r2, [itos_table, r2, asl #2]
3396
+@ --- do_i2d_vtos_vfp -------------------------------------------------
3397
+ OpcodeEntry do_i2d_vtos_vfp
3399
+@ --- do_i2d_itos_vfp -------------------------------------------------
3400
+ OpcodeEntry do_i2d_itos_vfp
3401
+ ldrb r3, [java_pc, #1]!
3404
+ ldr r2, [dtos_table, r3, asl #2]
3407
+@ --- do_l2i_vtos -------------------------------------------------
3408
+ OpcodeEntry do_l2i_vtos
3410
+@ --- do_l2i_itos -------------------------------------------------
3411
+ OpcodeEntry do_l2i_itos
3412
+ ldrb r2, [java_pc, #1]!
3413
+ add java_stack, java_stack, #4
3414
+ ldr r2, [itos_table, r2, asl #2]
3417
+@ --- do_l2f_vtos -------------------------------------------------
3418
+ OpcodeEntry do_l2f_vtos
3420
+@ --- do_l2f_itos -------------------------------------------------
3421
+ OpcodeEntry do_l2f_itos
3423
+ bl __aeabi_l2f(PLT)
3424
+ ldrb r3, [java_pc, #1]!
3425
+ ldr r2, [itos_table, r3, asl #2]
3428
+@ --- do_l2d_vtos -------------------------------------------------
3429
+ OpcodeEntry do_l2d_vtos
3431
+@ --- do_l2d_itos -------------------------------------------------
3432
+ OpcodeEntry do_l2d_itos
3434
+ bl __aeabi_l2d(PLT)
3435
+ ldrb r2, [java_pc, #1]!
3437
+ ldr r2, [itos_table, r2, asl #2]
3440
+@ --- do_f2i_vtos -------------------------------------------------
3441
+ OpcodeEntry do_f2i_vtos
3443
+@ --- do_f2i_itos -------------------------------------------------
3444
+ OpcodeEntry do_f2i_itos
3445
+ bl _ZN13SharedRuntime3f2iEf(PLT)
3446
+ ldrb r3, [java_pc, #1]!
3447
+ ldr r2, [itos_table, r3, asl #2]
3450
+@ --- do_f2l_vtos -------------------------------------------------
3451
+ OpcodeEntry do_f2l_vtos
3453
+@ --- do_f2l_itos -------------------------------------------------
3454
+ OpcodeEntry do_f2l_itos
3455
+ bl _ZN13SharedRuntime3f2lEf(PLT)
3456
+ ldrb r3, [java_pc, #1]!
3458
+ ldr r2, [itos_table, r3, asl #2]
3461
+@ --- do_f2d_itos_vfp -------------------------------------------------
3462
+ OpcodeEntry do_f2d_itos_vfp
3464
+@ --- do_f2d_vtos_vfp -------------------------------------------------
3465
+ OpcodeEntry do_f2d_vtos_vfp
3466
+ flds s14, [java_stack, #4]
3468
+ ldrb r3, [java_pc, #1]!
3469
+ add java_stack, java_stack, #4
3470
+ ldr r2, [dtos_table, r3, asl #2]
3473
+@ --- do_d2i_vtos -------------------------------------------------
3474
+ OpcodeEntry do_d2i_vtos
3476
+@ --- do_d2i_itos -------------------------------------------------
3477
+ OpcodeEntry do_d2i_itos
3479
+ bl _ZN13SharedRuntime3d2iEd(PLT)
3480
+ ldrb r3, [java_pc, #1]!
3481
+ ldr r2, [itos_table, r3, asl #2]
3484
+@ --- do_d2f_itos_vfp -------------------------------------------------
3485
+ OpcodeEntry do_d2f_itos_vfp
3487
+@ --- do_d2f_vtos_vfp -------------------------------------------------
3488
+ OpcodeEntry do_d2f_vtos_vfp
3489
+ fldd d7, [java_stack, #4]
3491
+ fsts s14, [java_stack, #8]
3492
+ ldrb r3, [java_pc, #1]!
3493
+ add java_stack, java_stack, #4
3494
+ ldr r2, [vtos_table, r3, asl #2]
3497
+@ --- do_d2l_vtos -------------------------------------------------
3498
+ OpcodeEntry do_d2l_vtos
3500
+@ --- do_d2l_itos -------------------------------------------------
3501
+ OpcodeEntry do_d2l_itos
3503
+ bl _ZN13SharedRuntime3d2lEd(PLT)
3504
+ ldrb r3, [java_pc, #1]!
3506
+ ldr r2, [itos_table, r3, asl #2]
3509
+@ --- do_i2b_vtos -------------------------------------------------
3510
+ OpcodeEntry do_i2b_vtos
3512
+@ --- do_i2b_itos -------------------------------------------------
3513
+ OpcodeEntry do_i2b_itos
3514
+ ldrb r2, [java_pc, #1]!
3515
+ mov tos, tos, asl #24
3516
+ ldr r2, [itos_table, r2, asl #2]
3517
+ mov tos, tos, asr #24
3520
+@ --- do_i2c_vtos -------------------------------------------------
3521
+ OpcodeEntry do_i2c_vtos
3523
+@ --- do_i2c_itos -------------------------------------------------
3524
+ OpcodeEntry do_i2c_itos
3525
+ ldrb r2, [java_pc, #1]!
3526
+ mov tos, tos, asl #16
3527
+ ldr r2, [itos_table, r2, asl #2]
3528
+ mov tos, tos, lsr #16
3531
+@ --- do_i2s_vtos -------------------------------------------------
3532
+ OpcodeEntry do_i2s_vtos
3534
+@ --- do_i2s_itos -------------------------------------------------
3535
+ OpcodeEntry do_i2s_itos
3536
+ ldrb r2, [java_pc, #1]!
3537
+ mov tos, tos, asl #16
3538
+ ldr r2, [itos_table, r2, asl #2]
3539
+ mov tos, tos, asr #16
3542
+@ --- do_ldc_itos -------------------------------------------------
3543
+ OpcodeEntry do_ldc_itos
3545
+@ --- do_ldc_vtos -------------------------------------------------
3546
+ OpcodeEntry do_ldc_vtos
3547
+ ldr r3, [istate, #ISTATE_JAVA_METHOD]
3548
+ ldrb r1, [java_pc, #1]
3556
+ cmpne r3, #4 @ float
3557
+ cmpne r3, #8 @ string
3560
+ ldrb ip, [java_pc, #2]!
3561
+ add r3, r0, r1, lsl #2
3562
+ ldr tos, [r3, #32]
3563
+ ldr pc, [itos_table, ip, lsl #2]
3565
+@ --- do_ldc_w_itos -------------------------------------------------
3566
+ OpcodeEntry do_ldc_w_itos
3568
+@ --- do_ldc_w_vtos -------------------------------------------------
3569
+ OpcodeEntry do_ldc_w_vtos
3570
+ ldr r3, [istate, #ISTATE_JAVA_METHOD]
3571
+ ldrb r0, [java_pc, #1]
3572
+ ldrb r2, [java_pc, #2]
3575
+ orr r2, r2, r0, asl #8
3581
+ cmpne r3, #4 @ float
3582
+ cmpne r3, #8 @ string
3585
+ ldrb r1, [java_pc, #3]!
3586
+ add r3, ip, r2, lsl #2
3587
+ ldr tos, [r3, #32]
3588
+ ldr pc, [itos_table, r1, lsl #2]
3590
+@ --- do_ldc2_w_itos -------------------------------------------------
3591
+ OpcodeEntry do_ldc2_w_itos
3593
+@ --- do_ldc2_w_vtos -------------------------------------------------
3594
+ OpcodeEntry do_ldc2_w_vtos
3595
+ ldr r3, [istate, #ISTATE_JAVA_METHOD]
3596
+ ldrb r0, [java_pc, #1]
3597
+ ldrb r2, [java_pc, #2]
3600
+ orr r2, r2, r0, asl #8
3609
+ ldrb r3, [java_pc, #3]!
3610
+ add ip, ip, r2, lsl #2
3612
+ ldmia ip, {r0, r1}
3614
+ ldr pc, [itos_table, r3, lsl #2]
3616
+@ --- do_fcmpl_itos_vfp -------------------------------------------------
3617
+ OpcodeEntry do_fcmpl_itos_vfp
3619
+@ --- do_fcmpl_vtos_vfp -------------------------------------------------
3620
+ OpcodeEntry do_fcmpl_vtos_vfp
3621
+ flds s14, [java_stack, #8]
3622
+ flds s15, [java_stack, #4]
3624
+ add java_stack, java_stack, #8
3627
+ bmi do_fcmpl_1_itos
3629
+ bgt do_fcmpl_1_itos
3635
+ ldrb r3, [java_pc, #1]!
3636
+ ldr r2, [itos_table, r3, asl #2]
3639
+@ --- do_fcmpg_itos_vfp -------------------------------------------------
3640
+ OpcodeEntry do_fcmpg_itos_vfp
3642
+@ --- do_fcmpg_vtos_vfp -------------------------------------------------
3643
+ OpcodeEntry do_fcmpg_vtos_vfp
3644
+ flds s14, [java_stack, #8]
3645
+ flds s15, [java_stack, #4]
3647
+ add java_stack, java_stack, #8
3650
+ bmi do_fcmpg_1_itos
3652
+ bgt do_fcmpg_1_itos
3658
+ ldrb r3, [java_pc, #1]!
3659
+ ldr r2, [itos_table, r3, asl #2]
3662
+@ --- do_tableswitch_vtos_unsafe -------------------------------------------------
3663
+ OpcodeEntry do_tableswitch_vtos_unsafe
3664
+do_tableswitch_vtos_unsafe:
3666
+@ --- do_tableswitch_itos_unsafe -------------------------------------------------
3667
+ OpcodeEntry do_tableswitch_itos_unsafe
3668
+do_tableswitch_itos_unsafe:
3670
+ bic a1, java_pc, #3
3672
+@ BYTESEX_REVERSE a3, a4, a3
3674
+ eor a3, a4, a4, ror #16
3675
+ bic a3, a3, #0xff0000
3676
+ mov a4, a4, ror #8
3677
+ eor a3, a4, a3, lsr #8
3680
+@ BYTESEX_REVERSE a4, a4, ip
3682
+ eor ip, a4, a4, ror #16
3683
+ bic ip, ip, #0xff0000
3684
+ mov a4, a4, ror #8
3685
+ eor a4, a4, ip, lsr #8
3691
+ addcs a1,a1,a2,LSL #2
3693
+@ BYTESEX_REVERSE a1, a1, a4
3695
+ eor a4, a1, a1, ror #16
3696
+ bic a4, a4, #0xff0000
3697
+ mov a1, a1, ror #8
3698
+ eors ip, a1, a4, lsr #8
3700
+ ldrb r2, [java_pc, ip]!
3701
+ ldr pc, [vtos_table, r2, lsl #2]
3703
+@ --- do_lookupswitch_vtos_unsafe -------------------------------------------------
3704
+ OpcodeEntry do_lookupswitch_vtos_unsafe
3705
+do_lookupswitch_vtos_unsafe:
3707
+@ --- do_lookupswitch_itos_unsafe -------------------------------------------------
3708
+ OpcodeEntry do_lookupswitch_itos_unsafe
3709
+do_lookupswitch_itos_unsafe:
3711
+ bic a1, java_pc, #3
3712
+@ BYTESEX_REVERSE a2, a2, ip
3714
+ eor ip, a2, a2, ror #16
3715
+ bic ip, ip, #0xff0000
3716
+ mov a2, a2, ror #8
3717
+ eor a2, a2, ip, lsr #8
3720
+@ BYTESEX_REVERSE a3, a3, ip
3722
+ eor ip, a3, a3, ror #16
3723
+ bic ip, ip, #0xff0000
3724
+ mov a3, a3, ror #8
3725
+ eor a3, a3, ip, lsr #8
3728
+ bmi .lookupswitch1_unsafe
3730
+.lookupswitch0_unsafe:
3733
+ beq .lookupswitch2_unsafe
3735
+ bpl .lookupswitch0_unsafe
3736
+.lookupswitch1_unsafe:
3737
+ bic a1, java_pc, #3
3738
+.lookupswitch2_unsafe:
3740
+@ BYTESEX_REVERSE a2, a2, ip
3742
+ eor ip, a2, a2, ror #16
3743
+ bic ip, ip, #0xff0000
3744
+ mov a2, a2, ror #8
3745
+ eors ip, a2, ip, lsr #8
3747
+ ldrb r2, [java_pc, ip]!
3748
+ ldr pc, [vtos_table, r2, lsl #2]
3750
+@---- DONE TO HERE ---
3752
+@ --- run_opt_exit -------------------------------------------------
3753
+ OpcodeEntry run_opt_exit
3754
+.dtos_exit_dastore:
3755
+ sub java_pc, java_pc, #1
3756
+ sub java_stack, java_stack, #8
3759
+.itos_exit_lastore:
3760
+ sub java_pc, java_pc, #1
3761
+ sub java_stack, java_stack, #12
3765
+.itos_exit_iastore:
3766
+ sub java_pc, java_pc, #1
3767
+ sub java_stack, java_stack, #8
3773
+ sub java_pc, java_pc, #1
3774
+ sub java_stack, java_stack, #4
3779
+ sub java_stack, java_stack, #4
3782
+ sub java_stack, java_stack, #4
3783
+ sub java_pc, java_pc, ip
3786
+ sub java_stack, java_stack, #8
3787
+ sub java_pc, java_pc, ip
3792
+ sub java_pc, java_pc, ip
3796
+ sub java_pc, java_pc, #3
3802
+ sub java_pc, java_pc, #3
3810
+ sub java_pc, java_pc, #3
3814
+ sub java_stack, java_stack, #16
3818
+ sub java_stack, java_stack, #4
3820
+ sub java_pc, java_pc, #1 @ undo autoincrement
3822
+ str java_pc, [istate, #ISTATE_JAVA_PC]
3823
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
3825
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
3828
+ sub java_pc, java_pc, #1
3838
+@do_putstatic_itos:
3840
+@do_invokestatic_itos:
3841
+@do_invokevirtual_itos:
3842
+@do_invokespecial_itos:
3843
+do_invokeinterface_itos:
3844
+do_xxxunusedxxx_itos:
3850
+do_instanceof_itos:
3851
+do_monitorenter_itos:
3852
+do_monitorexit_itos:
3854
+do_multianewarray_itos:
3859
+do_breakpoint_itos:
3876
+do_tableswitch_itos:
3877
+do_lookupswitch_itos:
3888
+@do_putstatic_vtos:
3890
+@do_invokestatic_vtos:
3891
+@do_invokevirtual_vtos:
3892
+@do_invokespecial_vtos:
3893
+do_invokeinterface_vtos:
3894
+do_xxxunusedxxx_vtos:
3900
+do_instanceof_vtos:
3901
+do_monitorenter_vtos:
3902
+do_monitorexit_vtos:
3904
+do_multianewarray_vtos:
3909
+do_breakpoint_vtos:
3926
+do_tableswitch_vtos:
3927
+do_lookupswitch_vtos:
3930
+ str java_pc, [istate, #ISTATE_JAVA_PC]
3931
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
3933
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
3935
+@ ----- The Bytecode Implementations --------------------------------------
3937
+@ --- do_irem -------------------------------------------------
3938
+ OpcodeEntry do_irem
3943
+ ldrb lr, [r8, #1]!
3944
+ adr r3, .rem_table
3946
+ ldrcc r3, [r3, r0, lsl #2]
3947
+ ldr lr, [vtos_table, lr, asl #2]
3950
+ ands a4, a1, #0x80000000
3952
+ eors ip, a4, a2, ASR #32
3956
+ cmp a3, a2, LSR #8
3957
+ movls a3, a3, LSL #8
3959
+ cmp a3, a2, LSR #1
3961
+ cmp a3, a2, LSR #2
3963
+ cmp a3, a2, LSR #3
3965
+ cmp a3, a2, LSR #4
3967
+ cmp a3, a2, LSR #5
3969
+ cmp a3, a2, LSR #6
3971
+ cmp a3, a2, LSR #7
3974
+@ not executed when falling into .r_loop2
3975
+ movhi a3, a3, LSR #8
3976
+ cmp a2, a3, LSL #7
3978
+ subcs a2, a2, a3, LSL #7
3979
+ cmp a2, a3, LSL #6
3982
+ subcs a2, a2, a3, LSL #6
3983
+ cmp a2, a3, LSL #5
3986
+ subcs a2, a2, a3, LSL #5
3987
+ cmp a2, a3, LSL #4
3990
+ subcs a2, a2, a3, LSL #4
3991
+ cmp a2, a3, LSL #3
3994
+ subcs a2, a2, a3, LSL #3
3995
+ cmp a2, a3, LSL #2
3998
+ subcs a2, a2, a3, LSL #2
3999
+ cmp a2, a3, LSL #1
4002
+ subcs a2, a2, a3, LSL #1
4009
+ movs ip, ip, lsl #1
4011
+ str a2, [java_stack], #-4
4050
+ str a1, [java_stack], #-4
4053
+ add ip, a2, a2, lsr #31
4054
+ mov a1, ip, asr #1
4055
+ sub a1, a2, a1, lsl #1
4056
+ str a1, [java_stack], #-4
4060
+ smull a3, a4, a2, a1
4061
+ sub a1, a4, a2, asr #31
4062
+ add ip, a1, a1, lsl #1
4064
+ str a1, [java_stack], #-4
4069
+ mov a1, ip, asr #2
4070
+ sub a1, a2, a1, lsl #2
4071
+ str a1, [java_stack], #-4
4075
+ smull a3, a4, a2, a1
4076
+ mov ip, a2, asr #31
4077
+ rsb a1, ip, a4, asr #1
4078
+ add ip, a1, a1, lsl #2
4080
+ str a1, [java_stack], #-4
4084
+ smull a3, a4, a2, a1
4085
+ sub a1, a4, a2, asr #31
4086
+ add ip, a1, a1, lsl #1
4087
+ sub a1, a2, ip, lsl #1
4088
+ str a1, [java_stack], #-4
4092
+ smull a3, a4, a2, a1
4093
+ mov a1, a2, asr #31
4095
+ rsb a1, a1, a3, asr #2
4096
+ rsb ip, a1, a1, lsl #3
4098
+ str a1, [java_stack], #-4
4103
+ mov a1, ip, asr #3
4104
+ sub a1, a2, a1, lsl #3
4105
+ str a1, [java_stack], #-4
4109
+ smull a3, a4, a2, a1
4110
+ mov ip, a2, asr #31
4111
+ rsb a1, ip, a4, asr #1
4112
+ add ip, a1, a1, lsl #3
4114
+ str a1, [java_stack], #-4
4118
+ smull a3, a4, a2, a1
4119
+ mov ip, a2, asr #31
4120
+ rsb a1, ip, a4, asr #2
4121
+ add ip, a1, a1, lsl #2
4122
+ sub a1, a2, ip, lsl #1
4123
+ str a1, [java_stack], #-4
4127
+ smull a3, a4, a2, a1
4128
+ mov ip, a2, asr #31
4129
+ rsb a1, ip, a4, asr #1
4130
+ add ip, a1, a1, lsl #2
4131
+ add ip, a1, ip, lsl #1
4133
+ str a1, [java_stack], #-4
4137
+ smull a3, a4, a2, a1
4138
+ mov ip, a2, asr #31
4139
+ rsb a1, ip, a4, asr #1
4140
+ add ip, a1, a1, lsl #1
4141
+ sub a1, a2, ip, lsl #2
4142
+ str a1, [java_stack], #-4
4146
+ smull a3, a4, a2, a1
4147
+ mov ip, a2, asr #31
4148
+ rsb a1, ip, a4, asr #2
4149
+ add ip, a1, a1, lsl #1
4150
+ add ip, a1, ip, lsl #2
4152
+ str a1, [java_stack], #-4
4156
+ smull a3, a4, a2, a1
4157
+ mov a1, a2, asr #31
4159
+ rsb a1, a1, a3, asr #3
4160
+ rsb ip, a1, a1, lsl #3
4161
+ sub a1, a2, ip, lsl #1
4162
+ str a1, [java_stack], #-4
4166
+ smull a3, a4, a2, a1
4167
+ mov a1, a2, asr #31
4169
+ rsb a1, a1, a3, asr #3
4170
+ rsb ip, a1, a1, lsl #4
4172
+ str a1, [java_stack], #-4
4177
+ mov a1, ip, asr #4
4178
+ sub a1, a2, a1, lsl #4
4179
+ str a1, [java_stack], #-4
4183
+ smull a3, a4, a2, a1
4184
+ mov ip, a2, asr #31
4185
+ rsb a1, ip, a4, asr #3
4186
+ add ip, a1, a1, lsl #4
4188
+ str a1, [java_stack], #-4
4192
+ smull a3, a4, a2, a1
4193
+ mov ip, a2, asr #31
4194
+ rsb a1, ip, a4, asr #2
4195
+ add ip, a1, a1, lsl #3
4196
+ sub a1, a2, ip, lsl #1
4197
+ str a1, [java_stack], #-4
4201
+ smull a3, a4, a2, a1
4202
+ mov ip, a2, asr #31
4203
+ rsb a1, ip, a4, asr #3
4204
+ add ip, a1, a1, lsl #3
4205
+ add ip, a1, ip, lsl #1
4207
+ str a1, [java_stack], #-4
4211
+ smull a3, a4, a2, a1
4212
+ mov ip, a2, asr #31
4213
+ rsb a1, ip, a4, asr #3
4214
+ add ip, a1, a1, lsl #2
4215
+ sub a1, a2, ip, lsl #2
4216
+ str a1, [java_stack], #-4
4220
+ smull a3, a4, a2, a1
4221
+ mov ip, a2, asr #31
4222
+ rsb a1, ip, a4, asr #2
4223
+ add ip, a1, a1, lsl #1
4224
+ rsb ip, ip, ip, lsl #3
4226
+ str a1, [java_stack], #-4
4230
+ smull a3, a4, a2, a1
4231
+ mov ip, a2, asr #31
4232
+ rsb a1, ip, a4, asr #2
4233
+ add ip, a1, a1, lsl #2
4234
+ add ip, a1, ip, lsl #1
4235
+ sub a1, a2, ip, lsl #1
4236
+ str a1, [java_stack], #-4
4240
+ smull a3, a4, a2, a1
4241
+ mov a1, a2, asr #31
4243
+ rsb a1, a1, a3, asr #4
4244
+ add ip, a1, a1, lsl #1
4245
+ rsb ip, a1, ip, lsl #3
4247
+ str a1, [java_stack], #-4
4251
+ smull a3, a4, a2, a1
4252
+ mov ip, a2, asr #31
4253
+ rsb a1, ip, a4, asr #2
4254
+ add ip, a1, a1, lsl #1
4255
+ sub a1, a2, ip, lsl #3
4256
+ str a1, [java_stack], #-4
4260
+ smull a3, a4, a2, a1
4261
+ mov ip, a2, asr #31
4262
+ rsb a1, ip, a4, asr #3
4263
+ add ip, a1, a1, lsl #2
4264
+ add ip, ip, ip, lsl #2
4266
+ str a1, [java_stack], #-4
4270
+ smull a3, a4, a2, a1
4271
+ mov ip, a2, asr #31
4272
+ rsb a1, ip, a4, asr #3
4273
+ add ip, a1, a1, lsl #1
4274
+ add ip, a1, ip, lsl #2
4275
+ sub a1, a2, ip, lsl #1
4276
+ str a1, [java_stack], #-4
4280
+ smull a3, a4, a2, a1
4281
+ mov ip, a2, asr #31
4282
+ rsb a1, ip, a4, asr #3
4283
+ add ip, a1, a1, lsl #1
4284
+ add ip, ip, ip, lsl #3
4286
+ str a1, [java_stack], #-4
4290
+ smull a3, a4, a2, a1
4291
+ mov a1, a2, asr #31
4293
+ rsb a1, a1, a3, asr #4
4294
+ rsb ip, a1, a1, lsl #3
4295
+ sub a1, a2, ip, lsl #2
4296
+ str a1, [java_stack], #-4
4300
+ smull a3, a4, a2, a1
4301
+ mov a1, a2, asr #31
4303
+ rsb a1, a1, a3, asr #4
4304
+ rsb ip, a1, a1, lsl #3
4305
+ add ip, a1, ip, lsl #2
4307
+ str a1, [java_stack], #-4
4311
+ smull a3, a4, a2, a1
4312
+ mov a1, a2, asr #31
4314
+ rsb a1, a1, a3, asr #4
4315
+ rsb ip, a1, a1, lsl #4
4316
+ sub a1, a2, ip, lsl #1
4317
+ str a1, [java_stack], #-4
4321
+ smull a3, a4, a2, a1
4322
+ mov a1, a2, asr #31
4324
+ rsb a1, a1, a3, asr #4
4325
+ rsb ip, a1, a1, lsl #5
4327
+ str a1, [java_stack], #-4
4330
+@ --- do_idiv -------------------------------------------------
4331
+ OpcodeEntry do_idiv
4336
+ ldrb lr, [r8, #1]!
4337
+ adr r3, .div_table
4338
+@ add r3, vtos_table, #div_table
4340
+ ldrcc r3, [r3, r0, lsl #2]
4341
+ ldr lr, [vtos_table, lr, asl #2]
4344
+ ands a4, a1, #0x80000000
4346
+ eors ip, a4, a2, ASR #32
4350
+ cmp a3, a2, LSR #8
4351
+ movls a3, a3, LSL #8
4353
+ cmp a3, a2, LSR #1
4355
+ cmp a3, a2, LSR #2
4357
+ cmp a3, a2, LSR #3
4359
+ cmp a3, a2, LSR #4
4361
+ cmp a3, a2, LSR #5
4363
+ cmp a3, a2, LSR #6
4365
+ cmp a3, a2, LSR #7
4368
+@ not executed when falling into .s_loop2
4369
+ movhi a3, a3, LSR #8
4370
+ cmp a2, a3, LSL #7
4372
+ subcs a2, a2, a3, LSL #7
4373
+ cmp a2, a3, LSL #6
4376
+ subcs a2, a2, a3, LSL #6
4377
+ cmp a2, a3, LSL #5
4380
+ subcs a2, a2, a3, LSL #5
4381
+ cmp a2, a3, LSL #4
4384
+ subcs a2, a2, a3, LSL #4
4385
+ cmp a2, a3, LSL #3
4388
+ subcs a2, a2, a3, LSL #3
4389
+ cmp a2, a3, LSL #2
4392
+ subcs a2, a2, a3, LSL #2
4393
+ cmp a2, a3, LSL #1
4396
+ subcs a2, a2, a3, LSL #1
4403
+ movs ip, ip, lsl #1
4405
+ str a4, [java_stack], #-4
4443
+ str a2, [java_stack], #-4
4446
+ add a2, a2, a2, lsr #31
4447
+ mov a1, a2, asr #1
4448
+ str r0, [java_stack], #-4
4452
+ smull a3, a4, a2, a1
4453
+ sub a1, a4, a2, asr #31
4454
+ str r0, [java_stack], #-4
4459
+ mov a1, a4, asr #2
4460
+ str r0, [java_stack], #-4
4464
+ smull a3, a4, a2, a1
4465
+ mov a3, a2, asr #31
4466
+ rsb a1, a3, a4, asr #1
4467
+ str r0, [java_stack], #-4
4471
+ smull a3, a4, a2, a1
4472
+ sub a1, a4, a2, asr #31
4473
+ str r0, [java_stack], #-4
4477
+ smull a3, a4, a2, a1
4478
+ mov a1, a2, asr #31
4480
+ rsb a1, a1, a3, asr #2
4481
+ str r0, [java_stack], #-4
4486
+ mov a1, a3, asr #3
4487
+ str r0, [java_stack], #-4
4491
+ smull a3, a4, a2, a1
4492
+ mov a3, a2, asr #31
4493
+ rsb a1, a3, a4, asr #1
4494
+ str r0, [java_stack], #-4
4498
+ smull a3, a4, a2, a1
4499
+ mov a3, a2, asr #31
4500
+ rsb a1, a3, a4, asr #2
4501
+ str r0, [java_stack], #-4
4505
+ smull a3, a4, a2, a1
4506
+ mov a3, a2, asr #31
4507
+ rsb a1, a3, a4, asr #1
4508
+ str r0, [java_stack], #-4
4512
+ smull a3, a4, a2, a1
4513
+ mov a3, a2, asr #31
4514
+ rsb a1, a3, a4, asr #1
4515
+ str r0, [java_stack], #-4
4519
+ smull a3, a4, a2, a1
4520
+ mov a3, a2, asr #31
4521
+ rsb a1, a3, a4, asr #2
4522
+ str r0, [java_stack], #-4
4526
+ smull a3, a4, a2, a1
4527
+ mov a1, a2, asr #31
4529
+ rsb a1, a1, a3, asr #3
4530
+ str r0, [java_stack], #-4
4534
+ smull a3, a4, a2, a1
4535
+ mov a1, a2, asr #31
4537
+ rsb a1, a1, a3, asr #3
4538
+ str r0, [java_stack], #-4
4543
+ mov a1, a3, asr #4
4544
+ str r0, [java_stack], #-4
4548
+ smull a3, a4, a2, a1
4549
+ mov a3, a2, asr #31
4550
+ rsb a1, a3, a4, asr #3
4551
+ str r0, [java_stack], #-4
4555
+ smull a3, a4, a2, a1
4556
+ mov a3, a2, asr #31
4557
+ rsb a1, a3, a4, asr #2
4558
+ str r0, [java_stack], #-4
4562
+ smull a3, a4, a2, a1
4563
+ mov a3, a2, asr #31
4564
+ rsb a1, a3, a4, asr #3
4565
+ str r0, [java_stack], #-4
4569
+ smull a3, a4, a2, a1
4570
+ mov a3, a2, asr #31
4571
+ rsb a1, a3, a4, asr #3
4572
+ str r0, [java_stack], #-4
4576
+ smull a3, a4, a2, a1
4577
+ mov a3, a2, asr #31
4578
+ rsb a1, a3, a4, asr #2
4579
+ str r0, [java_stack], #-4
4583
+ smull a3, a4, a2, a1
4584
+ mov a3, a2, asr #31
4585
+ rsb a1, a3, a4, asr #2
4586
+ str r0, [java_stack], #-4
4590
+ smull a3, a4, a2, a1
4591
+ mov a1, a2, asr #31
4593
+ rsb a1, a1, a3, asr #4
4594
+ str r0, [java_stack], #-4
4598
+ smull a3, a4, a2, a1
4599
+ mov a3, a2, asr #31
4600
+ rsb a1, a3, a4, asr #2
4601
+ str r0, [java_stack], #-4
4605
+ smull a3, a4, a2, a1
4606
+ mov a3, a2, asr #31
4607
+ rsb a1, a3, a4, asr #3
4608
+ str r0, [java_stack], #-4
4612
+ smull a3, a4, a2, a1
4613
+ mov a3, a2, asr #31
4614
+ rsb a1, a3, a4, asr #3
4615
+ str r0, [java_stack], #-4
4619
+ smull a3, a4, a2, a1
4620
+ mov a3, a2, asr #31
4621
+ rsb a1, a3, a4, asr #3
4622
+ str r0, [java_stack], #-4
4626
+ smull a3, a4, a2, a1
4627
+ mov a1, a2, asr #31
4629
+ rsb a1, a1, a3, asr #4
4630
+ str r0, [java_stack], #-4
4634
+ smull a3, a4, a2, a1
4635
+ mov a1, a2, asr #31
4637
+ rsb a1, a1, a3, asr #4
4638
+ str r0, [java_stack], #-4
4642
+ smull a3, a4, a2, a1
4643
+ mov a1, a2, asr #31
4645
+ rsb a1, a1, a3, asr #4
4646
+ str r0, [java_stack], #-4
4650
+ smull a3, a4, a2, a1
4651
+ mov a1, a2, asr #31
4653
+ rsb a1, a1, a3, asr #4
4654
+ str r0, [java_stack], #-4
4700
+@ ==== Software floating point operations ====================================
4702
+@ --- do_fadd_vtos -------------------------------------------------
4703
+ OpcodeEntry do_fadd_vtos
4705
+@ --- do_fadd_itos -------------------------------------------------
4706
+ OpcodeEntry do_fadd_itos
4708
+ bl __aeabi_fadd(PLT)
4709
+ ldrb ip, [java_pc, #1]!
4710
+ ldr ip, [itos_table, ip, lsl #2]
4714
+@ --- do_dadd_vtos -------------------------------------------------
4715
+ OpcodeEntry do_dadd_vtos
4717
+@ --- do_dadd_itos -------------------------------------------------
4718
+ OpcodeEntry do_dadd_itos
4719
+ ldmib java_stack!, {r1-r3}
4720
+ bl __aeabi_dadd(PLT)
4721
+ ldrb ip, [java_pc, #1]!
4723
+ ldr ip, [itos_table, ip, lsl #2]
4727
+@ --- do_fsub_vtos -------------------------------------------------
4728
+ OpcodeEntry do_fsub_vtos
4730
+@ --- do_fsub_itos -------------------------------------------------
4731
+ OpcodeEntry do_fsub_itos
4732
+ POP(r1) @ Args are in wrong order - so just neg
4733
+ eor tos, tos, #0x80000000 @ R0 and add - easier than swap
4734
+ bl __aeabi_fadd(PLT)
4735
+ ldrb ip, [java_pc, #1]!
4736
+ ldr ip, [itos_table, ip, lsl #2]
4740
+@ --- do_dsub_vtos -------------------------------------------------
4741
+ OpcodeEntry do_dsub_vtos
4743
+@ --- do_dsub_itos -------------------------------------------------
4744
+ OpcodeEntry do_dsub_itos
4745
+ ldmib java_stack!, {r1-r3} @ args in wrong order - easier to
4746
+ eor r1, r1, #0x80000000 @ just neg rather than swap
4747
+ bl __aeabi_dadd(PLT)
4748
+ ldrb ip, [java_pc, #1]!
4750
+ ldr ip, [itos_table, ip, lsl #2]
4754
+@ --- do_fmul_vtos -------------------------------------------------
4755
+ OpcodeEntry do_fmul_vtos
4757
+@ --- do_fmul_itos -------------------------------------------------
4758
+ OpcodeEntry do_fmul_itos
4760
+ bl __aeabi_fmul(PLT)
4761
+ ldrb ip, [java_pc, #1]!
4762
+ ldr ip, [itos_table, ip, lsl #2]
4766
+@ --- do_dmul_vtos -------------------------------------------------
4767
+ OpcodeEntry do_dmul_vtos
4769
+@ --- do_dmul_itos -------------------------------------------------
4770
+ OpcodeEntry do_dmul_itos
4771
+ ldmib java_stack!, {r1-r3}
4772
+ bl __aeabi_dmul(PLT)
4773
+ ldrb ip, [java_pc, #1]!
4775
+ ldr ip, [itos_table, ip, lsl #2]
4779
+@ --- do_fdiv_vtos -------------------------------------------------
4780
+ OpcodeEntry do_fdiv_vtos
4782
+@ --- do_fdiv_itos -------------------------------------------------
4783
+ OpcodeEntry do_fdiv_itos
4786
+ bl __aeabi_fdiv(PLT)
4787
+ ldrb ip, [java_pc, #1]!
4788
+ ldr ip, [itos_table, ip, lsl #2]
4791
+@ --- do_ddiv_vtos -------------------------------------------------
4792
+ OpcodeEntry do_ddiv_vtos
4794
+@ --- do_ddiv_itos -------------------------------------------------
4795
+ OpcodeEntry do_ddiv_itos
4798
+ ldmib java_stack!, {r0, r1}
4799
+ bl __aeabi_ddiv(PLT)
4800
+ ldrb ip, [java_pc, #1]!
4802
+ ldr ip, [itos_table, ip, lsl #2]
4805
+@ --- do_i2f_vtos -------------------------------------------------
4806
+ OpcodeEntry do_i2f_vtos
4808
+@ --- do_i2f_itos -------------------------------------------------
4809
+ OpcodeEntry do_i2f_itos
4810
+ bl __aeabi_i2f(PLT)
4811
+ ldrb ip, [java_pc, #1]!
4812
+ ldr ip, [itos_table, ip, lsl #2]
4815
+@ --- do_i2d_vtos -------------------------------------------------
4816
+ OpcodeEntry do_i2d_vtos
4818
+@ --- do_i2d_itos -------------------------------------------------
4819
+ OpcodeEntry do_i2d_itos
4820
+ bl __aeabi_i2d(PLT)
4821
+ ldrb ip, [java_pc, #1]!
4823
+ ldr ip, [itos_table, ip, lsl #2]
4826
+@ --- do_f2d_vtos -------------------------------------------------
4827
+ OpcodeEntry do_f2d_vtos
4829
+@ --- do_f2d_itos -------------------------------------------------
4830
+ OpcodeEntry do_f2d_itos
4831
+ bl __aeabi_f2d(PLT)
4832
+ ldrb ip, [java_pc, #1]!
4834
+ ldr ip, [itos_table, ip, lsl #2]
4837
+@ --- do_d2f_vtos -------------------------------------------------
4838
+ OpcodeEntry do_d2f_vtos
4840
+@ --- do_d2f_itos -------------------------------------------------
4841
+ OpcodeEntry do_d2f_itos
4843
+ bl __aeabi_d2f(PLT)
4844
+ ldrb ip, [java_pc, #1]!
4845
+ ldr ip, [itos_table, ip, lsl #2]
4848
+@ --- do_fcmpl_itos -------------------------------------------------
4849
+ OpcodeEntry do_fcmpl_itos
4851
+@ --- do_fcmpl_vtos -------------------------------------------------
4852
+ OpcodeEntry do_fcmpl_vtos
4853
+ ldmib java_stack, {r0, r1}
4854
+ bl __aeabi_fcmpgt(PLT)
4858
+ ldmib java_stack, {r0, r1}
4859
+ bl __aeabi_fcmplt(PLT)
4863
+ ldmib java_stack, {r0, r1}
4864
+ bl __aeabi_fcmpeq(PLT)
4869
+ ldrb ip, [java_pc, #1]!
4870
+ add java_stack, java_stack, #8
4871
+ ldr ip, [itos_table, ip, lsl #2]
4874
+@ --- do_fcmpg_itos -------------------------------------------------
4875
+ OpcodeEntry do_fcmpg_itos
4877
+@ --- do_fcmpg_vtos -------------------------------------------------
4878
+ OpcodeEntry do_fcmpg_vtos
4879
+ ldmib java_stack, {r0, r1}
4880
+ bl __aeabi_fcmpgt(PLT)
4884
+ ldmib java_stack, {r0, r1}
4885
+ bl __aeabi_fcmplt(PLT)
4889
+ ldmib java_stack, {r0, r1}
4890
+ bl __aeabi_fcmpeq(PLT)
4895
+ ldrb ip, [java_pc, #1]!
4896
+ add java_stack, java_stack, #8
4897
+ ldr ip, [itos_table, ip, lsl #2]
4900
+@ --- do_dcmpl_itos -------------------------------------------------
4901
+ OpcodeEntry do_dcmpl_itos
4903
+@ --- do_dcmpl_vtos -------------------------------------------------
4904
+ OpcodeEntry do_dcmpl_vtos
4905
+ ldmib java_stack, {r0, r1, r2, r3}
4906
+ bl __aeabi_dcmpgt(PLT)
4910
+ ldmib java_stack, {r0, r1, r2, r3}
4911
+ bl __aeabi_dcmplt(PLT)
4915
+ ldmib java_stack, {r0, r1, r2, r3}
4916
+ bl __aeabi_dcmpeq(PLT)
4921
+ ldrb ip, [java_pc, #1]!
4922
+ add java_stack, java_stack, #16
4923
+ ldr ip, [itos_table, ip, lsl #2]
4926
+@ --- do_dcmpg_itos -------------------------------------------------
4927
+ OpcodeEntry do_dcmpg_itos
4929
+@ --- do_dcmpg_vtos -------------------------------------------------
4930
+ OpcodeEntry do_dcmpg_vtos
4931
+ ldmib java_stack, {r0, r1, r2, r3}
4932
+ bl __aeabi_dcmpgt(PLT)
4936
+ ldmib java_stack, {r0, r1, r2, r3}
4937
+ bl __aeabi_dcmplt(PLT)
4941
+ ldmib java_stack, {r0, r1, r2, r3}
4942
+ bl __aeabi_dcmpeq(PLT)
4947
+ ldrb ip, [java_pc, #1]!
4948
+ add java_stack, java_stack, #16
4949
+ ldr ip, [itos_table, ip, lsl #2]
4952
+@ ==== Double TOS operations ==============================================================
4954
+@ --- do_nop_dtos -------------------------------------------------
4955
+ OpcodeEntry do_nop_dtos
4958
+@ --- do_aconst_null_dtos -------------------------------------------------
4959
+ OpcodeEntry do_aconst_null_dtos
4961
+ b do_aconst_null_vtos
4962
+@ --- do_iconst_m1_dtos -------------------------------------------------
4963
+ OpcodeEntry do_iconst_m1_dtos
4965
+ b do_iconst_m1_vtos
4966
+@ --- do_iconst_0_dtos -------------------------------------------------
4967
+ OpcodeEntry do_iconst_0_dtos
4969
+ b do_iconst_0_vtos
4970
+@ --- do_iconst_1_dtos -------------------------------------------------
4971
+ OpcodeEntry do_iconst_1_dtos
4973
+ b do_iconst_1_vtos
4974
+@ --- do_iconst_2_dtos -------------------------------------------------
4975
+ OpcodeEntry do_iconst_2_dtos
4977
+ b do_iconst_2_vtos
4978
+@ --- do_iconst_3_dtos -------------------------------------------------
4979
+ OpcodeEntry do_iconst_3_dtos
4981
+ b do_iconst_3_vtos
4982
+@ --- do_iconst_4_dtos -------------------------------------------------
4983
+ OpcodeEntry do_iconst_4_dtos
4985
+ b do_iconst_4_vtos
4986
+@ --- do_iconst_5_dtos -------------------------------------------------
4987
+ OpcodeEntry do_iconst_5_dtos
4989
+ b do_iconst_5_vtos
4990
+@ --- do_lconst_0_dtos -------------------------------------------------
4991
+ OpcodeEntry do_lconst_0_dtos
4993
+ b do_lconst_0_vtos
4994
+@ --- do_lconst_1_dtos -------------------------------------------------
4995
+ OpcodeEntry do_lconst_1_dtos
4997
+ b do_lconst_1_vtos
4998
+@ --- do_fconst_0_dtos -------------------------------------------------
4999
+ OpcodeEntry do_fconst_0_dtos
5001
+ b do_fconst_0_vtos
5002
+@ --- do_fconst_1_dtos -------------------------------------------------
5003
+ OpcodeEntry do_fconst_1_dtos
5005
+ b do_fconst_1_vtos
5006
+@ --- do_fconst_2_dtos -------------------------------------------------
5007
+ OpcodeEntry do_fconst_2_dtos
5009
+ b do_fconst_2_vtos
5010
+@ --- do_dconst_0_dtos -------------------------------------------------
5011
+ OpcodeEntry do_dconst_0_dtos
5013
+ b do_dconst_0_vtos
5014
+@ --- do_dconst_1_dtos -------------------------------------------------
5015
+ OpcodeEntry do_dconst_1_dtos
5017
+ b do_dconst_1_vtos
5018
+@ --- do_bipush_dtos -------------------------------------------------
5019
+ OpcodeEntry do_bipush_dtos
5022
+@ --- do_sipush_dtos -------------------------------------------------
5023
+ OpcodeEntry do_sipush_dtos
5026
+@ --- do_ldc_dtos -------------------------------------------------
5027
+ OpcodeEntry do_ldc_dtos
5030
+@ --- do_ldc_w_dtos -------------------------------------------------
5031
+ OpcodeEntry do_ldc_w_dtos
5034
+@ --- do_ldc2_w_dtos -------------------------------------------------
5035
+ OpcodeEntry do_ldc2_w_dtos
5038
+@ --- do_iload_dtos -------------------------------------------------
5039
+ OpcodeEntry do_iload_dtos
5042
+@ --- do_lload_dtos -------------------------------------------------
5043
+ OpcodeEntry do_lload_dtos
5046
+@ --- do_fload_dtos -------------------------------------------------
5047
+ OpcodeEntry do_fload_dtos
5050
+@ --- do_dload_dtos -------------------------------------------------
5051
+ OpcodeEntry do_dload_dtos
5054
+@ --- do_aload_dtos -------------------------------------------------
5055
+ OpcodeEntry do_aload_dtos
5058
+@ --- do_iload_0_dtos -------------------------------------------------
5059
+ OpcodeEntry do_iload_0_dtos
5062
+@ --- do_iload_1_dtos -------------------------------------------------
5063
+ OpcodeEntry do_iload_1_dtos
5066
+@ --- do_iload_2_dtos -------------------------------------------------
5067
+ OpcodeEntry do_iload_2_dtos
5070
+@ --- do_iload_3_dtos -------------------------------------------------
5071
+ OpcodeEntry do_iload_3_dtos
5074
+@ --- do_lload_0_dtos -------------------------------------------------
5075
+ OpcodeEntry do_lload_0_dtos
5078
+@ --- do_lload_1_dtos -------------------------------------------------
5079
+ OpcodeEntry do_lload_1_dtos
5082
+@ --- do_lload_2_dtos -------------------------------------------------
5083
+ OpcodeEntry do_lload_2_dtos
5086
+@ --- do_lload_3_dtos -------------------------------------------------
5087
+ OpcodeEntry do_lload_3_dtos
5090
+@ --- do_fload_0_dtos -------------------------------------------------
5091
+ OpcodeEntry do_fload_0_dtos
5094
+@ --- do_fload_1_dtos -------------------------------------------------
5095
+ OpcodeEntry do_fload_1_dtos
5098
+@ --- do_fload_2_dtos -------------------------------------------------
5099
+ OpcodeEntry do_fload_2_dtos
5102
+@ --- do_fload_3_dtos -------------------------------------------------
5103
+ OpcodeEntry do_fload_3_dtos
5106
+@ --- do_dload_0_dtos -------------------------------------------------
5107
+ OpcodeEntry do_dload_0_dtos
5110
+@ --- do_dload_1_dtos -------------------------------------------------
5111
+ OpcodeEntry do_dload_1_dtos
5114
+@ --- do_dload_2_dtos -------------------------------------------------
5115
+ OpcodeEntry do_dload_2_dtos
5118
+@ --- do_dload_3_dtos -------------------------------------------------
5119
+ OpcodeEntry do_dload_3_dtos
5122
+@ --- do_aload_0_dtos -------------------------------------------------
5123
+ OpcodeEntry do_aload_0_dtos
5126
+@ --- do_aload_1_dtos -------------------------------------------------
5127
+ OpcodeEntry do_aload_1_dtos
5130
+@ --- do_aload_2_dtos -------------------------------------------------
5131
+ OpcodeEntry do_aload_2_dtos
5134
+@ --- do_aload_3_dtos -------------------------------------------------
5135
+ OpcodeEntry do_aload_3_dtos
5138
+@ --- do_iaload_dtos -------------------------------------------------
5139
+ OpcodeEntry do_iaload_dtos
5142
+@ --- do_laload_dtos -------------------------------------------------
5143
+ OpcodeEntry do_laload_dtos
5146
+@ --- do_faload_dtos -------------------------------------------------
5147
+ OpcodeEntry do_faload_dtos
5150
+@ --- do_daload_dtos -------------------------------------------------
5151
+ OpcodeEntry do_daload_dtos
5154
+@ --- do_aaload_dtos -------------------------------------------------
5155
+ OpcodeEntry do_aaload_dtos
5158
+@ --- do_baload_dtos -------------------------------------------------
5159
+ OpcodeEntry do_baload_dtos
5162
+@ --- do_caload_dtos -------------------------------------------------
5163
+ OpcodeEntry do_caload_dtos
5166
+@ --- do_saload_dtos -------------------------------------------------
5167
+ OpcodeEntry do_saload_dtos
5170
+@ --- do_dstore_dtos -------------------------------------------------
5171
+ OpcodeEntry do_dstore_dtos
5172
+ ldrb r3, [java_pc, #1]
5173
+ ldrb ip, [java_pc, #2]!
5174
+ sub r3, java_locals, r3, lsl #2
5175
+ ldr ip, [vtos_table, ip, asl #2]
5176
+ vstr d0, [r3, #-4]
5178
+@ --- do_dstore_0_dtos -------------------------------------------------
5179
+ OpcodeEntry do_dstore_0_dtos
5180
+ ldrb ip, [java_pc, #1]!
5181
+ vstr d0, [java_locals, #-4]
5182
+ ldr ip, [vtos_table, ip, asl #2]
5184
+@ --- do_dstore_1_dtos -------------------------------------------------
5185
+ OpcodeEntry do_dstore_1_dtos
5186
+ ldrb ip, [java_pc, #1]!
5187
+ vstr d0, [java_locals, #-8]
5188
+ ldr ip, [vtos_table, ip, asl #2]
5190
+@ --- do_dstore_2_dtos -------------------------------------------------
5191
+ OpcodeEntry do_dstore_2_dtos
5192
+ ldrb ip, [java_pc, #1]!
5193
+ vstr d0, [java_locals, #-12]
5194
+ ldr ip, [vtos_table, ip, asl #2]
5196
+@ --- do_dstore_3_dtos -------------------------------------------------
5197
+ OpcodeEntry do_dstore_3_dtos
5198
+ ldrb ip, [java_pc, #1]!
5199
+ vstr d0, [java_locals, #-16]
5200
+ ldr ip, [vtos_table, ip, asl #2]
5202
+@ --- do_dastore_dtos -------------------------------------------------
5203
+ OpcodeEntry do_dastore_dtos
5204
+ ldmib java_stack!, {r2, r3} @ d0 = value, r2 = index, r3 = arrayref
5205
+ ldrb ip, [java_pc, #1]!
5207
+ beq .dtos_exit_dastore
5210
+ bcs .dtos_exit_dastore
5211
+ add r3, r3, r2, lsl #3
5212
+ ldr ip, [vtos_table, ip, asl #2]
5213
+ vstr d0, [r3, #16]
5215
+@ --- do_pop2_dtos -------------------------------------------------
5216
+ OpcodeEntry do_pop2_dtos
5217
+ ldrb ip, [java_pc, #1]!
5218
+ ldr ip, [vtos_table, ip, asl #2]
5221
+@ ECN: Questionable here, in dup2, dup2_x1 and dup2_x2 whether we should keep
5222
+@ the double in dtos, or push it for 'free'. It depends what happens next.
5223
+@ Id it is a double operation we win. If we end up pushing it anyway then we
5224
+@ lose as we have done 2 FP stores.
5225
+@ --- do_dup2_dtos -------------------------------------------------
5226
+ OpcodeEntry do_dup2_dtos
5227
+ ldrb ip, [java_pc, #1]!
5229
+ ldr ip, [dtos_table, ip, asl #2]
5231
+@ --- do_dup2_x1_dtos -------------------------------------------------
5232
+ OpcodeEntry do_dup2_x1_dtos
5233
+ ldrb ip, [java_pc, #1]!
5236
+ ldr ip, [dtos_table, ip, asl #2]
5239
+@ --- do_dup2_x2_dtos -------------------------------------------------
5240
+ OpcodeEntry do_dup2_x2_dtos
5241
+ ldrb ip, [java_pc, #1]!
5242
+ ldmib java_stack!, {r0,r1}
5243
+ ldr ip, [dtos_table, ip, asl #2]
5245
+ stmda java_stack!, {r0,r1}
5247
+@ --- do_dadd_dtos -------------------------------------------------
5248
+ OpcodeEntry do_dadd_dtos
5249
+ ldrb r3, [java_pc, #1]!
5251
+ ldr r2, [dtos_table, r3, asl #2]
5254
+@ --- do_dsub_dtos -------------------------------------------------
5255
+ OpcodeEntry do_dsub_dtos
5256
+ ldrb r3, [java_pc, #1]!
5258
+ ldr r2, [dtos_table, r3, asl #2]
5261
+@ --- do_dmul_dtos -------------------------------------------------
5262
+ OpcodeEntry do_dmul_dtos
5263
+ ldrb r3, [java_pc, #1]!
5265
+ ldr r2, [dtos_table, r3, asl #2]
5268
+@ --- do_ddiv_dtos -------------------------------------------------
5269
+ OpcodeEntry do_ddiv_dtos
5270
+ ldrb r3, [java_pc, #1]!
5272
+ ldr r2, [dtos_table, r3, asl #2]
5275
+@ --- do_drem_dtos -------------------------------------------------
5276
+ OpcodeEntry do_drem_dtos
5278
+ ldmib java_stack!, {r0, r1}
5280
+ ldrb r3, [java_pc, #1]!
5282
+ ldr r2, [itos_table, r3, asl #2]
5284
+@ --- do_dneg_dtos -------------------------------------------------
5285
+ OpcodeEntry do_dneg_dtos
5286
+ ldrb r3, [java_pc, #1]!
5288
+ ldr r2, [dtos_table, r3, asl #2]
5290
+@ --- do_iinc_dtos -------------------------------------------------
5291
+ OpcodeEntry do_iinc_dtos
5292
+ ldrb r2, [java_pc, #1]
5293
+ ldrb ip, [java_pc, #3]!
5294
+ ldrsb r1, [java_pc, #-1]
5295
+ ldr r3, [java_locals, -r2, lsl #2]
5296
+ ldr ip, [dtos_table, ip, asl #2]
5298
+ str r3, [java_locals, -r2, lsl #2]
5300
+@ --- do_d2i_dtos -------------------------------------------------
5301
+ OpcodeEntry do_d2i_dtos
5303
+ bl _ZN13SharedRuntime3d2iEd(PLT)
5304
+ ldrb r3, [java_pc, #1]!
5305
+ ldr r2, [itos_table, r3, asl #2]
5307
+@ --- do_d2l_dtos -------------------------------------------------
5308
+ OpcodeEntry do_d2l_dtos
5310
+ bl _ZN13SharedRuntime3d2lEd(PLT)
5311
+ ldrb r3, [java_pc, #1]!
5313
+ ldr r2, [itos_table, r3, asl #2]
5315
+@ --- do_d2f_dtos -------------------------------------------------
5316
+ OpcodeEntry do_d2f_dtos
5317
+ ldrb r3, [java_pc, #1]!
5319
+ ldr r2, [itos_table, r3, asl #2]
5322
+@ --- do_dcmpl_dtos -------------------------------------------------
5323
+ OpcodeEntry do_dcmpl_dtos
5324
+ ldrb r3, [java_pc, #1]!
5327
+ ldr r2, [itos_table, r3, asl #2]
5338
+@ --- do_dcmpg_dtos -------------------------------------------------
5339
+ OpcodeEntry do_dcmpg_dtos
5340
+ ldrb r3, [java_pc, #1]!
5343
+ ldr r2, [itos_table, r3, asl #2]
5354
+@ --- do_goto_dtos -------------------------------------------------
5355
+ OpcodeEntry do_goto_dtos_unsafe
5356
+ ldrsb r1, [java_pc, #1]
5357
+ ldrb ip, [java_pc, #2]
5358
+ orr ip, ip, r1, lsl #8
5359
+ ldrb ip, [java_pc, ip]!
5360
+ ldr ip, [dtos_table, ip, lsl #2]
5363
+@ --- do_exit_asm_dtos -------------------------------------------------
5364
+ OpcodeEntry do_goto_dtos
5365
+ OpcodeEntry do_jsr_dtos
5366
+ OpcodeEntry do_ret_dtos
5367
+@ OpcodeEntry do_dreturn_dtos
5368
+@ OpcodeEntry do_putstatic_dtos
5369
+@ OpcodeEntry do_putfield_dtos
5370
+@ OpcodeEntry do_invokestatic_dtos
5371
+@ OpcodeEntry do_invokevirtual_dtos
5372
+@ OpcodeEntry do_invokespecial_dtos
5373
+ OpcodeEntry do_invokeinterface_dtos
5374
+ OpcodeEntry do_new_dtos
5375
+ OpcodeEntry do_xxxunusedxxx_dtos
5376
+ OpcodeEntry do_goto_w_dtos
5377
+ OpcodeEntry do_exit_asm_dtos
5378
+ OpcodeEntry do_breakpoint_dtos
5379
+ OpcodeEntry do_jsr_w_dtos
5380
+ OpcodeEntry do_wide_dtos
5382
+ str java_pc, [istate, #ISTATE_JAVA_PC]
5383
+ str java_stack, [istate, #ISTATE_JAVA_STACK]
5385
+ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
5387
+@ ECN: These opcodes should never happen - we make sure they dont!
5389
+ OpcodeEntry do_istore_dtos
5390
+ OpcodeEntry do_lstore_dtos
5391
+ OpcodeEntry do_fstore_dtos
5392
+ OpcodeEntry do_astore_dtos
5393
+ OpcodeEntry do_istore_0_dtos
5394
+ OpcodeEntry do_istore_1_dtos
5395
+ OpcodeEntry do_istore_2_dtos
5396
+ OpcodeEntry do_istore_3_dtos
5397
+ OpcodeEntry do_lstore_0_dtos
5398
+ OpcodeEntry do_lstore_1_dtos
5399
+ OpcodeEntry do_lstore_2_dtos
5400
+ OpcodeEntry do_lstore_3_dtos
5401
+ OpcodeEntry do_fstore_0_dtos
5402
+ OpcodeEntry do_fstore_1_dtos
5403
+ OpcodeEntry do_fstore_2_dtos
5404
+ OpcodeEntry do_fstore_3_dtos
5405
+ OpcodeEntry do_astore_0_dtos
5406
+ OpcodeEntry do_astore_1_dtos
5407
+ OpcodeEntry do_astore_2_dtos
5408
+ OpcodeEntry do_astore_3_dtos
5409
+ OpcodeEntry do_iastore_dtos
5410
+ OpcodeEntry do_lastore_dtos
5411
+ OpcodeEntry do_fastore_dtos
5412
+ OpcodeEntry do_aastore_dtos
5413
+ OpcodeEntry do_bastore_dtos
5414
+ OpcodeEntry do_castore_dtos
5415
+ OpcodeEntry do_sastore_dtos
5416
+ OpcodeEntry do_pop_dtos
5417
+ OpcodeEntry do_dup_dtos
5418
+ OpcodeEntry do_dup_x1_dtos
5419
+ OpcodeEntry do_dup_x2_dtos
5420
+ OpcodeEntry do_swap_dtos
5421
+ OpcodeEntry do_iadd_dtos
5422
+ OpcodeEntry do_ladd_dtos
5423
+ OpcodeEntry do_fadd_dtos
5424
+ OpcodeEntry do_isub_dtos
5425
+ OpcodeEntry do_lsub_dtos
5426
+ OpcodeEntry do_fsub_dtos
5427
+ OpcodeEntry do_imul_dtos
5428
+ OpcodeEntry do_lmul_dtos
5429
+ OpcodeEntry do_fmul_dtos
5430
+ OpcodeEntry do_idiv_dtos
5431
+ OpcodeEntry do_ldiv_dtos
5432
+ OpcodeEntry do_fdiv_dtos
5433
+ OpcodeEntry do_irem_dtos
5434
+ OpcodeEntry do_lrem_dtos
5435
+ OpcodeEntry do_frem_dtos
5436
+ OpcodeEntry do_ineg_dtos
5437
+ OpcodeEntry do_lneg_dtos
5438
+ OpcodeEntry do_fneg_dtos
5439
+ OpcodeEntry do_ishl_dtos
5440
+ OpcodeEntry do_lshl_dtos
5441
+ OpcodeEntry do_ishr_dtos
5442
+ OpcodeEntry do_lshr_dtos
5443
+ OpcodeEntry do_iushr_dtos
5444
+ OpcodeEntry do_lushr_dtos
5445
+ OpcodeEntry do_iand_dtos
5446
+ OpcodeEntry do_land_dtos
5447
+ OpcodeEntry do_ior_dtos
5448
+ OpcodeEntry do_lor_dtos
5449
+ OpcodeEntry do_ixor_dtos
5450
+ OpcodeEntry do_lxor_dtos
5451
+ OpcodeEntry do_i2l_dtos
5452
+ OpcodeEntry do_i2f_dtos
5453
+ OpcodeEntry do_i2d_dtos
5454
+ OpcodeEntry do_l2i_dtos
5455
+ OpcodeEntry do_l2f_dtos
5456
+ OpcodeEntry do_l2d_dtos
5457
+ OpcodeEntry do_f2i_dtos
5458
+ OpcodeEntry do_f2l_dtos
5459
+ OpcodeEntry do_f2d_dtos
5460
+ OpcodeEntry do_i2b_dtos
5461
+ OpcodeEntry do_i2c_dtos
5462
+ OpcodeEntry do_i2s_dtos
5463
+ OpcodeEntry do_lcmp_dtos
5464
+ OpcodeEntry do_fcmpl_dtos
5465
+ OpcodeEntry do_fcmpg_dtos
5466
+ OpcodeEntry do_ifeq_dtos
5467
+ OpcodeEntry do_ifne_dtos
5468
+ OpcodeEntry do_iflt_dtos
5469
+ OpcodeEntry do_ifge_dtos
5470
+ OpcodeEntry do_ifgt_dtos
5471
+ OpcodeEntry do_ifle_dtos
5472
+ OpcodeEntry do_if_icmpeq_dtos
5473
+ OpcodeEntry do_if_icmpne_dtos
5474
+ OpcodeEntry do_if_icmplt_dtos
5475
+ OpcodeEntry do_if_icmpge_dtos
5476
+ OpcodeEntry do_if_icmpgt_dtos
5477
+ OpcodeEntry do_if_icmple_dtos
5478
+ OpcodeEntry do_if_acmpeq_dtos
5479
+ OpcodeEntry do_if_acmpne_dtos
5480
+ OpcodeEntry do_tableswitch_dtos
5481
+ OpcodeEntry do_lookupswitch_dtos
5482
+@ OpcodeEntry do_ireturn_dtos
5483
+@ OpcodeEntry do_lreturn_dtos
5484
+@ OpcodeEntry do_freturn_dtos
5485
+@ OpcodeEntry do_areturn_dtos
5486
+@ OpcodeEntry do_return_dtos
5487
+ OpcodeEntry do_newarray_dtos
5488
+ OpcodeEntry do_anewarray_dtos
5489
+ OpcodeEntry do_arraylength_dtos
5490
+ OpcodeEntry do_athrow_dtos
5491
+ OpcodeEntry do_checkcast_dtos
5492
+ OpcodeEntry do_instanceof_dtos
5493
+ OpcodeEntry do_monitorenter_dtos
5494
+ OpcodeEntry do_monitorexit_dtos
5495
+ OpcodeEntry do_multianewarray_dtos
5496
+ OpcodeEntry do_ifnull_dtos
5497
+ OpcodeEntry do_ifnonnull_dtos
5498
+ OpcodeEntry do_getfield_dtos
5505
+@ ==== Fast SW FP emulation ===============================================================
5515
+@ TOS = TOSM1 + TOS
5516
+@ What we actually do is TOS = TOS + TOSM1
5517
+@ --- do_dadd_vtos -------------------------------------------------
5518
+ OpcodeEntry do_dadd_vtos
5520
+@ --- do_dadd_itos -------------------------------------------------
5521
+ OpcodeEntry do_dadd_itos
5522
+ ldmib java_stack!, {ah, bl, bh}
5523
+ mov tmp, #0xff000000
5524
+ orr tmp, tmp, #0x00e00000
5525
+ bics ex_add, tmp, ah, LSL #1
5526
+ bicnes ex_add, tmp, bh, LSL #1
5529
+ eormi bh, bh, #1 << 31
5532
+ subs ex_add, al, bl
5535
+ adds bl, bl, ex_add
5537
+ subs al, al, ex_add
5540
+ mov ex_add, ah, LSR #20
5541
+ sub sh, ex_add, bh, LSR #20
5542
+ tst tmp, bh, LSL #1
5544
+ bic ah, ah, ex_add, LSL #20
5546
+ orr bh, bh, #1 << 20
5551
+ adds al, al, bl, LSR sh
5552
+ adc ah, ah, bh, LSR sh
5553
+ adds al, al, bh, LSL tmp
5557
+ add ah, ah, ex_add, LSL #20 @ add exponent
5559
+ movs bl, bl, LSL tmp @ round and sticky bits
5562
+ movccs bl, bl, LSL #1 @ is sticky bit zero?
5566
+ bicne al, al, #1 @ RTE if carry didn't occur
5567
+ adceq ah, ah, #0 @ increment high word if it did
5568
+dadd_check_overflow_inx:
5569
+ mov bh, ah, LSL #1
5570
+ cmp bh, #0xFFE00000
5572
+ subhs ah, ah, #3<<29 @ bias exponent
5573
+ b return_double_Inf
5577
+ sub sh, sh, #32 @ nonzero
5578
+ rsbs tmp, sh, #31 @ sets C if within a word
5579
+ movlo tmp, #0 @ C clear if sh > 31
5580
+ addhss al, al, bh, LSR sh
5581
+ adc ah, ah, ex_add, LSL #20
5582
+ cmp ex_add, ah, LSR #20
5584
+ sub ah, ah, ex_add, LSL #20
5586
+ add ah, ah, #1 << 20
5587
+ movs ah, ah, LSR #1
5588
+ add ah, ah, ex_add, LSL #20
5590
+ bcc dadd_check_overflow_exact
5592
+ movccs tmp, bl, LSL tmp @EQ = round to even
5593
+ bne dadd_check_overflow_exact
5595
+dadd_rnearup_carry:
5597
+ movccs bl, bl, LSL #1 @ is sticky bit zero?
5598
+ bne dadd_check_overflow_inx
5600
+dadd_check_overflow_exact:
5601
+ mov bh, ah, LSL #1
5602
+ cmp bh, #0xFFE00000
5604
+ sub ah, ah, #3<<29 @ bias exponent
5607
+ and a3, ah, #0x80000000
5608
+return_double_Inf_1:
5610
+ mov ah, #0x7f000000
5611
+ orr ah, ah, #0x00f00000
5614
+ ldrb ip, [java_pc, #1]!
5616
+ ldr ip, [itos_table, ip, lsl #2]
5620
+ orrs tmp, bl, bh, LSL #1 @ Is b zero or denormal?
5622
+ movs tmp, ex_add, LSL #21
5623
+ bic ah, ah, ex_add, LSL #20
5624
+ bicne bh, bh, #1 << 31
5625
+ subne sh, sh, #1 @ adjust exponent to fake exp_b = 1
5631
+ movs tmp, ex_add, LSL #21 @ is a denormal?
5633
+ orrs tmp, al, ah, LSL #1 @ a zero?
5638
+ cmp al, #1 @ sets C if al!=0
5639
+ adc ex_add, ah, ah
5642
+ cmp ex_add, tmp @ HI if a is NaN
5643
+ cmpls sh, tmp @ HI if either is NaN
5644
+ bhi return_double_NaN
5647
+ cmp ex_add, tmp @ EQ if a is Inf
5654
+ b return_double_NaN
5656
+@ ECN: load 1st arg off stack and do a reverse subtract
5657
+@ ECN: We want TOSM1 - TOS, but args end up in wrong order so do rsb
5658
+@ --- do_dsub_vtos -------------------------------------------------
5659
+ OpcodeEntry do_dsub_vtos
5661
+@ --- do_dsub_itos -------------------------------------------------
5662
+ OpcodeEntry do_dsub_itos
5663
+ ldmib java_stack, {ah, bl, bh}
5664
+ mov tmp, #0xff000000
5665
+ orr tmp, tmp, #0x00e00000
5666
+ bics ex_add, tmp, ah, LSL #1
5667
+ bicnes ex_add, tmp, bh, LSL #1
5670
+ eor ah, ah, #1 << 31
5672
+ eor bh, bh, #1 << 31
5674
+ subs ex_add, al, bl
5678
+ eor sh, sh, #1 << 31 @ negate a and b as a - b == -b - -a
5679
+ adds bl, bl, ex_add
5681
+ subs al, al, ex_add
5684
+ mov ex_add, ah, LSR #20
5685
+ sub sh, ex_add, bh, LSR #20
5686
+ tst tmp, bh, LSL #1
5688
+ bic ah, ah, ex_add, LSL #20
5689
+ bic bh, bh, tmp, ASR #1
5691
+ rsc bh, bh, tmp, ASR #1 @ 0xffe00000 >> 1 = -(1 << 20)
5696
+ adds al, al, bl, LSR sh
5697
+ adc ah, ah, bh, ASR sh
5698
+ adds al, al, bh, LSL tmp
5702
+ add ah, ah, ex_add, LSL #20
5703
+ movs bl, bl, LSL tmp
5706
+ adds al, al, #1 @ Z flag set if carry to high word
5707
+ cmpne bl, #0x80000000 @ check we don't have to round to even
5718
+ blo dsub_hugeshift
5719
+ adds al, al, bh, ASR sh
5724
+ movs tmp, bl, LSL tmp
5725
+ adcs al, al, al @ shift al,ah left including guard bit
5727
+ add sh, ah, ex_add, LSL #21 @ ah = 0xFFE00000 + fraction. Adding
5728
+ movs sh, sh, LSR #21 @ C-bit is clear if bit 20 of ah
5729
+ bls dsub_renormalize @ clear, so 2 bits or more
5730
+ add ah, ah, ex_add, LSL #20
5731
+ adds al, al, tmp, LSR #31 @ C and Z flag are set if carry over
5732
+ cmpcc tmp, #0x80000000 @ check that we don't have to round
5740
+ adds ah, ah, #1 << 21
5742
+ beq dsub_retzero @ go and deal with it, if so
5743
+ mov sh, ex_add, LSR #11
5744
+ bic ex_add, ex_add, #1 << 11
5745
+ sub ex_add, ex_add, #2 @ for leading bit
5746
+dsub_renormloop: @ TODO: add loop for 8 bit per cycle renorm
5749
+ sub ex_add, ex_add, #1
5751
+ beq dsub_renormloop
5752
+ add ah, ah, sh, LSL #31
5753
+ add ah, ah, ex_add, LSL #20
5756
+ add ah, ah, #3 << 29 @ bias exponent
5757
+ @ Rounding direction indicator is zero (denormal results are exact)
5762
+ add ah, ah, ex_add, LSL #20
5765
+ ldrb ip, [java_pc, #1]!
5767
+ ldr ip, [itos_table, ip, lsl #2]
5769
+dsub_ex_one: @ underflow when ex = 1 - shift back to denorm
5770
+ movs ah, ah, ASR #1
5772
+ add ah, ah, ex_add, LSL #20
5775
+ orrs tmp, bl, bh, LSL #12 @ is b zero or denorm?
5777
+ movs tmp, ex_add, LSL #21
5778
+ bic ah, ah, ex_add, LSL #20
5779
+ beq dsub_both_denorm
5780
+ bic bh, bh, #1 << 31
5790
+ orrs tmp, al, ah, LSL #1
5791
+ bne dsub_denorm @ return a@ but it might be denormal
5793
+ mov ah, #0 @ clear sign bit (al is already 0)
5797
+ movs bl, ah, LSL #1 @ discard sign bit
5798
+ tsteq al, al @ do we have a zero?
5799
+ beq dsub_retzero @ yes@ go and ensure the right sign
5802
+ @ Handle NaNs and infinities in reverse subtraction. We
5803
+ @ just swap the operands and go to dsub_naninf.
5811
+ cmp al, #1 @ sets C if al!=0
5812
+ adc ex_add, ah, ah
5815
+ cmp ex_add, tmp @ HI if a is NaN
5816
+ cmpls sh, tmp @ HI if either is NaN
5817
+ bhi return_double_NaN
5820
+ cmp ex_add, tmp @ EQ if a is Inf
5821
+ eorne ah, bh, #0x80000000
5829
+ and a3, ah, #0x80000000
5831
+ mov ah, #0x7f000000
5832
+ orr ah, ah, #0x00f80000
5836
+@ === underflow handler ================================================
5839
+#define INX_bit (1<<30)
5846
+ orrmi ip, ip, #1<<16
5848
+ mov exp, ah, LSR #20 @ find the exponent
5849
+ add temp, temp, #1
5850
+ bic ah, ah, exp, LSL #20 @ remove exponent from mantissa
5851
+ bic exp, exp, #0x800 @ lose the sign bit
5852
+ sub exp, temp, exp
5853
+ orr ah, ah, #1<<20 @ put on mantissa leading bit
5855
+ bhi dunder_stickyonly
5856
+ beq dunder_roundbit
5859
+ subs exp, exp, #32
5860
+ bls dunder_hiloword
5862
+ rsb temp, exp, #32
5864
+ mov al, ah, LSR exp
5865
+ mov exp, ah, LSL temp
5866
+ orrne exp, exp, #1
5872
+ mov ah, ah, LSL temp
5873
+ orr ah, ah, al, LSR exp
5874
+ mov exp, al, LSL temp
5879
+ rsb temp, exp, #32
5880
+ mov tmp, al, LSL temp
5881
+ mov temp, ah, LSL temp
5882
+ orr al, temp, al, LSR exp
5883
+ mov ah, ah, LSR exp
5887
+ orrs exp, al, ah, LSL #12
5890
+ mov exp, #0x80000000
5891
+ addne exp, exp, #1
5899
+ bic ip, ip, #1<<16
5900
+ orrne ah, ah, #0x80000000
5903
+ movs exp, exp, LSL #1 @ round bit in C, sticky in ~Z
5904
+ bcc dunder_rerounded @ if no round bit, we're done
5905
+ beq dunder_roundeven @ RTE is tricky due to rerounding
5907
+ adds al, al, #1 @ round up
5912
+ movs exp, ip, ASR #INX_pos @ get -1, 0, +1 from direction bits
5913
+ bmi dunder_roundup @ if -1, round up unconditionally
5914
+ bne dunder_rerounded @ if +1, round down unconditionally
5915
+ adds al, al, #1 @ round up ...
5917
+ bic al, al, #1 @ ... and then to even
5918
+ b dunder_rerounded
5920
+@ === MULTIPLY Double ===================================================
5929
+@ --- do_dmul_vtos -------------------------------------------------
5930
+ OpcodeEntry do_dmul_vtos
5932
+@ --- do_dmul_itos -------------------------------------------------
5933
+ OpcodeEntry do_dmul_itos
5934
+ ldmib java_stack!, {ah, bl, bh}
5935
+ stmdb sp!, {r4, r5}
5936
+ mov tmp, #0x7f00000
5937
+ orr tmp, tmp, #0x00f0000
5938
+ bics ex_m, tmp, ah, LSR #4 @ test for Infs or NaNs
5939
+ bicnes ex_m, tmp, bh, LSR #4
5941
+ and ex_m, tmp, ah, LSR #4 @ get exponent of a
5942
+ eor th, ah, bh @ compute sign of result
5943
+ orr ex_m, ex_m, th, LSR #31 @ and save it at bottom of ex
5944
+ ands th, tmp, bh, LSR #4 @ get exponent of b, and test
5945
+ tstne ah, tmp, LSL #4 @ for zeros/denorms ...
5946
+ beq dmul_zerodenorm @ go and renormalise if we got any
5948
+ add ex_m, ex_m, th @ calculate exponent of result
5949
+ sub ex_m, ex_m, #0x3FC0000 @ rebias exponent mostly
5950
+ bic ah, ah, tmp, LSL #5 @ clear sign and all but lo bit of exp
5951
+ bic bh, bh, tmp, LSL #5
5952
+ orr ah, ah, #1<<20 @ set leading bit on mantissa
5953
+ orr bh, bh, #1<<20 @ set leading bit on mantissa
5955
+ umull ul, uh, ah, bl
5956
+ umull tl, th, al, bh
5958
+ adcs th, th, uh @ carry from here is used below
5959
+ umull ul, uh, ah, bh @ uh:ul is top part
5960
+ adc bh, uh, #0 @ get carry from above addition
5961
+ umull ah, uh, al, bl @ uh:ah is bottom part
5966
+ orrne tl, tl, #1 @ don't lose sticky bit
5968
+ mov uh, #32-12 @ uh will be corresponding right shift
5969
+ cmp bh, #0x200 @ C set if it's 11 bits
5971
+ adc bl, bl, ex_m, ASR #16 @ increment exponent correspondingly
5972
+ rsb ul, uh, #32 @ ul is left shift
5973
+ mov ah, bh, LSL ul
5974
+ mov al, th, LSL ul
5975
+ orr ah, ah, th, LSR uh
5976
+ orr al, al, tl, LSR uh
5977
+ add ah, ah, bl, LSL #20 @ put exponent back on (may wrap
5978
+ eor ah, ah, ex_m, LSL #31 @ put sign back on (with EOR so that
5979
+ movs rs, tl, LSL ul @ compute the round word
5981
+ movs uh, rs, LSL #1 @ rs is already in place
5982
+ movcc rs, #-INX_bit @ direction indicator: rounded down
5984
+ orreq bh, bh, #1<<31 @ save the round-to-even bit
5985
+ adcs al, al, #0 @ round up if necessary
5987
+ mov rs, #INX_bit @ direction indicator: rounded up
5988
+ tst al, bh, LSR #31 @ does RTE do anything?
5989
+ bic al, al, bh, LSR #31 @ perform RTE
5990
+ movne rs, #-INX_bit @ if RTE had effect, we rounded down
5993
+ teq ah, ex_m, LSL #31 @ do the signs agree?
5994
+ ldr uh, =0x7FF00000 @ even if so, need to test exp 0/7FF
5995
+ bmi dmul_outflow @ if not, UFL or OFL
5997
+ bicnes uh, uh, ah @ is exp 0 or 7FF?
6000
+ ldrb ip, [java_pc, #1]!
6001
+ ldmia sp!, {r4, r5}
6002
+ ldr ip, [itos_table, ip, lsl #2]
6007
+ movs ul, ex_m, LSL #31 @ put sign bit in N
6008
+ tstpl uh, #2 << 22 @ if +ve: EQ iff round up. Keeps PL
6009
+ tstmi uh, #1 << 22 @ if -ve: EQ iff round up.
6010
+ moveq rs, #INX_bit @ rounded up
6011
+ movne rs, #-INX_bit @ rounded down
6012
+ addeqs al, al, #1 @ may set C
6017
+ cmp ex_m, #0x400<<16 @ Which ballpark are we in?
6018
+ addle ah, ah, #0x60000000 @ Bias up if underflow
6019
+ subge ah, ah, #0x60000000 @ Bias down if overflow
6021
+ ldmia sp!, {r4, r5}
6022
+ ble __dunder @ underflow
6023
+ b return_double_Inf
6026
+ orrs ul, al, ah, LSL #1 @ is a zero?
6027
+ orrnes ul, bl, bh, LSL #1 @ or is b zero?
6028
+ beq dmul_zero @ Return zero if so
6030
+ tst th, th @ is b denormal?
6031
+ beq dmul_renorm_op2
6033
+ bics ul, ex_m, #1 @ is a denormal? (careful of sign bit)
6034
+ beq dmul_renorm_op1
6037
+ mov al, #0 @ clear low word
6038
+ mov ah, ex_m, LSL #31 @ get sign of result and clear hi word
6042
+ add ex_m, ex_m, #1<<16 @ correct the exponent
6043
+ bic ah, ah, #0x80000000 @ this will get in our way
6044
+ orrs tl, ah, al, LSR #12 @ is highest set bit in low twelve?
6045
+ moveq al, al, LSL #20 @ if so, move it up
6046
+ subeq ex_m, ex_m, #20<<16 @ and adjust exponent
6047
+ tst ah, ah @ is highest set bit in low word?
6048
+ moveq ah, al, LSR #12 @ if so, move up by 20
6049
+ moveq al, al, LSL #20
6050
+ subeq ex_m, ex_m, #20<<16 @ and adjust exponent
6051
+ mov ul, #0 @ shift of top word
6052
+ movs tl, ah, LSR #(21-16) @ is highest set bit within 16 of top?
6053
+ moveq ah, ah, LSL #16 @ if not, move up
6054
+ addeq ul, ul, #16 @ and adjust exponent
6055
+ movs tl, ah, LSR #(21-8) @ is highest set bit within 8 of top?
6056
+ moveq ah, ah, LSL #8 @ if not, move up
6057
+ addeq ul, ul, #8 @ and adjust exponent
6058
+ movs tl, ah, LSR #(21-4) @ is highest set bit within 4 of top?
6059
+ moveq ah, ah, LSL #4 @ if not, move up
6060
+ addeq ul, ul, #4 @ and adjust exponent
6061
+ movs tl, ah, LSR #(21-2) @ is highest set bit within 2 of top?
6062
+ moveq ah, ah, LSL #2 @ if not, move up
6063
+ addeq ul, ul, #2 @ and adjust exponent
6064
+ movs tl, ah, LSR #(21-1) @ is highest set bit within 1 of top?
6065
+ moveq ah, ah, LSL #1 @ if not, move up
6066
+ addeq ul, ul, #1 @ and adjust exponent
6068
+ sub ex_m, ex_m, ul, LSL #16 @ calculate final pseudo exponent
6069
+ mov tl, al, LSL ul @ shift low word up by same amout
6070
+ rsb ul, ul, #32 @ compute reverse shift for al
6071
+ orr ah, ah, al, LSR ul @ put in high end of low word
6075
+ mov tmp, #0x7f00000
6076
+ orr tmp, tmp, #0x00f0000
6081
+ add th, th, #1<<16 @ correct the exponent
6082
+ bic bh, bh, #0x80000000 @ this will get in our way
6083
+ orrs tl, bh, bl, LSR #12 @ is highest set bit in low twelve?
6084
+ moveq bl, bl, LSL #20 @ if so, move it up
6085
+ subeq th, th, #20<<16 @ and adjust exponent
6086
+ tst bh, bh @ is highest set bit in low word?
6087
+ moveq bh, bl, LSR #12 @ if so, move up by 20
6088
+ moveq bl, bl, LSL #20
6089
+ subeq th, th, #20<<16 @ and adjust exponent
6090
+ mov ul, #0 @ shift of top word
6091
+ movs tl, bh, LSR #(21-16) @ is highest set bit within 16 of top?
6092
+ moveq bh, bh, LSL #16 @ if not, move up
6093
+ addeq ul, ul, #16 @ and adjust exponent
6094
+ movs tl, bh, LSR #(21-8) @ is highest set bit within 8 of top?
6095
+ moveq bh, bh, LSL #8 @ if not, move up
6096
+ addeq ul, ul, #8 @ and adjust exponent
6097
+ movs tl, bh, LSR #(21-4) @ is highest set bit within 4 of top?
6098
+ moveq bh, bh, LSL #4 @ if not, move up
6099
+ addeq ul, ul, #4 @ and adjust exponent
6100
+ movs tl, bh, LSR #(21-2) @ is highest set bit within 2 of top?
6101
+ moveq bh, bh, LSL #2 @ if not, move up
6102
+ addeq ul, ul, #2 @ and adjust exponent
6103
+ movs tl, bh, LSR #(21-1) @ is highest set bit within 1 of top?
6104
+ moveq bh, bh, LSL #1 @ if not, move up
6105
+ addeq ul, ul, #1 @ and adjust exponent
6107
+ sub th, th, ul, LSL #16 @ calculate final pseudo exponent
6108
+ mov tl, bl, LSL ul @ shift low word up by same amout
6109
+ rsb ul, ul, #32 @ compute reverse shift for bl
6110
+ orr bh, bh, bl, LSR ul @ put in high end of low word
6114
+ mov tmp, #0x7f00000
6115
+ orr tmp, tmp, #0x00f0000
6120
+ mov uh, ah, LSL #1 @ discard sign bit on a
6121
+ mov ul, bh, LSL #1 @ and on b
6122
+ cmp uh, tmp, LSL #5 @ HI if ah shows a to be NaN
6123
+ cmpeq al, #0 @ now HI if a is NaN
6124
+ cmpls ul, tmp, LSL #5 @ another chance to set HI ...
6125
+ cmpeq bl, #0 @ ... if b is NaN
6127
+ orrs ul, al, ah, LSL #1 @ is a zero?
6128
+ orrnes ul, bl, bh, LSL #1 @ or is b zero?
6132
+ and ah, ah, #0x80000000
6133
+ orr ah, ah, tmp, LSL #4
6137
+ ldmia sp!, {r4, r5}
6138
+ b return_double_NaN
6143
+ .size _ZN19BytecodeInterpreter7run_optEPS_, .-_ZN19BytecodeInterpreter7run_optEPS_
6146
+ .section .data.rel.ro.local,"aw",%progbits
6149
+ .global execute_opt
6151
+ .type execute_opt, %object
6152
+ .size execute_opt, 256
6154
+ .byte 1 @ nop 0x00
6155
+ .byte 1 @ aconst_null
6156
+ .byte 1 @ iconst_m1
6157
+ .byte 1 @ iconst_0
6158
+ .byte 1 @ iconst_1
6159
+ .byte 1 @ iconst_2
6160
+ .byte 1 @ iconst_3
6161
+ .byte 1 @ iconst_4
6162
+ .byte 1 @ iconst_5
6163
+ .byte 1 @ lconst_0
6164
+ .byte 1 @ lconst_1
6165
+ .byte 1 @ fconst_0
6166
+ .byte 1 @ fconst_1
6167
+ .byte 1 @ fconst_2
6168
+ .byte 1 @ dconst_0
6169
+ .byte 1 @ dconst_1
6411
+ .ident "GCC: (Debian 4.3.2-1.1) 4.3.2"
6412
+ .section .note.GNU-stack,"",%progbits
6415
diff -ruNE ports/hotspot/src/cpu/zero/vm/bytes_zero.hpp ports/hotspot/src/cpu/zero/vm/bytes_zero.hpp
6416
--- ports/hotspot/src/cpu/zero/vm/bytes_zero.hpp 2009-03-05 14:43:47.000000000 +0000
6417
+++ ports/hotspot/src/cpu/zero/vm/bytes_zero.hpp 2009-04-03 13:32:49.000000000 +0000
6419
// platform-specific byte ordering.
6420
#ifdef VM_LITTLE_ENDIAN
6421
static inline u2 get_native_u2(address p){
6423
+ return ( u2(p[1]) << 8 ) | ( u2(p[0]) );
6425
return (intptr_t(p) & 1) == 0
6432
static inline u4 get_native_u4(address p) {
6433
@@ -135,10 +139,14 @@
6436
static inline u2 get_native_u2(address p){
6438
+ return ( u2(p[0]) << 8 ) | ( u2(p[1]) );
6440
return (intptr_t(p) & 1) == 0
6447
static inline u4 get_native_u4(address p) {
6448
@@ -237,7 +245,11 @@
6449
// Byte-order reversal is needed
6450
static inline u2 get_Java_u2(address p)
6453
+ return ( u2(p[0]) << 8 ) | ( u2(p[1]) );
6455
return swap_u2(get_native_u2(p));
6458
static inline u4 get_Java_u4(address p)