ARM asm improvements - part 2
Edward Nevill
ed at camswl.com
Thu Sep 10 11:26:37 PDT 2009
Hi,
Here is part 2 of the diffs, the changes to bytecodes_arm.def.
Whats changed?
(the following is a combined list of changes in cppInterpreter_arm.S
and bytecodes_arm.def).
- Added support for HW floating point.
(checks /proc/sys/... to see the processor actually has HW FP
before executing any HW FP instructions).
- Added #ifdefs to allow disabling of various optimisations. The
list is
-DDISABLE_NOTICE_SAFEPOINTS
-DDISABLE_HW_NULL_PTR_CHECK
-DDISABLE_FASTPATH_ENTRY
-DDISABLE_NATIVE_ENTRY
-DDISABLE_FAST_BYTECODES
-DDISABLE_HW_FP
- Removed #ifdefs on GCC_VERSION and B14/B16. It should now build for
any of gcc 4.1, 4.3 and 4.4 and handle the differences between B14
and B16 automatically using asm_helper.cpp
- Added lots of debugging and asert ifdefs. The list is
DISPATCH_LOOP
CODETRACE
DISPATCH_ASSERTS
CHECK_LOCALS
CHECK_FRAME
CHECK_BACKTRACE
CHECK_STACK
Basically, if DISPATCH_LOOP is set then you can enable any of the
other assertions and it will do the appropriate checks after every
bytecode.
- Support for gcc 4.1
Basically I have inlined the problem functions which were causing
unresolved symbols with gcc 4.1. Also changed the code alignment
from 64 to 8 as earlier binutils have a problem with 64 byte
alignment.
- Synchronized native entry is now thrown to cppInterpreter_zero.
It was too much of a hazard to maintain/debug this for almost no
performance gain.
- Optimised integer divide and remainder by constant.
- Support for UseCompiler.
I have tested this out by building Shark for ARM and it runs at least
as well as the C version, however there is a lot of work to make
Shark work on ARM so asm_generate_entry still returns NULL if
UseCompiler is set.
- invokeinterface can now do a fastpath entry, previously always did
a slow path and created a full native and java frame. The fast path
entry only creates a java frame, no new native frame is created.
- Optimised new, checkcast and instanceof.
- Added support for additional bytecode sequences of the form
<load - any><load - ant><data op><store - any>
- Lots of other minor optimisations.
Regards,
Ed.
--- CUT HERE -----------------------------------------------------------
diff -ruNE old/icedtea6/ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def new/icedtea6/ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def
--- old/icedtea6/ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def 2009-09-08 14:30:25.000000000 +0100
+++ new/icedtea6/ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def 2009-09-10 14:18:17.000000000 +0100
@@ -1,3 +1,13 @@
+#ifndef DISABLE_HW_FP
+#define HW_FP
+#endif
+#ifndef DISABLE_NOTICE_SAFEPOINTS
+#define NOTICE_SAFEPOINTS
+#endif
+#ifndef DISABLE_FAST_BYTECODES
+#define FAST_BYTECODES
+#endif
+
nop = 0x00, 1
aconst_null = 0x01, 1
iconst_m1 = 0x02, 1
@@ -201,11 +211,13 @@
jsr_w = 0xc9, 0
breakpoint = 0xca, 0
-#agetfield = 0xcb, 3
+#ifdef FAST_BYTECODES
+
+ at agetfield = 0xcb, 3
bgetfield = 0xcc, 3
cgetfield = 0xcd, 3
-#dgetfield = 0xce, 3
-#fgetfield = 0xcf, 3
+ at dgetfield = 0xce, 3
+ at fgetfield = 0xcf, 3
igetfield = 0xd0, 3
lgetfield = 0xd1, 3
sgetfield = 0xd2, 3
@@ -213,45 +225,56 @@
aputfield = 0xd3, 3
bputfield = 0xd4, 3
cputfield = 0xd5, 3
-#dputfield = 0xd6, 3
-#fputfield = 0xd7, 3
+ at dputfield = 0xd6, 3
+ at fputfield = 0xd7, 3
iputfield = 0xd8, 3
lputfield = 0xd9, 3
-#sputfield = 0xda, 3
+ at sputfield = 0xda, 3
iaccess_0 = 0xdb, 4
iaccess_1 = 0xdc, 4
iaccess_2 = 0xdd, 4
iaccess_3 = 0xde, 4
-#fast_iload = 0xdf, 2
-#fast_iload2 = 0xe0, 4
-#fast_icaload = 0xe1, 3
-
-invokevfinal = 0xe2, 3
-#linearswitch = 0xe3, 0
-#binaryswitch = 0xe4, 0
-
-iload_0_iconst_N = 231, 2
-iload_1_iconst_N = 232, 2
-iload_2_iconst_N = 233, 2
-iload_3_iconst_N = 234, 2
-iload_iconst_N = 235, 3
-invokeresolved = 236, 3
-iadd_istore_N = 237, 2
-isub_istore_N = 238, 2
-iand_istore_N = 239, 2
-ior_istore_N = 240, 2
-ixor_istore_N = 241, 2
-iadd_u4store = 242, 3
-isub_u4store = 243, 3
-iand_u4store = 244, 3
-ior_u4store = 245, 3
-ixor_u4store = 246, 3
-invokespecialresolved = 247, 3
-invokestaticresolved = 248, 3
+invokeresolved = 0xdf, 3
+invokespecialresolved = 0xe0, 3
+invokestaticresolved = 0xe1, 3
+invokevfinal = 0xe2, 3
+
+iload_iload = 0xe3, 4
+iload_iload_N = 0xe4, 3
+
+ at return_register_finalizer = 0xe5, 1
+
+dmac = 0xe6, 2
+
+iload_0_iconst_N = 0xe7, 2
+iload_1_iconst_N = 0xe8, 2
+iload_2_iconst_N = 0xe9, 2
+iload_3_iconst_N = 0xea, 2
+iload_iconst_N = 0xeb, 3
+iadd_istore_N = 0xec, 2
+isub_istore_N = 0xed, 2
+iand_istore_N = 0xee, 2
+ior_istore_N = 0xef, 2
+ixor_istore_N = 0xf0, 2
+iadd_u4store = 0xf1, 3
+isub_u4store = 0xf2, 3
+iand_u4store = 0xf3, 3
+ior_u4store = 0xf4, 3
+ixor_u4store = 0xf5, 3
+iload_0_iload = 0xf6, 3
+iload_1_iload = 0xf7, 3
+iload_2_iload = 0xf8, 3
+iload_3_iload = 0xf9, 3
+iload_0_iload_N = 0xfa, 2
+iload_1_iload_N = 0xfb, 2
+iload_2_iload_N = 0xfc, 2
+iload_3_iload_N = 0xfd, 2
+
+#endif // FAST_BYTECODES
-return_register_finalizer = 229, 0
+return_register_finalizer = 0xe5, 1
(nop) {
DISPATCH \seq_len
@@ -292,7 +315,7 @@
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
@@ -321,7 +344,7 @@
mov tmp2, #0
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
@@ -337,8 +360,8 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-# r1 = [jpc, #2]
+@ r2 = [jpc, #1]
+@ r1 = [jpc, #2]
(sipush) sipush {
DISPATCH_START \seq_len
mov tmp1, r1
@@ -352,7 +375,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload,fload,aload) u4load {
DISPATCH_START \seq_len
rsb tmp1, r2, #0
@@ -365,7 +388,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(lload,dload) u8load {
DISPATCH_START \seq_len
sub r3, locals, r2, lsl #2
@@ -374,7 +397,7 @@
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
@@ -446,7 +469,7 @@
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
@@ -458,17 +481,15 @@
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
(iaload,faload,aaload) u4aload {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry5:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -484,12 +505,10 @@
}
(laload,daload) u8aload {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry6:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -501,17 +520,15 @@
DISPATCH_NEXT
ldr tmp1, [r3, #20]
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
(baload) baload {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry7:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -527,12 +544,10 @@
}
(caload) caload {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry8:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -548,12 +563,10 @@
}
(saload) saload {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry9:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -568,7 +581,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(astore,istore,fstore) u4store {
DISPATCH_START \seq_len
rsb tmp1, r2, #0
@@ -581,10 +594,10 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(lstore,dstore) u8store {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
sub r3, locals, r2, lsl #2
DISPATCH_NEXT
@@ -641,7 +654,7 @@
(lstore_0,dstore_0) u8store_0 {
DISPATCH_START \seq_len
DISPATCH_NEXT
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
@@ -652,7 +665,7 @@
(lstore_1,dstore_1) u8store_1 {
DISPATCH_START \seq_len
DISPATCH_NEXT
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
@@ -662,7 +675,7 @@
(lstore_2,dstore_2) u8store_2 {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
str tmp2, [locals, #-12]
DISPATCH_NEXT
@@ -674,7 +687,7 @@
(lstore_3,dstore_3) u8store_3 {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
str tmp2, [locals, #-16]
DISPATCH_NEXT
@@ -685,12 +698,10 @@
}
(iastore,fastore) u4astore {
- POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
+ POP r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry10:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -704,12 +715,10 @@
}
(lastore,dastore) u8astore {
- POP4 r2, r3, tmp2, tmp1 @ r2,r3 = value, tmp2 = index, tmp1 = arrayref
+ POP r2, r3, tmp2, tmp1 @ r2,r3 = value, tmp2 = index, tmp1 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry11:
ldr ip, [tmp1, #8] @ ip = limit
cmp tmp2, ip
@@ -725,12 +734,10 @@
}
(bastore) bastore {
- POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
+ POP r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry12:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -744,12 +751,10 @@
}
(castore,sastore) u2astore {
- POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
+ POP r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry13:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -784,21 +789,21 @@
(dup_x1) dup_x1 {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
PUSH r2
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(dup_x2) dup_x2 {
DISPATCH_START \seq_len
- POP3 r2, r3, lr
+ POP r2, r3, lr
DISPATCH_NEXT
PUSH r2
DISPATCH_NEXT
- PUSH3 r2, r3, lr
+ PUSH r2, r3, lr
DISPATCH_FINISH
}
@@ -806,32 +811,32 @@
DISPATCH_START \seq_len
ldmib stack, {r2, r3}
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(dup2_x1) dup2_x1 {
DISPATCH_START \seq_len
- POP3 r2, r3, lr
+ POP r2, r3, lr
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_NEXT
- PUSH3 r2, r3, lr
+ PUSH r2, r3, lr
DISPATCH_FINISH
}
(dup2_x2) dup2_x2 {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
- PUSH2 r2, r3
- PUSH4 r2, r3, tmp1, lr
+ PUSH r2, r3
+ PUSH r2, r3, tmp1, lr
DISPATCH_FINISH
}
(swap) swap {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
PUSH r2
DISPATCH_NEXT
@@ -842,7 +847,7 @@
(iadd) iadd {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
add tmp2, tmp2, tmp1
DISPATCH_NEXT
@@ -854,25 +859,18 @@
(ladd) ladd {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
adds r2, r2, tmp1
adc r3, r3, lr
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
-(fadd) fadd {
- POP2 r0, r1
- bl __aeabi_fadd
- PUSH r0
- DISPATCH \seq_len
-}
-
(isub) isub {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
sub tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -884,26 +882,18 @@
(lsub) lsub {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
subs r2, tmp1, r2
sbc r3, lr, r3
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
-(fsub) fsub {
- POP r1
- POP r0
- bl __aeabi_fsub
- PUSH r0
- DISPATCH \seq_len
-}
-
(imul) imul {
DISPATCH_START \seq_len
- POP2 r2, tmp1
+ POP r2, tmp1
DISPATCH_NEXT
mul tmp2, r2, tmp1
DISPATCH_NEXT
@@ -914,56 +904,33 @@
}
(lmul) lmul {
- POP4 r2, tmp1, ip, lr
+ POP r2, tmp1, ip, lr
umull r3, r0, ip, r2
mla tmp1, ip, tmp1, r0
DISPATCH_START \seq_len
mla tmp1, lr, r2, tmp1
DISPATCH_NEXT
- PUSH2 r3, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
-(fmul) fmul {
- POP2 r0, r1
- bl __aeabi_fmul
- PUSH r0
- DISPATCH \seq_len
-}
-
(ldiv) ldiv {
- POP2 r2, r3
- POP2 r0, r1
+ POP r2, r3
+ POP r0, r1
orrs lr, r2, r3
beq .ldiv_0
bl __aeabi_ldivmod
- PUSH2 r0, r1
- DISPATCH \seq_len
-}
-
-(fdiv) fdiv {
- POP r1
- POP r0
- bl __aeabi_fdiv
- PUSH r0
- DISPATCH \seq_len
-}
-
-(ddiv) ddiv {
- POP2 r2, r3
- POP2 r0, r1
- bl __aeabi_ddiv
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
(lrem) lrem {
- POP2 r2, r3
- POP2 r0, r1
+ POP r2, r3
+ POP r0, r1
orrs lr, r2, r3
beq .lrem_0
bl __aeabi_ldivmod
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH \seq_len
}
@@ -971,10 +938,10 @@
@ ECN: It must be possible to do better than this
POP r0
bl __aeabi_f2d
- PUSH2 r0, r1
+ PUSH r0, r1
GET_STACK 2, r0
bl __aeabi_f2d
- POP2 r2, r3
+ POP r2, r3
bl fmod
bl __aeabi_d2f
PUT_STACK 0, r0
@@ -982,10 +949,10 @@
}
(drem) drem {
- POP2 r2, r3
- POP2 r0, r1
+ POP r2, r3
+ POP r0, r1
bl fmod
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
@@ -1003,12 +970,12 @@
(lneg) lneg {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
rsbs r2, r2, #0
rsc r3, r3, #0
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
@@ -1034,7 +1001,7 @@
(ishl) ishl {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
and r2, r2, #31
mov r2, r3, lsl r2
@@ -1045,7 +1012,7 @@
(lshl) lshl {
DISPATCH_START \seq_len
- POP3 r2, r3, lr
+ POP r2, r3, lr
DISPATCH_NEXT
tst r2, #32
and r2, r2, #31
@@ -1055,13 +1022,13 @@
moveq lr, lr, lsl r2
rsbeq r2, r2, #32
orreq lr, lr, r3, lsr r2
- PUSH2 tmp1, lr
+ PUSH tmp1, lr
DISPATCH_FINISH
}
(ishr) ishr {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
and r2, r2, #31
mov r2, r3, asr r2
@@ -1072,7 +1039,7 @@
(lshr) lshr {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
tst r2, #32
and r2, r2, #31
@@ -1082,13 +1049,13 @@
moveq r3, r3, lsr r2
rsbeq r2, r2, #32
orreq r3, r3, tmp1, lsl r2
- PUSH2 r3, lr
+ PUSH r3, lr
DISPATCH_FINISH
}
(iushr) iushr {
DISPATCH_START \seq_len
- POP2 r2, r3
+ POP r2, r3
DISPATCH_NEXT
and r2, r2, #31
mov r2, r3, lsr r2
@@ -1099,7 +1066,7 @@
(lushr) lushr {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
tst r2, #32
and r2, r2, #31
@@ -1109,13 +1076,13 @@
moveq r3, r3, lsr r2
rsbeq r2, r2, #32
orreq r3, r3, tmp1, lsl r2
- PUSH2 r3, lr
+ PUSH r3, lr
DISPATCH_FINISH
}
(iand) iand {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
and tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -1127,18 +1094,18 @@
(land) land {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
and r2, tmp1, r2
and r3, lr, r3
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(ior) ior {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
orr tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -1150,18 +1117,18 @@
(lor) lor {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
orr r2, tmp1, r2
orr r3, lr, r3
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(ixor) ixor {
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
eor tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -1173,16 +1140,16 @@
(lxor) lxor {
DISPATCH_START \seq_len
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_NEXT
eor r2, tmp1, r2
eor r3, lr, r3
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iinc) iinc {
ldrsb lr, [jpc, #2]
DISPATCH_START \seq_len
@@ -1203,7 +1170,7 @@
DISPATCH_NEXT
mov r3, r2, asr #31
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
@@ -1217,7 +1184,7 @@
(i2d) i2d {
POP r0
bl __aeabi_i2d
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
@@ -1230,16 +1197,16 @@
}
(l2f) l2f {
- POP2 r0, r1
+ POP r0, r1
bl __aeabi_l2f
PUSH r0
DISPATCH \seq_len
}
(l2d) l2d {
- POP2 r0, r1
+ POP r0, r1
bl __aeabi_l2d
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
@@ -1253,33 +1220,33 @@
(f2l) f2l {
POP r0
bl _ZN13SharedRuntime3f2lEf
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
(f2d) f2d {
POP r0
bl __aeabi_f2d
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
(d2i) d2i {
- POP2 r0, r1
+ POP r0, r1
bl _ZN13SharedRuntime3d2iEd
PUSH r0
DISPATCH \seq_len
}
(d2l) d2l {
- POP2 r0, r1
+ POP r0, r1
bl _ZN13SharedRuntime3d2lEd
- PUSH2 r0, r1
+ PUSH r0, r1
DISPATCH \seq_len
}
(d2f) d2f {
- POP2 r0, r1
+ POP r0, r1
bl __aeabi_d2f
PUSH r0
DISPATCH \seq_len
@@ -1319,7 +1286,7 @@
}
(lcmp) lcmp {
- POP4 r2, r3, tmp1, lr
+ POP r2, r3, tmp1, lr
DISPATCH_START \seq_len
subs r2, tmp1, r2
movne r2, #1
@@ -1332,104 +1299,10 @@
DISPATCH_FINISH
}
-(fcmpl) fcmpl {
- ldmib stack, {r0, r1}
- bl __aeabi_fcmpgt
- cmp r0, #0
- movne r3, #-1
- bne 3f
- ldmib stack, {r0, r1}
- bl __aeabi_fcmplt
- cmp r0, #0
- movne r3, #1
- bne 3f
- ldmib stack, {r0, r1}
- bl __aeabi_fcmpeq
- cmp r0, #0
- movne r3, #0
- moveq r3, #-1
-3:
- DISPATCH_START \seq_len
- add stack, stack, #8
- DISPATCH_NEXT
- PUSH r3
- DISPATCH_FINISH
-}
-
-(fcmpg) fcmpg {
- ldmib stack, {r0, r1}
- bl __aeabi_fcmpgt
- cmp r0, #0
- movne r3, #-1
- bne 4f
- ldmib stack, {r0, r1}
- bl __aeabi_fcmplt
- cmp r0, #0
- movne r3, #1
- bne 4f
- ldmib stack, {r0, r1}
- bl __aeabi_fcmpeq
- cmp r0, #0
- movne r3, #0
- moveq r3, #1
-4:
- DISPATCH_START \seq_len
- add stack, stack, #8
- DISPATCH_NEXT
- PUSH r3
- DISPATCH_FINISH
-}
-
-(dcmpl) dcmpl {
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmpgt
- cmp r0, #0
- movne r3, #-1
- bne 5f
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmplt
- cmp r0, #0
- movne r3, #1
- bne 5f
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmpeq
- cmp r0, #0
- movne r3, #0
- moveq r3, #-1
-5:
- DISPATCH_START \seq_len
- add stack, stack, #16
- DISPATCH_NEXT
- PUSH r3
- DISPATCH_FINISH
-}
-
-(dcmpg) dcmpg {
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmpgt
- cmp r0, #0
- movne r3, #-1
- bne 6f
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmplt
- cmp r0, #0
- movne r3, #1
- bne 6f
- ldmib stack, {r0, r1, r2, r3}
- bl __aeabi_dcmpeq
- cmp r0, #0
- movne r3, #0
- moveq r3, #1
-6:
- DISPATCH_START \seq_len
- add stack, stack, #16
- DISPATCH_NEXT
- PUSH r3
- DISPATCH_FINISH
-}
+#ifdef NOTICE_SAFEPOINTS
-# r2 = [jpc, #1]
-# r1 = [jpc, #2]
+@ r2 = [jpc, #1]
+@ r1 = [jpc, #2]
(ifeq,ifnull) ifeq_unsafe {
POP r3
mov r2, r2, lsl #24
@@ -1503,7 +1376,7 @@
}
(if_icmpeq,if_acmpeq) if_icmpeq_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1515,7 +1388,7 @@
}
(if_icmpne,if_acmpne) if_icmpne_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1527,7 +1400,7 @@
}
(if_icmplt) if_icmplt_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1539,7 +1412,7 @@
}
(if_icmpge) if_icmpge_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1551,7 +1424,7 @@
}
(if_icmpgt) if_icmpgt_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1563,7 +1436,7 @@
}
(if_icmple) if_icmple_unsafe {
- POP2 r3, tmp1
+ POP r3, tmp1
mov r2, r2, lsl #24
cmp tmp1, r3
orr ip, r1, r2, asr #16
@@ -1581,17 +1454,19 @@
DISPATCH_BYTECODE
}
+#endif // NOTICE_SAFEPOINTS
+
(jsr) jsr {
ldr r3, [istate, #ISTATE_METHOD]
ldr r1, [r3, #8]
rsb r2, r1, jpc
sub r2, r2, #45
PUSH r2
- b do_goto_safe
+ b do_goto
}
-# r2 = [jpc, #1]
-# r1 = [jpc, #2]
+@ r2 = [jpc, #1]
+@ r1 = [jpc, #2]
(ret) ret {
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [r0, #8]
@@ -1600,7 +1475,7 @@
DISPATCH 48
}
-# ECN: We dont do safe and unsafe versions of tableswitch and lookupswitch
+@ ECN: We dont do safe and unsafe versions of tableswitch and lookupswitch
(tableswitch) tableswitch {
POP a2
bic a1, jpc, #3
@@ -1679,17 +1554,16 @@
DISPATCH_BYTECODE
}
+#ifdef FAST_BYTECODES
(igetfield) igetfield {
DISPATCH_START 3
add tmp2, constpool, r1, lsl #12
POP tmp1
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry78:
ldr tmp2, [tmp1, tmp2]
@@ -1705,11 +1579,9 @@
POP tmp1
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry79:
ldrsb tmp2, [tmp1, tmp2]
@@ -1725,11 +1597,9 @@
POP tmp1
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry80:
ldrh tmp2, [tmp1, tmp2]
@@ -1745,11 +1615,9 @@
POP tmp1
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry81:
ldrsh tmp2, [tmp1, tmp2]
@@ -1765,32 +1633,28 @@
POP tmp1
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
add tmp2, tmp1, tmp2
DISPATCH_NEXT
.abortentry82:
ldmia tmp2, {tmp2, tmp1}
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
(iputfield) iputfield {
DISPATCH_START 3
add tmp2, constpool, r1, lsl #12
- POP2 r3, tmp1 @ r3 = value, tmp1 = object
+ POP r3, tmp1 @ r3 = value, tmp1 = object
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
@@ -1802,14 +1666,12 @@
(cputfield) cputfield {
DISPATCH_START 3
add tmp2, constpool, r1, lsl #12
- POP2 r3, tmp1 @ r3 = value, tmp1 = object
+ POP r3, tmp1 @ r3 = value, tmp1 = object
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
@@ -1821,14 +1683,12 @@
(bputfield) bputfield {
DISPATCH_START 3
add tmp2, constpool, r1, lsl #12
- POP2 r3, tmp1 @ r3 = value, tmp1 = object
+ POP r3, tmp1 @ r3 = value, tmp1 = object
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
@@ -1839,13 +1699,15 @@
(aputfield) aputfield {
GET_STACK 1, r0 @ r0 = object
- add tmp2, constpool, r1, lsl #12
- POP r1 @ r1 = value
- add tmp2, tmp2, r2, lsl #4
- ldr tmp2, [tmp2, #8]
- cmp r0, #0
- beq null_ptr_exception
- add r0, r0, tmp2
+ add r3, constpool, r1, lsl #12
+ POP oop_value_tmp @ r1 = value
+ add r3, r3, r2, lsl #4
+ ldr r3, [r3, #CP_OFFSET+8]
+ SW_NPC cmp r0, #0
+ add oop_address_tmp, r0, r3
+ SW_NPC beq null_ptr_exception
+.abortentry113:
+ HW_NPC ldr ip, [r0] @ Only to provoke an abort
bl oop_store
ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX]
DISPATCH_START 3
@@ -1863,14 +1725,12 @@
(lputfield) lputfield {
DISPATCH_START 3
add tmp2, constpool, r1, lsl #12
- POP3 r3, tmp1, lr @ r3, tmp1 = value, lr = object
+ POP r3, tmp1, lr @ r3, tmp1 = value, lr = object
add tmp2, tmp2, r2, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
add tmp2, lr, tmp2
DISPATCH_NEXT
@@ -1880,19 +1740,20 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-# r1 = [jpc, #2]
+#endif // FAST_BYTECODES
+
+@ r2 = [jpc, #1]
+@ r1 = [jpc, #2]
(getstatic) getstatic {
- DISPATCH_START \seq_len
add tmp2, constpool, r1, lsl #12
- ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags
- DISPATCH_NEXT
+ add tmp2, tmp2, r2, lsl #4
+ ldr r3, [tmp2, #CP_OFFSET]
and r3, r3, #0x00ff0000
- cmp r3, #178 << 16
- bne resolve_getstatic
- ldr r3, [tmp2, #4]
- ldr r2, [tmp2, #12]
- ldr lr, [tmp2, #8]
+ cmp r3, #opc_getstatic << 16
+ blne resolve_get_put
+ ldr r3, [tmp2, #CP_OFFSET+4]
+ ldr r2, [tmp2, #CP_OFFSET+12]
+ ldr lr, [tmp2, #CP_OFFSET+8]
movs r2, r2, lsr #29
bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7
bcs getstatic_h @ C = 1 => R2 = 1
@@ -1902,19 +1763,18 @@
b getstatic_sh
}
-# r2 = [jpc, #1]
-# r1 = [jpc, #2]
+@ r2 = [jpc, #1]
+@ r1 = [jpc, #2]
(putstatic) putstatic {
- DISPATCH_START \seq_len
add tmp2, constpool, r1, lsl #12
- ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags
- DISPATCH_NEXT
+ add tmp2, tmp2, r2, lsl #4
+ ldr r3, [tmp2, #CP_OFFSET]
and r3, r3, #0xff000000
- cmp r3, #179 << 24
- bne resolve_putstatic
- ldr r3, [tmp2, #4] @ r3 = object
- ldr lr, [tmp2, #12] @ lr = tos_type
- ldr r2, [tmp2, #8] @ r2 = offset
+ cmp r3, #opc_putstatic << 24
+ blne resolve_get_put
+ ldr r3, [tmp2, #CP_OFFSET+4] @ r3 = object
+ ldr lr, [tmp2, #CP_OFFSET+12] @ lr = tos_type
+ ldr r2, [tmp2, #CP_OFFSET+8] @ r2 = offset
movs lr, lr, lsr #29
bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7
bcs putstatic_h @ C = 1 => R2 = 1
@@ -1924,6 +1784,8 @@
b putstatic_sh
}
+#ifdef NOTICE_SAFEPOINTS
+
(return) return_unsafe {
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
@@ -1943,14 +1805,17 @@
add r1, r2, #4
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
add stack, r1, r0, lsl #2
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT
@@ -1959,10 +1824,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
bl return_check_monitors
@@ -1988,15 +1852,18 @@
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -2005,10 +1872,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
bl return_check_monitors
@@ -2033,18 +1899,21 @@
add r1, r2, #4
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
- POP2 r2, r3
+ POP r2, r3
add stack, r1, r0, lsl #2
stmdb stack!, {r2, r3}
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT
@@ -2053,44 +1922,47 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
bl return_check_monitors
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(ldc) ldc {
- ldrb lr, [jpc, #1]
ldr r3, [istate, #ISTATE_METHOD] @ method
+ ldrb lr, [jpc, #1]
+
+ ldr tmp1, [r3, #12] @ constants
DISPATCH_START \seq_len
- ldr r2, [r3, #12] @ constants
- ldr r3, [r2, #8]
+ ldr r3, [tmp1, #8]
+ DISPATCH_NEXT
add r3, r3, #12
ldrb r3, [r3, lr]
DISPATCH_NEXT
+ DISPATCH_NEXT
cmp r3, #JVM_CONSTANT_Integer
cmpne r3, #JVM_CONSTANT_Float
cmpne r3, #JVM_CONSTANT_String
bne 1f
+ add r3, tmp1, lr, lsl #2
+ ldr r3, [r3, #32]
DISPATCH_NEXT
-
- add r3, r2, lr, lsl #2
- ldr lr, [r3, #32]
- PUSH lr
+ PUSH r3
DISPATCH_FINISH
1:
cmp r3, #JVM_CONSTANT_Class
bne 2f
- add r0, r2, #32
+ add r0, tmp1, #32
ldr r0, [r0, lr, lsl #2]
ldr r1, [r0, #60]
PUSH r1
@@ -2098,18 +1970,17 @@
2:
sub jpc, jpc, #\seq_len
ldr r0, [istate, #ISTATE_THREAD]
- str jpc, [istate, #ISTATE_BCP]
- str stack, [istate, #ISTATE_STACK]
+ DECACHE_JPC
+ DECACHE_STACK
mov r1, #0
bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb
ldr r0, [istate, #ISTATE_THREAD] @ thread
- ldr stack, [istate, #ISTATE_STACK]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
+ ASSERT_STACK_CACHED
+ CACHE_CP
ldr r1, [r0, #THREAD_PENDING_EXC]
- ldr jpc, [istate, #ISTATE_BCP]
- add constpool, constpool, #CONST_POOL_OFFSET
+ CACHE_JPC
cmp r1, #0
- ldr locals, [istate, #ISTATE_LOCALS]
+ ASSERT_LOCALS_CACHED
bne handle_exception
ldr r3, [r0, #THREAD_VM_RESULT]
mov r2, #0
@@ -2133,17 +2004,18 @@
ldrb r3, [r3, lr]
DISPATCH_NEXT
+ DISPATCH_NEXT
cmp r3, #JVM_CONSTANT_Integer
cmpne r3, #JVM_CONSTANT_Float
cmpne r3, #JVM_CONSTANT_String
bne 1f
- DISPATCH_NEXT
-
add r3, r2, lr, lsl #2
- ldr lr, [r3, #32]
- PUSH lr
+ ldr r3, [r3, #32]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
1:
cmp r3, #JVM_CONSTANT_Class
@@ -2156,20 +2028,19 @@
2:
sub jpc, jpc, #\seq_len
ldr r0, [istate, #ISTATE_THREAD]
- str jpc, [istate, #ISTATE_BCP]
- str stack, [istate, #ISTATE_STACK]
+ DECACHE_JPC
+ DECACHE_STACK
mov r1, #1
bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb
+ ASSERT_STACK_CACHED
+ ASSERT_LOCALS_CACHED
ldr r0, [istate, #ISTATE_THREAD] @ thread
- ldr stack, [istate, #ISTATE_STACK]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
+ CACHE_CP
ldr r1, [r0, #THREAD_PENDING_EXC]
- ldr jpc, [istate, #ISTATE_BCP]
- add constpool, constpool, #CONST_POOL_OFFSET
+ CACHE_JPC
cmp r1, #0
- ldr locals, [istate, #ISTATE_LOCALS]
- bne handle_exception
ldr r3, [r0, #THREAD_VM_RESULT]
+ bne handle_exception
mov r2, #0
PUSH r3
str r2, [r0, #THREAD_VM_RESULT]
@@ -2191,23 +2062,26 @@
ldrb tmp1, [tmp1, r3]
DISPATCH_NEXT
+ DISPATCH_NEXT
cmp tmp1, #JVM_CONSTANT_Long
cmpne tmp1, #JVM_CONSTANT_Double
bne vm_fatal_error
- DISPATCH_NEXT
add tmp1, r2, r3, lsl #2
- add tmp1, tmp1, #32
- ldmia tmp1, {r3, tmp1}
- PUSH2 r3, tmp1
+ ldr r3, [tmp1, #32]
+ ldr tmp1, [tmp1, #36]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3, tmp1
DISPATCH_FINISH
}
+#ifdef FAST_BYTECODES
(iadd_u4store) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
add tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2221,7 +2095,7 @@
(isub_u4store) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
sub tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2235,7 +2109,7 @@
(iand_u4store) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
and tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2249,7 +2123,7 @@
(ior_u4store) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
orr tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2263,7 +2137,7 @@
(ixor_u4store) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
eor tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2279,7 +2153,7 @@
DISPATCH_START \seq_len
DISPATCH_NEXT
rsb r3, lr, #opc_istore_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
add tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2293,7 +2167,7 @@
DISPATCH_START \seq_len
DISPATCH_NEXT
rsb r3, lr, #opc_istore_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
sub tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2307,7 +2181,7 @@
DISPATCH_START \seq_len
DISPATCH_NEXT
rsb r3, lr, #opc_istore_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
and tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2321,7 +2195,7 @@
DISPATCH_START \seq_len
DISPATCH_NEXT
rsb r3, lr, #opc_istore_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
orr tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2335,7 +2209,7 @@
DISPATCH_START \seq_len
DISPATCH_NEXT
rsb r3, lr, #opc_istore_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
eor tmp2, tmp1, tmp2
DISPATCH_NEXT
@@ -2344,7 +2218,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload_iconst_N)
{
ldrb r3, [jpc, #2]
@@ -2356,7 +2230,7 @@
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
@@ -2371,11 +2245,11 @@
sub tmp2, r2, #opc_iconst_0
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
-# (aload_N)(getfield)
+@ (aload_N)(getfield)
(iaccess_0,iaccess_1,iaccess_2,iaccess_3)
{
ldrb r2, [jpc, #3]
@@ -2386,12 +2260,10 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, r3, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
DISPATCH_NEXT
- ldr tmp2, [tmp2, #8]
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry87:
ldr tmp2, [tmp1, tmp2]
@@ -2400,451 +2272,837 @@
DISPATCH_FINISH
}
-###############################################################################
-# ECN: Optimised bytecode pairs
-###############################################################################
-
-# --- ECN: load; load ---------------------------------------------------------
-
-(aload_0,aload_1,aload_2,aload_3)
-(aload_0,aload_1,aload_2,aload_3)
+@ r2 = [jpc, #1]
+(iload_iload) fast_iload_iload
{
- rsb tmp1, r0, #opc_aload_0
+ ldrb r3, [jpc, #3]
DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_aload_0
+ rsb r2, r2, #0
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
- ldr tmp2, [locals, tmp2, lsl #2]
+ rsb r3, r3, #0
DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
-(aload_0,aload_1,aload_2,aload_3)
-(iload_0,iload_1,iload_2,iload_3)
+@ r2 = [jpc, #1]
+(iload_iload_N) fast_iload_iload_N
{
- rsb tmp1, r0, #opc_aload_0
+ ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_iload_0
+ rsb r2, r2, #0
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
- ldr tmp2, [locals, tmp2, lsl #2]
+ rsb r3, r3, #opc_iload_0
DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
-(iload_0,iload_1,iload_2,iload_3)
-(aload_0,aload_1,aload_2,aload_3)
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload) fast_iload_N_iload
{
- rsb tmp1, r0, #opc_iload_0
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_aload_0
+ rsb r3, r3, #0
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
- ldr tmp2, [locals, tmp2, lsl #2]
+ ldr tmp1, [locals, r2, lsl #2]
DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
-# 7 cycles
-(iload_0,iload_1,iload_2,iload_3)
-(iload_0,iload_1,iload_2,iload_3)
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N) fast_iload_N_iload_N
{
- rsb tmp1, r0, #opc_iload_0
+ rsb r3, r0, #opc_iload_0_iload_N
DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_iload_0
+ rsb r2, r2, #opc_iload_0
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
- ldr tmp2, [locals, tmp2, lsl #2]
+ ldr tmp1, [locals, r3, lsl #2]
DISPATCH_NEXT
+ ldr r3, [locals, r2, lsl #2]
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ PUSH r3, tmp1
DISPATCH_FINISH
}
-(aload_0,aload_1,aload_2,aload_3)
-(iload,aload,fload)
-{
- ldrb r3, [jpc, #2]
- rsb tmp1, r0, #opc_aload_0
- DISPATCH_START \seq_len
- ldr tmp1, [locals, tmp1, lsl #2]
- rsb r3, r3, #0
+#endif // FAST_BYTECODE
+
+#ifdef HW_FP
+
+(fadd) fadd_vfp {
+ DISPATCH_START 1
+ vldr s15, [stack, #8]
+ vldr s14, [stack, #4]
DISPATCH_NEXT
- ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
+ fadds s15, s15, s14
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp1
+ vstr s15, [stack, #8]
+ add stack, stack, #4
DISPATCH_FINISH
}
-(iload_0,iload_1,iload_2,iload_3)
-(iload,aload,fload)
-{
- ldrb r3, [jpc, #2]
- rsb tmp1, r0, #opc_iload_0
- DISPATCH_START \seq_len
- ldr tmp1, [locals, tmp1, lsl #2]
- rsb r3, r3, #0
+(dadd) dadd_vfp {
+ DISPATCH_START 1
+ vldr d7, [stack, #12]
+ vldr d6, [stack, #4]
DISPATCH_NEXT
- ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
+ faddd d0, d7, d6
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp1
+ vstr d0, [stack, #12]
+ add stack, stack, #8
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)
-(aload_0,aload_1,aload_2,aload_3)
-{
- DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_aload_0
+(fsub) fsub_vfp {
+ DISPATCH_START 1
+ vldr s15, [stack, #8]
+ vldr s14, [stack, #4]
DISPATCH_NEXT
- rsb tmp1, r2, #0
- ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
+ fsubs s15, s15, s14
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ vstr s15, [stack, #8]
+ add stack, stack, #4
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)
-(iload_0,iload_1,iload_2,iload_3)
-{
- DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_iload_0
+(fmul) fmul_vfp {
+ DISPATCH_START 1
+ vldr s15, [stack, #8]
+ vldr s14, [stack, #4]
DISPATCH_NEXT
- rsb tmp1, r2, #0
- ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
+ fmuls s15, s15, s14
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ vstr s15, [stack, #8]
+ add stack, stack, #4
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)(iload,aload,fload) {
- ldrb tmp2, [jpc, #3]
- rsb tmp1, r2, #0
- DISPATCH_START \seq_len
- rsb tmp2, tmp2, #0
- ldr tmp1, [locals, tmp1, lsl #2]
+(dmul) dmul_vfp {
+ FBC cmp r2, #opc_dadd
+ DISPATCH_START 1
+ FBC beq 1f
+2:
+ vldr d7, [stack, #12]
+ vldr d6, [stack, #4]
DISPATCH_NEXT
- ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
+ fmuld d0, d7, d6
DISPATCH_NEXT
- PUSH2 tmp2, tmp1
+ DISPATCH_NEXT
+ vstr d0, [stack, #12]
+ add stack, stack, #8
DISPATCH_FINISH
+1:
+ FBC mov r2, #opc_dmac
+ FBC strb r2, [jpc, #-1]
+ FBC b 2b
}
-# --- ECN: load; store --------------------------------------------------------
+#ifdef FAST_BYTECODES
-(aload_0,aload_1,aload_2,aload_3)
-(astore_0,astore_1,astore_2,astore_3)
-{
- rsb tmp1, r0, #opc_aload_0
+(dmac) dmac_vfp {
DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_astore_0
+ vldr d2, [stack, #20]
+ vldr d1, [stack, #12]
+ vldr d0, [stack, #4]
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
+ fmacd d2, d1, d0
DISPATCH_NEXT
DISPATCH_NEXT
- str tmp1, [locals, tmp2, lsl #2]
+ vstr d2, [stack, #20]
+ add stack, stack, #16
DISPATCH_FINISH
}
-(iload_0,iload_1,iload_2,iload_3)
-(istore_0,istore_1,istore_2,istore_3)
-{
- rsb tmp1, r0, #opc_iload_0
- DISPATCH_START \seq_len
- rsb tmp2, r1, #opc_istore_0
+#endif // FAST_BYTECODES
+
+(fdiv) fdiv_vfp {
+ DISPATCH_START 1
+ vldr s15, [stack, #8]
+ vldr s14, [stack, #4]
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
+ fdivs s15, s15, s14
DISPATCH_NEXT
DISPATCH_NEXT
- str tmp1, [locals, tmp2, lsl #2]
+ vstr s15, [stack, #8]
+ add stack, stack, #4
DISPATCH_FINISH
}
-(aload_0,aload_1,aload_2,aload_3)
-(astore,istore,fstore)
-{
- ldrb tmp2, [jpc, #2]
- rsb tmp1, r0, #opc_aload_0
- DISPATCH_START \seq_len
- rsb tmp2, tmp2, #0
+(ddiv) ddiv_vfp {
+ DISPATCH_START 1
+ vldr d7, [stack, #12]
+ vldr d6, [stack, #4]
DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
+ fdivd d0, d7, d6
DISPATCH_NEXT
DISPATCH_NEXT
- str tmp1, [locals, tmp2, lsl #2]
+ vstr d0, [stack, #12]
+ add stack, stack, #8
DISPATCH_FINISH
}
-(iload_0,iload_1,iload_2,iload_3)
-(astore,istore,fstore)
-{
- ldrb tmp2, [jpc, #2]
- rsb tmp1, r0, #opc_iload_0
- DISPATCH_START \seq_len
- rsb tmp2, tmp2, #0
- DISPATCH_NEXT
- ldr tmp1, [locals, tmp1, lsl #2]
+(fcmpl) fcmpl_vfp {
+ DISPATCH_START 1
+ flds s14, [stack, #8]
+ flds s15, [stack, #4]
DISPATCH_NEXT
DISPATCH_NEXT
+ fcmpes s14, s15
+ add stack, stack, #8
+ fmstat
+ mvnmi r3, #0
+ bmi 1f
+ movgt r3, #1
+ bgt 1f
+ fcmps s14, s15
+ fmstat
+ moveq r3, #0
+ mvnne r3, #0
+1:
DISPATCH_NEXT
- str tmp1, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)
-(astore_0,astore_1,astore_2,astore_3)
-{
- DISPATCH_START \seq_len
- rsb tmp1, r1, #opc_astore_0
+(fcmpg) fcmpg_vfp {
+ DISPATCH_START 1
+ flds s14, [stack, #8]
+ flds s15, [stack, #4]
DISPATCH_NEXT
- rsb tmp2, r2, #0
- ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
+ fcmpes s14, s15
+ add stack, stack, #8
+ fmstat
+ mvnmi r3, #0
+ bmi 1f
+ movgt r3, #1
+ bgt 1f
+ fcmps s14, s15
+ fmstat
+ moveq r3, #0
+ movne r3, #1
+1:
DISPATCH_NEXT
DISPATCH_NEXT
- str tmp2, [locals, tmp1, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)
-(istore_0,istore_1,istore_2,istore_3)
+(dcmpl) dcmpl_vfp {
+ DISPATCH_START 1
+ fldd d6, [stack, #12]
+ fldd d7, [stack, #4]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ fcmped d6, d7
+ fmstat
+ mvnmi r3, #0
+ bmi 1f
+ movgt r3, #1
+ bgt 1f
+ fcmpd d6, d7
+ fmstat
+ moveq r3, #0
+ mvnne r3, #0
+1:
+ add stack, stack, #16
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
+ DISPATCH_FINISH
+}
+
+(dcmpg) dcmpg_vfp {
+ DISPATCH_START 1
+ fldd d6, [stack, #12]
+ fldd d7, [stack, #4]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ fcmped d6, d7
+ fmstat
+ mvnmi r3, #0
+ bmi 1f
+ movgt r3, #1
+ bgt 1f
+ fcmpd d6, d7
+ fmstat
+ moveq r3, #0
+ movne r3, #1
+1:
+ add stack, stack, #16
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
+ DISPATCH_FINISH
+}
+
+#endif // HW_FP
+
+#ifdef FAST_BYTECODES
+
+@##############################################################################
+@ ECN: Optimised bytecode pairs
+@##############################################################################
+
+@ --- ECN: load; iaccess ------------------------------------------------------
+
+(iload_0,iload_1,iload_2,iload_3)
+(iaccess_0,iaccess_1,iaccess_2,iaccess_3)
{
+ rsb lr, r0, #opc_iload_0
+ ldrb r2, [jpc, #4]
+ rsb tmp1, r1, #opc_iaccess_0
+ ldrb r3, [jpc, #3]
+ ldr lr, [locals, lr, lsl #2]
+ add tmp2, constpool, r2, lsl #12
DISPATCH_START \seq_len
- rsb tmp1, r1, #opc_istore_0
+ PUSH lr
+ ldr tmp1, [locals, tmp1, lsl #2]
+ add tmp2, r3, lsl #4
DISPATCH_NEXT
- rsb tmp2, r2, #0
- ldr tmp2, [locals, tmp2, lsl #2]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
DISPATCH_NEXT
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
+.abortentry111:
+ ldr tmp2, [tmp1, tmp2]
DISPATCH_NEXT
- str tmp2, [locals, tmp1, lsl #2]
+ PUSH tmp2
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)(astore,istore,fstore) {
- ldrb tmp1, [jpc, #3]
- rsb tmp2, r2, #0
+(iload,aload,fload)
+(iaccess_0,iaccess_1,iaccess_2,iaccess_3)
+{
+ rsb lr, r2, #0
+ ldrb r2, [jpc, #5]
+ rsb tmp1, r1, #opc_iaccess_0
+ ldrb r3, [jpc, #4]
+ ldr lr, [locals, lr, lsl #2]
+ add tmp2, constpool, r2, lsl #12
DISPATCH_START \seq_len
- rsb tmp1, tmp1, #0
+ PUSH lr
+ ldr tmp1, [locals, tmp1, lsl #2]
+ add tmp2, r3, lsl #4
DISPATCH_NEXT
- ldr tmp2, [locals, tmp2, lsl #2]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
DISPATCH_NEXT
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
+.abortentry112:
+ ldr tmp2, [tmp1, tmp2]
DISPATCH_NEXT
- str tmp2, [locals, tmp1, lsl #2]
+ PUSH tmp2
DISPATCH_FINISH
}
-# --- ECN: load; const -------------------------------------------------------
+@ --- ECN: load; load ---------------------------------------------------------
(aload_0,aload_1,aload_2,aload_3)
-(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
+(aload_0,aload_1,aload_2,aload_3)
{
rsb tmp1, r0, #opc_aload_0
DISPATCH_START \seq_len
- sub tmp2, r1, #opc_iconst_0
+ rsb tmp2, r1, #opc_aload_0
DISPATCH_NEXT
ldr tmp1, [locals, tmp1, lsl #2]
+ ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
- PUSH tmp1
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH tmp2
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
+(aload_0,aload_1,aload_2,aload_3)
(iload_0,iload_1,iload_2,iload_3)
-(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
{
- add r0, r0, #opc_iload_0_iconst_N-opc_iload_0
- strb r0, [jpc]
- b do_iload_0_iconst_N
+ rsb tmp1, r0, #opc_aload_0
+ DISPATCH_START \seq_len
+ rsb tmp2, r1, #opc_iload_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ ldr tmp2, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH tmp2, tmp1
+ DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)
-(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
+(iload_0,iload_1,iload_2,iload_3)
+(aload_0,aload_1,aload_2,aload_3)
{
- cmp r0, #opc_iload
+ rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
- sub r3, r1, #opc_iconst_0
- DISPATCH_NEXT
- ldr tmp2, [locals, -r2, lsl #2]
+ rsb tmp2, r1, #opc_aload_0
DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ cmp r0, #opc_igetfield
+ ldr tmp2, [locals, tmp2, lsl #2]
beq 1f
+2:
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ DISPATCH_NEXT
+ PUSH tmp2, tmp1
DISPATCH_FINISH
1:
- mov tmp1, #opc_iload_iconst_N
- strb tmp1, [jpc, #-\seq_len]!
- b do_iload_iconst_N
+ ldrb lr, [jpc, #-1]
+ add lr, lr, #opc_iaccess_0-opc_aload_0
+ strb lr, [jpc, #-1]
+ b 2b
+}
+
+@ 7 cycles
+(iload_0,iload_1,iload_2,iload_3)
+(iload_0,iload_1,iload_2,iload_3)
+{
+ add r0, r0, #opc_iload_0_iload_N-opc_iload_0
+ strb r0, [jpc]
+ b do_fast_iload_N_iload_N
}
(aload_0,aload_1,aload_2,aload_3)
-(bipush)
+(iload,aload,fload)
{
- ldrsb r2, [jpc, #2]
- rsb r3, r0, #opc_aload_0
+ ldrb r3, [jpc, #2]
+ rsb tmp1, r0, #opc_aload_0
DISPATCH_START \seq_len
+ ldr tmp1, [locals, tmp1, lsl #2]
+ rsb r3, r3, #0
+ DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 r2, r3
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3, tmp1
DISPATCH_FINISH
}
(iload_0,iload_1,iload_2,iload_3)
-(bipush)
+(aload,fload)
{
- ldrsb r2, [jpc, #2]
- rsb r3, r0, #opc_iload_0
+ ldrb r3, [jpc, #2]
+ rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
+ ldr tmp1, [locals, tmp1, lsl #2]
+ rsb r3, r3, #0
+ DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 r2, r3
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3, tmp1
DISPATCH_FINISH
}
+(iload_0,iload_1,iload_2,iload_3)
+(iload)
+{
+ add r0, r0, #opc_iload_0_iload-opc_iload_0
+ strb r0, [jpc]
+ b do_fast_iload_N_iload
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)
(aload_0,aload_1,aload_2,aload_3)
-(sipush)
{
- ldrsb r2, [jpc, #2] @ zero_extendqisi2
- ldrb lr, [jpc, #3] @ zero_extendqisi2
- rsb r3, r0, #opc_aload_0
DISPATCH_START \seq_len
- ldr r3, [locals, r3, lsl #2]
+ rsb tmp2, r1, #opc_aload_0
+ DISPATCH_NEXT
+ rsb tmp1, r2, #0
+ ldr tmp2, [locals, tmp2, lsl #2]
+ cmp r0, #opc_igetfield
+ DISPATCH_NEXT
+ beq 1f
+2:
+ ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
- orr r2, lr, r2, asl #8
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH tmp2, tmp1
DISPATCH_FINISH
+1:
+ ldrb lr, [jpc, #-1]
+ add lr, lr, #opc_iaccess_0-opc_aload_0
+ strb lr, [jpc, #-1]
+ b 2b
}
+@ r2 = [jpc, #1]
+(aload,fload)
(iload_0,iload_1,iload_2,iload_3)
-(sipush)
{
- ldrsb r2, [jpc, #2] @ zero_extendqisi2
- ldrb lr, [jpc, #3] @ zero_extendqisi2
- rsb r3, r0, #opc_iload_0
DISPATCH_START \seq_len
- ldr r3, [locals, r3, lsl #2]
+ rsb tmp2, r1, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp1, r2, #0
+ ldr tmp2, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
- orr r2, lr, r2, asl #8
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)(bipush) {
- ldrsb r3, [jpc, #3]
- DISPATCH_START \seq_len
- ldr lr, [locals, -r2, lsl #2]
- DISPATCH_NEXT
- PUSH2 r3, lr
- DISPATCH_FINISH
+@ r2 = [jpc, #1]
+(iload)
+(iload_0,iload_1,iload_2,iload_3)
+{
+ mov r0, #opc_iload_iload_N
+ strb r0, [jpc]
+ b do_fast_iload_iload_N
}
-# r2 = [jpc, #1]
-(iload,aload,fload)(sipush) {
- ldrsb r3, [jpc, #3]
- ldrb lr, [jpc, #4]
+@ r2 = [jpc, #1]
+(aload,fload)(iload,aload,fload) {
+ ldrb tmp2, [jpc, #3]
+ rsb tmp1, r2, #0
DISPATCH_START \seq_len
- ldr tmp1, [locals, -r2, lsl #2]
- orr r3, lr, r3, asl #8
+ rsb tmp2, tmp2, #0
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
- PUSH2 r3, tmp1
+ DISPATCH_NEXT
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
-# --- ECN: load; Xaload -------------------------------------------------------
+(iload)(iload) {
+ mov r0, #opc_iload_iload
+ strb r0, [jpc]
+ b do_fast_iload_iload
+}
-(iload_0,iload_1,iload_2,iload_3)
-(iaload,aaload,faload)
-{
- POP r3
- rsb r2, r0, #opc_iload_0
+(iload)(aload,fload) {
+ ldrb tmp2, [jpc, #3]
+ rsb tmp1, r2, #0
DISPATCH_START \seq_len
- ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
-.abortentry19:
- ldr lr, [r3, #8] @ lr = length
+ rsb tmp2, tmp2, #0
+ ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
- cmp r2, lr
- bcs array_bound_exception_jpc_1
- add r3, r3, r2, lsl #2
- ldr lr, [r3, #12]
+ ldr tmp2, [locals, tmp2, lsl #2]
DISPATCH_NEXT
- PUSH lr
+ DISPATCH_NEXT
+ PUSH tmp2, tmp1
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
-(iload,aload,fload)(iaload,aaload,faload) {
- POP r3
- ldr r2, [locals, -r2, lsl #2]
+@ --- ECN: load; store --------------------------------------------------------
+
+(aload_0,aload_1,aload_2,aload_3)
+(astore_0,astore_1,astore_2,astore_3)
+{
+ rsb tmp1, r0, #opc_aload_0
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
-.abortentry20:
- ldr lr, [r3, #8] @ lr = length
+ rsb tmp2, r1, #opc_astore_0
DISPATCH_NEXT
- cmp r2, lr
- bcs array_bound_exception_jpc_1
- add r3, r3, r2, lsl #2
- ldr lr, [r3, #12]
+ ldr tmp1, [locals, tmp1, lsl #2]
DISPATCH_NEXT
- PUSH lr
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp1, [locals, tmp2, lsl #2]
DISPATCH_FINISH
}
(iload_0,iload_1,iload_2,iload_3)
-(baload)
+(istore_0,istore_1,istore_2,istore_3)
{
- POP r3
- rsb r2, r0, #opc_iload_0
+ rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
- ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ rsb tmp2, r1, #opc_istore_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp1, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(aload_0,aload_1,aload_2,aload_3)
+(astore,istore,fstore)
+{
+ ldrb tmp2, [jpc, #2]
+ rsb tmp1, r0, #opc_aload_0
+ DISPATCH_START \seq_len
+ rsb tmp2, tmp2, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp1, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0,iload_1,iload_2,iload_3)
+(astore,istore,fstore)
+{
+ ldrb tmp2, [jpc, #2]
+ rsb tmp1, r0, #opc_iload_0
+ DISPATCH_START \seq_len
+ rsb tmp2, tmp2, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp1, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)
+(astore_0,astore_1,astore_2,astore_3)
+{
+ DISPATCH_START \seq_len
+ rsb tmp1, r1, #opc_astore_0
+ DISPATCH_NEXT
+ rsb tmp2, r2, #0
+ ldr tmp2, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp2, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)
+(istore_0,istore_1,istore_2,istore_3)
+{
+ DISPATCH_START \seq_len
+ rsb tmp1, r1, #opc_istore_0
+ DISPATCH_NEXT
+ rsb tmp2, r2, #0
+ ldr tmp2, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp2, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)(astore,istore,fstore) {
+ ldrb tmp1, [jpc, #3]
+ rsb tmp2, r2, #0
+ DISPATCH_START \seq_len
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ ldr tmp2, [locals, tmp2, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ str tmp2, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+@ --- ECN: load; const -------------------------------------------------------
+
+(aload_0,aload_1,aload_2,aload_3)
+(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
+{
+ rsb tmp1, r0, #opc_aload_0
+ DISPATCH_START \seq_len
+ sub tmp2, r1, #opc_iconst_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH tmp1
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH tmp2
+ DISPATCH_FINISH
+}
+
+(iload_0,iload_1,iload_2,iload_3)
+(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
+{
+ add r0, r0, #opc_iload_0_iconst_N-opc_iload_0
+ strb r0, [jpc]
+ b do_iload_0_iconst_N
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)
+(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
+{
+ cmp r0, #opc_iload
+ DISPATCH_START \seq_len
+ sub r3, r1, #opc_iconst_0
+ DISPATCH_NEXT
+ ldr tmp2, [locals, -r2, lsl #2]
+ DISPATCH_NEXT
+ beq 1f
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3, tmp2
+ DISPATCH_FINISH
+1:
+ mov tmp1, #opc_iload_iconst_N
+ strb tmp1, [jpc, #-\seq_len]!
+ b do_iload_iconst_N
+}
+
+(aload_0,aload_1,aload_2,aload_3)
+(bipush)
+{
+ ldrsb r2, [jpc, #2]
+ rsb r3, r0, #opc_aload_0
+ DISPATCH_START \seq_len
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ PUSH r2, r3
+ DISPATCH_FINISH
+}
+
+(iload_0,iload_1,iload_2,iload_3)
+(bipush)
+{
+ ldrsb r2, [jpc, #2]
+ rsb r3, r0, #opc_iload_0
+ DISPATCH_START \seq_len
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ PUSH r2, r3
+ DISPATCH_FINISH
+}
+
+(aload_0,aload_1,aload_2,aload_3)
+(sipush)
+{
+ ldrsb r2, [jpc, #2] @ zero_extendqisi2
+ ldrb lr, [jpc, #3] @ zero_extendqisi2
+ rsb r3, r0, #opc_aload_0
+ DISPATCH_START \seq_len
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ orr r2, lr, r2, asl #8
+ DISPATCH_NEXT
+ PUSH r2, r3
+ DISPATCH_FINISH
+}
+
+(iload_0,iload_1,iload_2,iload_3)
+(sipush)
+{
+ ldrsb r2, [jpc, #2] @ zero_extendqisi2
+ ldrb lr, [jpc, #3] @ zero_extendqisi2
+ rsb r3, r0, #opc_iload_0
+ DISPATCH_START \seq_len
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ orr r2, lr, r2, asl #8
+ DISPATCH_NEXT
+ PUSH r2, r3
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)(bipush) {
+ ldrsb r3, [jpc, #3]
+ DISPATCH_START \seq_len
+ ldr lr, [locals, -r2, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3, lr
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)(sipush) {
+ ldrsb r3, [jpc, #3]
+ ldrb lr, [jpc, #4]
+ DISPATCH_START \seq_len
+ ldr tmp1, [locals, -r2, lsl #2]
+ orr r3, lr, r3, asl #8
+ DISPATCH_NEXT
+ PUSH r3, tmp1
+ DISPATCH_FINISH
+}
+
+@ --- ECN: load; Xaload -------------------------------------------------------
+
+(iload_0,iload_1,iload_2,iload_3)
+(iaload,aaload,faload)
+{
+ POP r3
+ rsb r2, r0, #opc_iload_0
+ DISPATCH_START \seq_len
+ ldr r2, [locals, r2, lsl #2]
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
+.abortentry19:
+ ldr lr, [r3, #8] @ lr = length
+ DISPATCH_NEXT
+ cmp r2, lr
+ bcs array_bound_exception_jpc_1
+ add r3, r3, r2, lsl #2
+ ldr lr, [r3, #12]
+ DISPATCH_NEXT
+ PUSH lr
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
+(iload,aload,fload)(iaload,aaload,faload) {
+ POP r3
+ ldr r2, [locals, -r2, lsl #2]
+ DISPATCH_START \seq_len
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
+.abortentry20:
+ ldr lr, [r3, #8] @ lr = length
+ DISPATCH_NEXT
+ cmp r2, lr
+ bcs array_bound_exception_jpc_1
+ add r3, r3, r2, lsl #2
+ ldr lr, [r3, #12]
+ DISPATCH_NEXT
+ PUSH lr
+ DISPATCH_FINISH
+}
+
+(iload_0,iload_1,iload_2,iload_3)
+(baload)
+{
+ POP r3
+ rsb r2, r0, #opc_iload_0
+ DISPATCH_START \seq_len
+ ldr r2, [locals, r2, lsl #2]
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry21:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2864,10 +3122,8 @@
rsb r2, r0, #opc_iload_0
DISPATCH_START \seq_len
ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry22:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2887,10 +3143,8 @@
rsb r2, r0, #opc_iload_0
DISPATCH_START \seq_len
ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry23:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2903,15 +3157,13 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload,aload,fload)(baload) {
POP r3
ldr r2, [locals, -r2, lsl #2]
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry24:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2924,15 +3176,13 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload,aload,fload)(caload) {
POP r3
ldr r2, [locals, -r2, lsl #2]
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry25:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2945,15 +3195,13 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload,aload,fload)(saload) {
POP r3
ldr r2, [locals, -r2, lsl #2]
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry26:
ldr lr, [r3, #8] @ lr = length
DISPATCH_NEXT
@@ -2966,19 +3214,17 @@
DISPATCH_FINISH
}
-# --- ECN: load; Xastore -------------------------------------------------------
+@ --- ECN: load; Xastore -------------------------------------------------------
(iload_0,iload_1,iload_2,iload_3)
(iastore,fastore)
{
- POP2 r2, r3
+ POP r2, r3
rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
ldr tmp1, [locals, tmp1, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry27:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -2993,14 +3239,12 @@
(iload_0,iload_1,iload_2,iload_3)
(bastore)
{
- POP2 r2, r3
+ POP r2, r3
rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
ldr tmp1, [locals, tmp1, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry28:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -3015,14 +3259,12 @@
(iload_0,iload_1,iload_2,iload_3)
(castore,sastore)
{
- POP2 r2, r3
+ POP r2, r3
rsb tmp1, r0, #opc_iload_0
DISPATCH_START \seq_len
ldr tmp1, [locals, tmp1, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry29:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -3035,13 +3277,11 @@
}
(iload,aload,fload)(iastore,fastore) {
- POP2 r3, tmp1
+ POP r3, tmp1
DISPATCH_START \seq_len
ldr r2, [locals, -r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry30:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -3054,13 +3294,11 @@
}
(iload,aload,fload)(bastore) {
- POP2 r3, tmp1
+ POP r3, tmp1
DISPATCH_START \seq_len
ldr r2, [locals, -r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry31:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -3073,13 +3311,11 @@
}
(iload,aload,fload)(castore,sastore) {
- POP2 r3, tmp1
+ POP r3, tmp1
DISPATCH_START \seq_len
ldr r2, [locals, -r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry32:
ldr lr, [tmp1, #8] @ lr = limit
DISPATCH_NEXT
@@ -3091,7 +3327,7 @@
DISPATCH_FINISH
}
-# --- ECN: load; dataop -------------------------------------------------------
+@ --- ECN: load; dataop -------------------------------------------------------
(iload_0,iload_1,iload_2,iload_3)
(iadd)
@@ -3181,34 +3417,34 @@
(iload_0,iload_1,iload_2,iload_3)
(idiv)
{
- rsb r0, r0, #opc_iload_0
- ldr r0, [locals, r0, lsl #2]
- add jpc, jpc, #1
- POP r1
+ rsb tmp2, r0, #opc_iload_0
+ DISPATCH_START 2
+ ldr tmp2, [locals, tmp2, lsl #2]
+ POP tmp1
b int_div
}
(iload,aload,fload)(idiv) {
- add jpc, jpc, #2
- POP r1
- ldr r0, [locals, -r2, lsl #2]
+ DISPATCH_START 3
+ POP tmp1
+ ldr tmp2, [locals, -r2, lsl #2]
b int_div
}
(iload_0,iload_1,iload_2,iload_3)
(irem)
{
- rsb r0, r0, #opc_iload_0
- ldr r0, [locals, r0, lsl #2]
- add jpc, jpc, #1
- POP r1
+ rsb tmp2, r0, #opc_iload_0
+ DISPATCH_START 2
+ ldr tmp2, [locals, tmp2, lsl #2]
+ POP tmp1
b int_rem
}
(iload,aload,fload)(irem) {
- ldr r0, [locals, -r2, lsl #2]
- add jpc, jpc, #2
- POP r1
+ DISPATCH_START 3
+ POP tmp1
+ ldr tmp2, [locals, -r2, lsl #2]
b int_rem
}
@@ -3422,7 +3658,9 @@
DISPATCH_FINISH
}
-# --- ECN: load; branch -------------------------------------------------------
+#ifdef NOTICE_SAFEPOINTS
+
+@ --- ECN: load; branch -------------------------------------------------------
(iload_0,iload_1,iload_2,iload_3)
(ifeq,ifnull)
@@ -3808,7 +4046,7 @@
DISPATCH_BYTECODE
}
-# --- ECN: load; return/invoke -------------------------------------------------
+@ --- ECN: load; return/invoke -------------------------------------------------
(iload_0,iload_1,iload_2,iload_3)
(ireturn,areturn,freturn)
@@ -3827,14 +4065,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -3843,10 +4085,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -3871,14 +4112,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -3887,10 +4132,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -3900,6 +4144,8 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(iload_0,iload_1,iload_2,iload_3)
(invokeresolved)
{
@@ -4030,6 +4276,7 @@
ldrb r1, [jpc, #2]
PUSH r0
b do_invokestaticresolved
+
}
(iload_0,iload_1,iload_2,iload_3)
@@ -4038,6 +4285,8 @@
add jpc, jpc, #1
rsb r0, r0, #opc_iload_0
ldr r0, [locals, r0, lsl #2]
+ ldrb r2, [jpc, #1]
+ ldrb r1, [jpc, #2]
PUSH r0
b do_invokeinterface
}
@@ -4048,6 +4297,8 @@
add jpc, jpc, #1
rsb r0, r0, #opc_aload_0
ldr r0, [locals, r0, lsl #2]
+ ldrb r2, [jpc, #1]
+ ldrb r1, [jpc, #2]
PUSH r0
b do_invokeinterface
}
@@ -4055,6 +4306,8 @@
(iload,aload,fload)(invokeinterface) {
ldr r0, [locals, -r2, lsl #2]
add jpc, jpc, #2
+ ldrb r2, [jpc, #1]
+ ldrb r1, [jpc, #2]
PUSH r0
b do_invokeinterface
}
@@ -4067,7 +4320,7 @@
DISPATCH_BYTECODE
}
-# 13 cycles
+@ 13 cycles
(iload,aload,fload)(igetfield) {
ldrb ip, [jpc, #4]
rsb tmp1, r2, #0
@@ -4077,12 +4330,10 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, r3, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
DISPATCH_NEXT
- ldr tmp2, [tmp2, #8]
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry88:
ldr tmp2, [tmp1, tmp2]
@@ -4091,7 +4342,7 @@
DISPATCH_FINISH
}
-# --- ECN: iconst; store -------------------------------------------------
+@ --- ECN: iconst; store -------------------------------------------------
(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)
(istore_0,istore_1,istore_2,istore_3)
@@ -4111,7 +4362,7 @@
DISPATCH_BYTECODE
}
-# --- ECN: iconst; dataop -------------------------------------------------
+@ --- ECN: iconst; dataop -------------------------------------------------
(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(iadd) {
sub tmp1, r0, #opc_iconst_0
@@ -4168,7 +4419,7 @@
b 6f
3:
cmp lr, #(opc_iconst_0-opc_iconst_2)
- beq .iconst_div_rem_0
+ beq div_zero_jpc_1
rsbcc tmp1, tmp1, #0 @ Divide by -1 or 1
b 6f
@ divide by 4
@@ -4197,7 +4448,9 @@
DISPATCH_FINISH
}
-# --- ECN: iconst; branch -------------------------------------------------
+@ --- ECN: iconst; branch -------------------------------------------------
+
+#ifdef NOTICE_SAFEPOINTS
(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpeq) {
POP r3
@@ -4303,14 +4556,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -4319,10 +4576,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -4332,6 +4588,8 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokeresolved) {
add jpc, jpc, #1
sub r0, r0, #opc_iconst_0
@@ -4368,16 +4626,14 @@
b do_invokespecialresolved
}
-## --- Bytecode sequences iaload; xxx -----------------------------------------------
+@# --- Bytecode sequences iaload; xxx -----------------------------------------------
(iaload,faload,aaload)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) {
sub r2, r1, #opc_iconst_0
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry38:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4386,18 +4642,16 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(iaload,faload,aaload)(bipush) {
ldrsb r2, [jpc, #2]
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_3
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_3
.abortentry39:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4406,20 +4660,18 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(iaload,faload,aaload)(sipush) {
ldrsb r2, [jpc, #2]
ldrb tmp1, [jpc, #3]
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
orr r2, tmp1, r2, lsl #8
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_4
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_4
.abortentry40:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4428,19 +4680,17 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(iaload,faload,aaload)(iload,fload,aload) {
ldrb r2, [jpc, #2]
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
ldr r2, [locals, -r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_3
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_3
.abortentry41:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4449,7 +4699,7 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
@@ -4457,13 +4707,11 @@
(iload_0,iload_1,iload_2,iload_3)
{
rsb r2, r1, #opc_iload_0
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry42:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4472,7 +4720,7 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
@@ -4480,13 +4728,11 @@
(aload_0,aload_1,aload_2,aload_3)
{
rsb r2, r1, #opc_aload_0
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
ldr r2, [locals, r2, lsl #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry42_1:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4495,17 +4741,15 @@
add lr, lr, r3, lsl #2
ldr r3, [lr, #12]
DISPATCH_NEXT
- PUSH2 r2, r3
+ PUSH r2, r3
DISPATCH_FINISH
}
(iaload,faload,aaload)(iaload,faload,aaload)
{
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry43:
ldr tmp1, [r3, #8] @ tmp1 = length
DISPATCH_START \seq_len
@@ -4514,10 +4758,8 @@
add r3, r3, r2, lsl #2
POP lr @ r2 = index, lr = arrayref
ldr r2, [r3, #12]
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry44:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4532,12 +4774,10 @@
(iaload,faload,aaload)(astore,istore,fstore) {
ldrb r2, [jpc, #2]
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_3
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_3
.abortentry45:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4553,12 +4793,10 @@
(iaload,faload,aaload)
(istore_0,istore_1,istore_2,istore_3) {
rsb r2, r1, #opc_istore_0
- POP2 r3, lr @ r3 = index, lr = arrayref
+ POP r3, lr @ r3 = index, lr = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry46:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4572,11 +4810,9 @@
}
(iaload,faload,aaload)(iastore,fastore) {
- POP2 r3, lr @ r3 = index, lr = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r3, lr @ r3 = index, lr = arrayref
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry47:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_START \seq_len
@@ -4585,11 +4821,9 @@
add lr, lr, r3, lsl #2
ldr tmp1, [lr, #12]
- POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry48:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -4602,11 +4836,9 @@
}
(iaload,faload,aaload)(bastore) {
- POP2 r3, lr @ r3 = index, lr = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r3, lr @ r3 = index, lr = arrayref
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry49:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_START \seq_len
@@ -4615,11 +4847,9 @@
add lr, lr, r3, lsl #2
ldr tmp1, [lr, #12]
- POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry50:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -4632,11 +4862,9 @@
}
(iaload,faload,aaload)(castore,sastore) {
- POP2 r3, lr @ r3 = index, lr = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r3, lr @ r3 = index, lr = arrayref
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry51:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_START \seq_len
@@ -4645,11 +4873,9 @@
add lr, lr, r3, lsl #2
ldr tmp1, [lr, #12]
- POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry52:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -4662,12 +4888,10 @@
}
(iaload,faload,aaload)(iand) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry58:
ldr tmp1, [r3, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4683,12 +4907,10 @@
}
(iaload,faload,aaload)(ior) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry59:
ldr tmp1, [r3, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4704,12 +4926,10 @@
}
(iaload,faload,aaload)(ixor) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
+ POP r2, r3 @ r2 = index, r3 = arrayref
DISPATCH_START \seq_len
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_2
-#endif
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_2
.abortentry60:
ldr tmp1, [r3, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -4724,12 +4944,12 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(iaload,faload,aaload)(ifeq,ifnull) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry61:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4750,11 +4970,9 @@
}
(iaload,faload,aaload)(ifne,ifnonnull) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry62:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4775,11 +4993,9 @@
}
(iaload,faload,aaload)(iflt) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry63:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4800,11 +5016,9 @@
}
(iaload,faload,aaload)(ifge) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry64:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4825,11 +5039,9 @@
}
(iaload,faload,aaload)(ifgt) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry65:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4850,11 +5062,9 @@
}
(iaload,faload,aaload)(ifle) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry66:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4875,11 +5085,9 @@
}
(iaload,faload,aaload)(if_icmpeq,if_acmpeq) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry67:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4901,11 +5109,9 @@
}
(iaload,faload,aaload)(if_icmpne,if_acmpne) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry68:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4927,11 +5133,9 @@
}
(iaload,faload,aaload)(if_icmplt) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry69:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4953,11 +5157,9 @@
}
(iaload,faload,aaload)(if_icmpge) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry70:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -4979,11 +5181,9 @@
}
(iaload,faload,aaload)(if_icmpgt) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry71:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -5005,11 +5205,9 @@
}
(iaload,faload,aaload)(if_icmple) {
- POP2 r2, r3 @ r2 = index, r3 = arrayref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_0
-#endif
+ POP r2, r3 @ r2 = index, r3 = arrayref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_0
.abortentry72:
ldr r1, [r3, #8] @ r1 = length
cmp r2, r1
@@ -5030,12 +5228,14 @@
DISPATCH_BYTECODE
}
-# ---- iadd; xxx ------------------------------------------------------------
+#endif // NOTICE_SAFEPOINTS
+
+@ ---- iadd; xxx ------------------------------------------------------------
(iadd)(iload,fload,aload) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
rsb r3, r3, #0
DISPATCH_NEXT
@@ -5043,7 +5243,7 @@
DISPATCH_NEXT
add tmp2, tmp1, tmp2
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -5052,25 +5252,23 @@
{
DISPATCH_START \seq_len
rsb r3, r1, #opc_iload_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
add tmp2, tmp1, tmp2
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
(iadd)(iaload,aaload,faload) {
- POP3 r2, r3, lr @ lr = ref
+ POP r2, r3, lr @ lr = ref
DISPATCH_START \seq_len
add r2, r3, r2 @ r2 = index
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry73:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -5097,14 +5295,12 @@
}
(iadd)(iastore,fastore) {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
add tmp1, r3, r2 @ tmp1 = value
- POP2 r2, r3 @ r2, index, r3 = ref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ r2, index, r3 = ref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry106:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -5118,7 +5314,7 @@
(iadd)(iadd) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
add tmp2, r3, r2
DISPATCH_NEXT
@@ -5131,7 +5327,7 @@
(iadd)(isub) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
add tmp2, r3, r2
DISPATCH_NEXT
@@ -5142,8 +5338,10 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(iadd)(ifeq,ifnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5158,7 +5356,7 @@
}
(iadd)(ifne,ifnonnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5173,7 +5371,7 @@
}
(iadd)(iflt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5188,7 +5386,7 @@
}
(iadd)(ifge) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5203,7 +5401,7 @@
}
(iadd)(ifgt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5218,7 +5416,7 @@
}
(iadd)(ifle) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r3, r3, r2
@@ -5233,7 +5431,7 @@
}
(iadd)(if_icmpeq,if_acmpeq) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5248,7 +5446,7 @@
}
(iadd)(if_icmpne,if_acmpne) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5263,7 +5461,7 @@
}
(iadd)(if_icmplt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5278,7 +5476,7 @@
}
(iadd)(if_icmpge) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5293,7 +5491,7 @@
}
(iadd)(if_icmpgt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5308,7 +5506,7 @@
}
(iadd)(if_icmple) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
add r2, r3, r2
@@ -5328,7 +5526,7 @@
add jpc, jpc, #1
orr ip, ip, r1, lsl #8
DISPATCH_START_REG ip
- POP2 r2, r3
+ POP r2, r3
add r2, r3, r2
DISPATCH_NEXT
PUSH r2
@@ -5336,7 +5534,7 @@
}
(iadd)(ireturn) {
- POP2 r2, r3
+ POP r2, r3
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end
add r1, r3, r2
@@ -5350,14 +5548,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -5366,10 +5568,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -5379,8 +5580,10 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(iadd)(iinc) {
- POP2 tmp1, lr
+ POP tmp1, lr
DISPATCH_START \seq_len
add tmp1, lr, tmp1
ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc
@@ -5393,12 +5596,12 @@
str tmp1, [locals, -r3, lsl #2]
DISPATCH_FINISH
}
-# ---- sub; xxx ------------------------------------------------------------
+@ ---- sub; xxx ------------------------------------------------------------
(isub)(iload,fload,aload) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
rsb r3, r3, #0
DISPATCH_NEXT
@@ -5406,7 +5609,7 @@
DISPATCH_NEXT
sub tmp2, tmp1, tmp2
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -5415,25 +5618,23 @@
{
DISPATCH_START \seq_len
rsb r3, r1, #opc_iload_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
sub tmp2, tmp1, tmp2
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
(isub)(iaload,aaload,faload) {
- POP3 r2, r3, lr @ lr = ref
+ POP r2, r3, lr @ lr = ref
DISPATCH_START \seq_len
sub r2, r3, r2 @ r2 = index
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry74:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -5460,14 +5661,12 @@
}
(isub)(iastore,fastore) {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
sub tmp1, r3, r2 @ tmp1 = value
- POP2 r2, r3 @ r2, index, r3 = ref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ r2, index, r3 = ref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry105:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -5481,7 +5680,7 @@
(isub)(iadd) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
sub tmp2, r3, r2
DISPATCH_NEXT
@@ -5494,7 +5693,7 @@
(isub)(isub) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
sub tmp2, r3, r2
DISPATCH_NEXT
@@ -5505,8 +5704,10 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(isub)(ifeq,ifnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5521,7 +5722,7 @@
}
(isub)(ifne,ifnonnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5536,7 +5737,7 @@
}
(isub)(iflt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5551,7 +5752,7 @@
}
(isub)(ifge) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5566,7 +5767,7 @@
}
(isub)(ifgt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5581,7 +5782,7 @@
}
(isub)(ifle) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r3, r3, r2
@@ -5596,7 +5797,7 @@
}
(isub)(if_icmpeq,if_acmpeq) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5611,7 +5812,7 @@
}
(isub)(if_icmpne,if_acmpne) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5626,7 +5827,7 @@
}
(isub)(if_icmplt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5641,7 +5842,7 @@
}
(isub)(if_icmpge) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5656,7 +5857,7 @@
}
(isub)(if_icmpgt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5671,7 +5872,7 @@
}
(isub)(if_icmple) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
sub r2, r3, r2
@@ -5691,7 +5892,7 @@
add jpc, jpc, #1
orr ip, ip, r1, lsl #8
DISPATCH_START_REG ip
- POP2 r2, r3
+ POP r2, r3
sub r2, r3, r2
DISPATCH_NEXT
PUSH r2
@@ -5699,7 +5900,7 @@
}
(isub)(ireturn) {
- POP2 r2, r3
+ POP r2, r3
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end
sub r1, r3, r2
@@ -5713,14 +5914,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -5729,10 +5934,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -5742,8 +5946,10 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(isub)(iinc) {
- POP2 tmp1, lr
+ POP tmp1, lr
DISPATCH_START \seq_len
sub tmp1, lr, tmp1
ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc
@@ -5756,12 +5962,12 @@
str tmp1, [locals, -r3, lsl #2]
DISPATCH_FINISH
}
-# ---- iand; xxx ------------------------------------------------------------
+@ ---- iand; xxx ------------------------------------------------------------
(iand)(iload,fload,aload) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
rsb r3, r3, #0
DISPATCH_NEXT
@@ -5769,7 +5975,7 @@
DISPATCH_NEXT
and tmp2, tmp1, tmp2
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -5778,25 +5984,23 @@
{
DISPATCH_START \seq_len
rsb r3, r1, #opc_iload_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
and tmp2, tmp1, tmp2
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
(iand)(iaload,aaload,faload) {
- POP3 r2, r3, lr @ lr = ref
+ POP r2, r3, lr @ lr = ref
DISPATCH_START \seq_len
and r2, r3, r2 @ r2 = index
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry75:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -5823,14 +6027,12 @@
}
(iand)(iastore,fastore) {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
and tmp1, r3, r2 @ tmp1 = value
- POP2 r2, r3 @ r2, index, r3 = ref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ r2, index, r3 = ref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry107:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -5844,7 +6046,7 @@
(iand)(iadd) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
and tmp2, r3, r2
DISPATCH_NEXT
@@ -5857,7 +6059,7 @@
(iand)(isub) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
and tmp2, r3, r2
DISPATCH_NEXT
@@ -5868,8 +6070,10 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(iand)(ifeq,ifnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5884,7 +6088,7 @@
}
(iand)(ifne,ifnonnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5899,7 +6103,7 @@
}
(iand)(iflt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5914,7 +6118,7 @@
}
(iand)(ifge) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5929,7 +6133,7 @@
}
(iand)(ifgt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5944,7 +6148,7 @@
}
(iand)(ifle) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r3, r3, r2
@@ -5959,7 +6163,7 @@
}
(iand)(if_icmpeq,if_acmpeq) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -5974,7 +6178,7 @@
}
(iand)(if_icmpne,if_acmpne) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -5989,7 +6193,7 @@
}
(iand)(if_icmplt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -6004,7 +6208,7 @@
}
(iand)(if_icmpge) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -6019,7 +6223,7 @@
}
(iand)(if_icmpgt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -6034,7 +6238,7 @@
}
(iand)(if_icmple) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
and r2, r3, r2
@@ -6054,7 +6258,7 @@
add jpc, jpc, #1
orr ip, ip, r1, lsl #8
DISPATCH_START_REG ip
- POP2 r2, r3
+ POP r2, r3
and r2, r3, r2
DISPATCH_NEXT
PUSH r2
@@ -6062,7 +6266,7 @@
}
(iand)(ireturn) {
- POP2 r2, r3
+ POP r2, r3
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end
and r1, r3, r2
@@ -6076,14 +6280,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -6092,10 +6300,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -6105,8 +6312,10 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(iand)(iinc) {
- POP2 tmp1, lr
+ POP tmp1, lr
DISPATCH_START \seq_len
and tmp1, lr, tmp1
ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc
@@ -6119,12 +6328,12 @@
str tmp1, [locals, -r3, lsl #2]
DISPATCH_FINISH
}
-# ---- ior; xxx ------------------------------------------------------------
+@ ---- ior; xxx ------------------------------------------------------------
(ior)(iload,fload,aload) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
rsb r3, r3, #0
DISPATCH_NEXT
@@ -6132,7 +6341,7 @@
DISPATCH_NEXT
orr tmp2, tmp1, tmp2
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -6141,25 +6350,23 @@
{
DISPATCH_START \seq_len
rsb r3, r1, #opc_iload_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
orr tmp2, tmp1, tmp2
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
(ior)(iaload,aaload,faload) {
- POP3 r2, r3, lr @ lr = ref
+ POP r2, r3, lr @ lr = ref
DISPATCH_START \seq_len
orr r2, r3, r2 @ r2 = index
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry76:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -6186,14 +6393,12 @@
}
(ior)(iastore,fastore) {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
orr tmp1, r3, r2 @ tmp1 = value
- POP2 r2, r3 @ r2, index, r3 = ref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ r2, index, r3 = ref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry108:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -6207,7 +6412,7 @@
(ior)(iadd) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
orr tmp2, r3, r2
DISPATCH_NEXT
@@ -6220,7 +6425,7 @@
(ior)(isub) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
orr tmp2, r3, r2
DISPATCH_NEXT
@@ -6231,8 +6436,10 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(ior)(ifeq,ifnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6247,7 +6454,7 @@
}
(ior)(ifne,ifnonnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6262,7 +6469,7 @@
}
(ior)(iflt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6277,7 +6484,7 @@
}
(ior)(ifge) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6292,7 +6499,7 @@
}
(ior)(ifgt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6307,7 +6514,7 @@
}
(ior)(ifle) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r3, r3, r2
@@ -6322,7 +6529,7 @@
}
(ior)(if_icmpeq,if_acmpeq) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6337,7 +6544,7 @@
}
(ior)(if_icmpne,if_acmpne) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6352,7 +6559,7 @@
}
(ior)(if_icmplt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6367,7 +6574,7 @@
}
(ior)(if_icmpge) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6382,7 +6589,7 @@
}
(ior)(if_icmpgt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6397,7 +6604,7 @@
}
(ior)(if_icmple) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
orr r2, r3, r2
@@ -6417,7 +6624,7 @@
add jpc, jpc, #1
orr ip, ip, r1, lsl #8
DISPATCH_START_REG ip
- POP2 r2, r3
+ POP r2, r3
orr r2, r3, r2
DISPATCH_NEXT
PUSH r2
@@ -6425,7 +6632,7 @@
}
(ior)(ireturn) {
- POP2 r2, r3
+ POP r2, r3
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end
orr r1, r3, r2
@@ -6439,14 +6646,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -6455,10 +6666,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -6468,8 +6678,10 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(ior)(iinc) {
- POP2 tmp1, lr
+ POP tmp1, lr
DISPATCH_START \seq_len
orr tmp1, lr, tmp1
ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc
@@ -6483,12 +6695,12 @@
DISPATCH_FINISH
}
-# ---- ixor; xxx ------------------------------------------------------------
+@ ---- ixor; xxx ------------------------------------------------------------
(ixor)(iload,fload,aload) {
ldrb r3, [jpc, #2]
DISPATCH_START \seq_len
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
rsb r3, r3, #0
DISPATCH_NEXT
@@ -6496,7 +6708,7 @@
DISPATCH_NEXT
eor tmp2, tmp1, tmp2
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -6505,25 +6717,23 @@
{
DISPATCH_START \seq_len
rsb r3, r1, #opc_iload_0
- POP2 tmp2, tmp1
+ POP tmp2, tmp1
DISPATCH_NEXT
ldr r3, [locals, r3, lsl #2]
eor tmp2, tmp1, tmp2
DISPATCH_NEXT
DISPATCH_NEXT
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
(ixor)(iaload,aaload,faload) {
- POP3 r2, r3, lr @ lr = ref
+ POP r2, r3, lr @ lr = ref
DISPATCH_START \seq_len
eor r2, r3, r2 @ r2 = index
-#ifndef HW_NULL_PTR_CHECK
- cmp lr, #0
- beq null_ptr_exception_jpc_1
-#endif
+ SW_NPC cmp lr, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry77:
ldr tmp1, [lr, #8] @ tmp1 = length
DISPATCH_NEXT
@@ -6550,14 +6760,12 @@
}
(ixor)(iastore,fastore) {
- POP2 r2, r3
+ POP r2, r3
DISPATCH_START \seq_len
eor tmp1, r3, r2 @ tmp1 = value
- POP2 r2, r3 @ r2, index, r3 = ref
-#ifndef HW_NULL_PTR_CHECK
- cmp r3, #0
- beq null_ptr_exception_jpc_1
-#endif
+ POP r2, r3 @ r2, index, r3 = ref
+ SW_NPC cmp r3, #0
+ SW_NPC beq null_ptr_exception_jpc_1
.abortentry109:
ldr lr, [r3, #8] @ lr = limit
DISPATCH_NEXT
@@ -6571,7 +6779,7 @@
(ixor)(iadd) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
eor tmp2, r3, r2
DISPATCH_NEXT
@@ -6584,7 +6792,7 @@
(ixor)(isub) {
DISPATCH_START \seq_len
- POP3 r2, r3, tmp1
+ POP r2, r3, tmp1
DISPATCH_NEXT
eor tmp2, r3, r2
DISPATCH_NEXT
@@ -6595,8 +6803,10 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(ixor)(ifeq,ifnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6611,7 +6821,7 @@
}
(ixor)(ifne,ifnonnull) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6626,7 +6836,7 @@
}
(ixor)(iflt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6641,7 +6851,7 @@
}
(ixor)(ifge) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6656,7 +6866,7 @@
}
(ixor)(ifgt) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6671,7 +6881,7 @@
}
(ixor)(ifle) {
- POP2 r2, r3
+ POP r2, r3
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r3, r3, r2
@@ -6686,7 +6896,7 @@
}
(ixor)(if_icmpeq,if_acmpeq) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6701,7 +6911,7 @@
}
(ixor)(if_icmpne,if_acmpne) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6716,7 +6926,7 @@
}
(ixor)(if_icmplt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6731,7 +6941,7 @@
}
(ixor)(if_icmpge) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6746,7 +6956,7 @@
}
(ixor)(if_icmpgt) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6761,7 +6971,7 @@
}
(ixor)(if_icmple) {
- POP3 r2, r3, lr
+ POP r2, r3, lr
ldrsb r1, [jpc, #2]
ldrb ip, [jpc, #3]
eor r2, r3, r2
@@ -6781,7 +6991,7 @@
add jpc, jpc, #1
orr ip, ip, r1, lsl #8
DISPATCH_START_REG ip
- POP2 r2, r3
+ POP r2, r3
eor r2, r3, r2
DISPATCH_NEXT
PUSH r2
@@ -6789,7 +6999,7 @@
}
(ixor)(ireturn) {
- POP2 r2, r3
+ POP r2, r3
ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base
ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end
eor r1, r3, r2
@@ -6803,14 +7013,18 @@
ldr r0, [istate, #ISTATE_METHOD]
ldr r3, [stack, #0]
ldrh r0, [r0, #40]
- ldr istate, [istate, #ISTATE_SAVED_ISTATE]
+ ldr ip, [istate, #ISTATE_ADVANCE_PC]
+ ldr istate, [istate, #ISTATE_NEXT_FRAME]
str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
str r1, [stack, r0, lsl #2]!
- cmp istate, #0
+ cmp ip, #0
beq normal_return
- ldr jpc, [istate, #ISTATE_BCP]
+
+ sub istate, istate, #ISTATE_NEXT_FRAME
+
+ CACHE_JPC
ldr r2, [istate, #ISTATE_STACK_LIMIT]
- DISPATCH_START 3 @ ldrb r0, [jpc, #3]!
+ DISPATCH_START_REG ip
sub stack, stack, #4
ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME]
DISPATCH_NEXT @ ldrb r1, [jpc, #2]
@@ -6819,10 +7033,9 @@
str r2, [tmp_xxx, #THREAD_JAVA_SP]
DISPATCH_NEXT @ ldrb r2, [jpc, #1]
str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP]
- ldr constpool, [istate, #ISTATE_CONSTANTS]
- ldr locals, [istate, #ISTATE_LOCALS]
+ CACHE_CP
+ CACHE_LOCALS
DISPATCH_NEXT @ ands lr, ip, lr
- add constpool, constpool, #CONST_POOL_OFFSET
DISPATCH_FINISH
1:
PUSH r1
@@ -6832,8 +7045,10 @@
b 2b
}
+#endif // NOTICE_SAFEPOINTS
+
(ixor)(iinc) {
- POP2 tmp1, lr
+ POP tmp1, lr
DISPATCH_START \seq_len
eor tmp1, lr, tmp1
ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc
@@ -6847,7 +7062,7 @@
DISPATCH_FINISH
}
-# --- iinc; xxx --------------------------------------------------------------
+@ --- iinc; xxx --------------------------------------------------------------
(iinc)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) {
ldrsb tmp1, [jpc, #2]
@@ -6902,9 +7117,9 @@
DISPATCH_FINISH
}
-################################################################################
-## ECN: Optimised bytecode triples
-################################################################################
+@###############################################################################
+@# ECN: Optimised bytecode triples
+@###############################################################################
(iaccess_0,iaccess_1,iaccess_2,iaccess_3)
(iload,fload,aload) {
@@ -6917,19 +7132,17 @@
add tmp2, r3, lsl #4
ldrb r3, [jpc, #-1]
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_5
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_5
DISPATCH_NEXT
- ldr tmp2, [tmp2, #8]
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
rsb r3, r3, #0
.abortentry89:
ldr tmp2, [tmp1, tmp2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -6944,18 +7157,16 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_4
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_4
DISPATCH_NEXT
- ldr tmp2, [tmp2, #8]
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
.abortentry90:
ldr tmp2, [tmp1, tmp2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- PUSH2 r3, tmp2
+ PUSH r3, tmp2
DISPATCH_FINISH
}
@@ -6969,12 +7180,10 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
DISPATCH_NEXT
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_4
-#endif
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_4
DISPATCH_NEXT
- ldr tmp2, [tmp2, #8]
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
DISPATCH_NEXT
POP r3
.abortentry91:
@@ -6985,6 +7194,8 @@
DISPATCH_FINISH
}
+#ifdef NOTICE_SAFEPOINTS
+
(iaccess_0,iaccess_1,iaccess_2,iaccess_3)
(ifeq,ifnull) {
ldrb r2, [jpc, #3]
@@ -6996,11 +7207,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry92:
ldr tmp2, [tmp1, tmp2]
@@ -7023,11 +7232,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry93:
ldr tmp2, [tmp1, tmp2]
@@ -7050,11 +7257,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry94:
ldr tmp2, [tmp1, tmp2]
@@ -7077,11 +7282,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry95:
ldr tmp2, [tmp1, tmp2]
@@ -7104,11 +7307,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry96:
ldr tmp2, [tmp1, tmp2]
@@ -7131,11 +7332,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
orr ip, ip, r0, lsl #8
.abortentry97:
ldr tmp2, [tmp1, tmp2]
@@ -7158,11 +7357,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry98:
@@ -7186,11 +7383,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry99:
@@ -7214,11 +7409,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry100:
@@ -7242,11 +7435,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry101:
@@ -7270,11 +7461,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry102:
@@ -7298,11 +7487,9 @@
ldr tmp1, [locals, tmp1, lsl #2]
add tmp2, ip, lsl #4
ldrb ip, [jpc, #2]
-#ifndef HW_NULL_PTR_CHECK
- cmp tmp1, #0
- beq null_ptr_exception_jpc_3
-#endif
- ldr tmp2, [tmp2, #8]
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception_jpc_3
+ ldr tmp2, [tmp2, #CP_OFFSET+8]
POP r3
orr ip, ip, r0, lsl #8
.abortentry103:
@@ -7315,6 +7502,8 @@
DISPATCH_BYTECODE
}
+#endif // NOTICE_SAFEPOINTS
+
(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
(iadd)
{
@@ -7400,7 +7589,57 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(idiv)
+{
+ rsb tmp1, r0, #opc_iload_0_iconst_N
+ subs lr, r2, #opc_iconst_2
+ DISPATCH_START \seq_len
+ ldr tmp1, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ beq 5f
+ bcc 3f
+ cmp lr, #(opc_iconst_4-opc_iconst_2)
+ beq 4f
+ bcc 2f
+@ divide by 5
+1:
+ mvn lr, #0x198 @ Form 0x66666667 in lr
+ bic lr, lr, #0x9800
+ add lr, lr, lr, lsl #16
+ smull a3, a4, tmp1, lr
+ mov a3, tmp1, asr #31
+ rsb tmp1, a3, a4, asr #1
+ b 6f
+@ divide by 3
+2:
+ mvn lr, #0xa9 @ Form 0x55555556 in lr
+ bic lr, lr, #0xaa00
+ add lr, lr, lr, lsl #16
+ smull a3, a4, tmp1, lr
+ sub tmp1, a4, tmp1, asr #31
+ b 6f
+3:
+ cmp lr, #(opc_iconst_0-opc_iconst_2)
+ beq div_zero_jpc_1
+ rsbcc tmp1, tmp1, #0 @ Divide by -1 or 1
+ b 6f
+@ divide by 4
+4: movs a4, tmp1
+ addmi a4, a4, #3
+ mov tmp1, a4, asr #2
+ b 6f
+@ divide by 2
+5:
+ add tmp1, tmp1, tmp1, lsr #31
+ mov tmp1, tmp1, asr #1
+6:
+ DISPATCH_NEXT
+ PUSH tmp1
+ DISPATCH_FINISH
+}
+
+@ r2 = [jpc, #1]
(iload_iconst_N)
(iadd)
{
@@ -7418,7 +7657,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload_iconst_N)
(isub)
{
@@ -7436,7 +7675,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload_iconst_N)
(iand)
{
@@ -7454,7 +7693,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload_iconst_N)
(ior)
{
@@ -7472,7 +7711,7 @@
DISPATCH_FINISH
}
-# r2 = [jpc, #1]
+@ r2 = [jpc, #1]
(iload_iconst_N)
(ixor)
{
@@ -7490,343 +7729,416 @@
DISPATCH_FINISH
}
-# Former quads
-
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(iadd_u4store)
+(iload_iconst_N)
+(idiv)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ ldrb lr, [jpc, #2]
+ rsb tmp1, r2, #0
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
- ldr r3, [locals, r3, lsl #2]
- DISPATCH_NEXT
- add r3, r3, r2
+ ldr tmp1, [locals, tmp1, lsl #2]
+ subs lr, lr, #opc_iconst_2
DISPATCH_NEXT
- rsb tmp1, tmp1, #0
+ beq 5f
+ bcc 3f
+ cmp lr, #(opc_iconst_4-opc_iconst_2)
+ beq 4f
+ bcc 2f
+@ divide by 5
+1:
+ mvn lr, #0x198 @ Form 0x66666667 in lr
+ bic lr, lr, #0x9800
+ add lr, lr, lr, lsl #16
+ smull a3, a4, tmp1, lr
+ mov a3, tmp1, asr #31
+ rsb tmp1, a3, a4, asr #1
+ b 6f
+@ divide by 3
+2:
+ mvn lr, #0xa9 @ Form 0x55555556 in lr
+ bic lr, lr, #0xaa00
+ add lr, lr, lr, lsl #16
+ smull a3, a4, tmp1, lr
+ sub tmp1, a4, tmp1, asr #31
+ b 6f
+3:
+ cmp lr, #(opc_iconst_0-opc_iconst_2)
+ beq div_zero_jpc_1
+ rsbcc tmp1, tmp1, #0 @ Divide by -1 or 1
+ b 6f
+@ divide by 4
+4: movs a4, tmp1
+ addmi a4, a4, #3
+ mov tmp1, a4, asr #2
+ b 6f
+@ divide by 2
+5:
+ add tmp1, tmp1, tmp1, lsr #31
+ mov tmp1, tmp1, asr #1
+6:
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ PUSH tmp1
DISPATCH_FINISH
}
-(iload_iconst_N)
-(iadd_u4store)
+(iload_iload)
+(iadd)
{
- ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #5]
+ ldrb r3, [jpc, #3]
rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ add r3, r2, r3
DISPATCH_NEXT
- add r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(iadd_istore_N)
+(iload_iload_N)
+(iadd)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ rsb r3, r3, #opc_iload_0
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- add r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #opc_istore_0
+ add r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(iadd_istore_N)
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iadd)
{
ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #4]
- rsb r2, r2, #0
+ rsb r2, r0, #opc_iload_0_iload
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #opc_istore_0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ add r3, r2, r3
DISPATCH_NEXT
- add r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(isub_u4store)
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iadd)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- sub r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #0
+ add r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(isub_u4store)
+(iload_iload)
+(isub)
{
- ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #5]
+ ldrb r3, [jpc, #3]
rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ sub r3, r2, r3
DISPATCH_NEXT
- sub r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(isub_istore_N)
+(iload_iload_N)
+(isub)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ rsb r3, r3, #opc_iload_0
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- sub r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #opc_istore_0
+ sub r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(isub_istore_N)
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(isub)
{
ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #4]
- rsb r2, r2, #0
+ rsb r2, r0, #opc_iload_0_iload
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #opc_istore_0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ sub r3, r2, r3
DISPATCH_NEXT
- sub r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(iand_u4store)
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(isub)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- and r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #0
+ sub r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(iand_u4store)
+(iload_iload)
+(iand)
{
- ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #5]
+ ldrb r3, [jpc, #3]
rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ and r3, r2, r3
DISPATCH_NEXT
- and r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(iand_istore_N)
+(iload_iload_N)
+(iand)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ rsb r3, r3, #opc_iload_0
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- and r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #opc_istore_0
+ and r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(iand_istore_N)
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iand)
{
ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #4]
- rsb r2, r2, #0
+ rsb r2, r0, #opc_iload_0_iload
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #opc_istore_0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ and r3, r2, r3
DISPATCH_NEXT
- and r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(ior_u4store)
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iand)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- orr r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #0
+ and r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(ior_u4store)
+(iload_iload)
+(ior)
{
- ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #5]
+ ldrb r3, [jpc, #3]
rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ orr r3, r2, r3
DISPATCH_NEXT
- orr r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(ior_istore_N)
+(iload_iload_N)
+(ior)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ rsb r3, r3, #opc_iload_0
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- orr r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #opc_istore_0
+ orr r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(ior_istore_N)
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ior)
{
ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #4]
- rsb r2, r2, #0
+ rsb r2, r0, #opc_iload_0_iload
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #opc_istore_0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ orr r3, r2, r3
DISPATCH_NEXT
- orr r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
DISPATCH_FINISH
}
-(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(ixor_u4store)
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ior)
{
- rsb r3, r0, #opc_iload_0_iconst_N
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
DISPATCH_START \seq_len
- sub r2, r2, #opc_iconst_0
- DISPATCH_NEXT
- ldrb tmp1, [jpc, #-1]
+ ldr r2, [locals, r2, lsl #2]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- eor r3, r3, r2
DISPATCH_NEXT
- rsb tmp1, tmp1, #0
+ orr r3, r2, r3
DISPATCH_NEXT
- str r3, [locals, tmp1, lsl #2]
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
-(iload_iconst_N)
-(ixor_u4store)
+(iload_iload)
+(ixor)
{
- ldrb r3, [jpc, #2]
- ldrb lr, [jpc, #5]
+ ldrb r3, [jpc, #3]
rsb r2, r2, #0
DISPATCH_START \seq_len
- sub r3, r3, #opc_iconst_0
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- rsb tmp2, lr, #0
DISPATCH_NEXT
- ldr tmp1, [locals, r2, lsl #2]
+ eor r3, r2, r3
DISPATCH_NEXT
- eor r3, tmp1, r3
DISPATCH_NEXT
- str r3, [locals, tmp2, lsl #2]
+ PUSH r3
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(ixor)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, r2, r3
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ixor)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, r2, r3
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ixor)
+{
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, r2, r3
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ PUSH r3
DISPATCH_FINISH
}
+@ Former quads
+
(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
-(ixor_istore_N)
+(iadd_u4store)
{
rsb r3, r0, #opc_iload_0_iconst_N
DISPATCH_START \seq_len
@@ -7835,7 +8147,44 @@
ldrb tmp1, [jpc, #-1]
ldr r3, [locals, r3, lsl #2]
DISPATCH_NEXT
- eor r3, r3, r2
+ add r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(iadd_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(iadd_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ add r3, r3, r2
DISPATCH_NEXT
rsb tmp1, tmp1, #opc_istore_0
DISPATCH_NEXT
@@ -7844,7 +8193,7 @@
}
(iload_iconst_N)
-(ixor_istore_N)
+(iadd_istore_N)
{
ldrb r3, [jpc, #2]
ldrb lr, [jpc, #4]
@@ -7856,8 +8205,1783 @@
DISPATCH_NEXT
ldr tmp1, [locals, r2, lsl #2]
DISPATCH_NEXT
- eor r3, tmp1, r3
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(isub_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(isub_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(isub_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(isub_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(iand_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(iand_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(iand_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(iand_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, tmp1, r3
DISPATCH_NEXT
str r3, [locals, tmp2, lsl #2]
DISPATCH_FINISH
}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(ior_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(ior_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(ior_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(ior_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(ixor_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(ixor_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(ixor_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iconst_N
+ DISPATCH_START \seq_len
+ sub r2, r2, #opc_iconst_0
+ DISPATCH_NEXT
+ ldrb tmp1, [jpc, #-1]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iconst_N)
+(ixor_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ sub r3, r3, #opc_iconst_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ DISPATCH_NEXT
+ ldr tmp1, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmpeq,if_acmpeq)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmpeq,if_acmpeq)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmpne,if_acmpne)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bne 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmpne,if_acmpne)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bne 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmplt)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmplt)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmpge)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmpge)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmpgt)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmpgt)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N)
+(if_icmple)
+{
+ ldrb r3, [jpc, #1]
+ rsb r2, r0, #opc_iload_0_iconst_N
+ ldrsb r1, [jpc, #3]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iconst_N)
+(if_icmple)
+{
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ sub r3, r3, #opc_iconst_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload)
+(iadd_istore_N)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(iadd_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iadd_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #4]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ add r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iadd_istore_N)
+{
+ ldrb tmp1, [jpc, #3]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ add r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(isub_istore_N)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(isub_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(isub_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #4]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(isub_istore_N)
+{
+ ldrb tmp1, [jpc, #3]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(iand_istore_N)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ and r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(iand_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ and r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iand_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #4]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iand_istore_N)
+{
+ ldrb tmp1, [jpc, #3]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(ior_istore_N)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(ior_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ior_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #4]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ior_istore_N)
+{
+ ldrb tmp1, [jpc, #3]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(ixor_istore_N)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(ixor_istore_N)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #4]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #opc_istore_0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ixor_istore_N)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #4]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ixor_istore_N)
+{
+ ldrb tmp1, [jpc, #3]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #opc_istore_0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(iadd_u4store)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #6]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(iadd_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ add r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iadd_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #5]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ add r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iadd_u4store)
+{
+ ldrb tmp1, [jpc, #4]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ add r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(isub_u4store)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #6]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(isub_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ sub r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(isub_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #5]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(isub_u4store)
+{
+ ldrb tmp1, [jpc, #4]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ sub r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(iand_u4store)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #6]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ and r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(iand_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ and r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(iand_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #5]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(iand_u4store)
+{
+ ldrb tmp1, [jpc, #4]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ and r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(ior_u4store)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #6]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(ior_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ orr r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ior_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #5]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ior_u4store)
+{
+ ldrb tmp1, [jpc, #4]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ orr r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(ixor_u4store)
+{
+ ldrb r3, [jpc, #3]
+ ldrb lr, [jpc, #6]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload_N)
+(ixor_u4store)
+{
+ ldrb r3, [jpc, #2]
+ ldrb lr, [jpc, #5]
+ rsb r2, r2, #0
+ DISPATCH_START \seq_len
+ rsb r3, r3, #opc_iload_0
+ DISPATCH_NEXT
+ rsb tmp2, lr, #0
+ ldr tmp1, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ eor r3, tmp1, r3
+ DISPATCH_NEXT
+ str r3, [locals, tmp2, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(ixor_u4store)
+{
+ rsb r3, r0, #opc_iload_0_iload
+ ldrb r2, [jpc, #2]
+ ldrb tmp1, [jpc, #5]
+ DISPATCH_START \seq_len
+ rsb r2, r2, #0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(ixor_u4store)
+{
+ ldrb tmp1, [jpc, #4]
+ rsb r3, r0, #opc_iload_0_iload_N
+ DISPATCH_START \seq_len
+ rsb r2, r2, #opc_iload_0
+ DISPATCH_NEXT
+ ldr r3, [locals, r3, lsl #2]
+ ldr r2, [locals, r2, lsl #2]
+ DISPATCH_NEXT
+ eor r3, r3, r2
+ DISPATCH_NEXT
+ rsb tmp1, tmp1, #0
+ DISPATCH_NEXT
+ str r3, [locals, tmp1, lsl #2]
+ DISPATCH_FINISH
+}
+
+(iload_iload)
+(if_icmpeq,if_acmpeq) {
+ ldrb r3, [jpc, #3]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #5]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #6]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #4
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmpeq,if_acmpeq) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmpeq,if_acmpeq) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmpeq,if_acmpeq) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ beq 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmpne,if_acmpne) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bne 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmpne,if_acmpne) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bne 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmpne,if_acmpne) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bne 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload)
+(if_icmplt) {
+ ldrb r3, [jpc, #3]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #5]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #6]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #4
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmplt) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmplt) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmplt) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ blt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload)
+(if_icmpge) {
+ ldrb r3, [jpc, #3]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #5]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #6]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #4
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmpge) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmpge) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmpge) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bge 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload)
+(if_icmpgt) {
+ ldrb r3, [jpc, #3]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #5]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #6]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #4
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmpgt) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmpgt) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmpgt) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ bgt 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload)
+(if_icmple) {
+ ldrb r3, [jpc, #3]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #5]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #6]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #4
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_iload_N)
+(if_icmple) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r2, #0
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #opc_iload_0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload,iload_1_iload,iload_2_iload,iload_3_iload)
+(if_icmple) {
+ ldrb r3, [jpc, #2]
+ rsb r2, r0, #opc_iload_0_iload
+ ldrsb r1, [jpc, #4]
+ rsb r3, r3, #0
+ ldrb ip, [jpc, #5]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #3
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+(iload_0_iload_N,iload_1_iload_N,iload_2_iload_N,iload_3_iload_N)
+(if_icmple) {
+ rsb r3, r2, #opc_iload_0
+ rsb r2, r0, #opc_iload_0_iload_N
+ ldrsb r1, [jpc, #3]
+ ldrb ip, [jpc, #4]
+ ldr r2, [locals, r2, lsl #2]
+ ldr r3, [locals, r3, lsl #2]
+ add jpc, jpc, #2
+ cmp r2, r3
+ orr ip, ip, r1, lsl #8
+ ble 1f
+ mov ip, #3
+1:
+ ldrb r0, [jpc, ip]!
+ DISPATCH_BYTECODE
+}
+
+#ifdef HW_FP
+
+(dmac)(dastore) {
+ ldr tmp2, [stack, #28]
+ ldr tmp1, [stack, #32]
+ vldr d2, [stack, #20]
+ vldr d1, [stack, #12]
+ vldr d0, [stack, #4]
+ DISPATCH_START \seq_len
+ SW_NPC cmp tmp1, #0
+ SW_NPC beq null_ptr_exception
+.abortentry120:
+ ldr ip, [tmp1, #8]
+ cmp tmp2, ip
+ DISPATCH_NEXT
+ bcs array_bound_exception_jpc_1_tmp2
+ DISPATCH_NEXT
+ add tmp2, tmp1, tmp2, lsl #3
+ fmacd d2, d1, d0
+ vstr d2, [tmp2, #16]
+ DISPATCH_NEXT
+ DISPATCH_NEXT
+ add stack, stack, #32
+ DISPATCH_FINISH
+}
+
+#endif //HW_FP
+
+#endif // FAST_BYTECODES
More information about the distro-pkg-dev
mailing list