Mercurial > hg > release > icedtea6-1.6
changeset 1661:caf6aebb73ca
2009-08-20 Gary Benson <gbenson@redhat.com>
* ports/hotspot/src/cpu/zero/vm/bc.def: Renamed to...
* ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def: New file.
* Makefile.am: Build bytecodes_arm.s from bytecodes_arm.def.
* ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S: Include
bytecodes_arm.s rather than bytecodes.s.
* ports/hotspot/src/cpu/zero/vm/bytecodes.s: Removed.
* .hgignore: Updated.
author | doko@ubuntu.com |
---|---|
date | Fri, 21 Aug 2009 13:36:15 +0200 |
parents | 234dd693b3ec |
children | a98ad2958053 |
files | .hgignore ChangeLog Makefile.am ports/hotspot/src/cpu/zero/vm/bc.def ports/hotspot/src/cpu/zero/vm/bytecodes.s ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S |
diffstat | 7 files changed, 7894 insertions(+), 20664 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Fri Aug 21 13:35:04 2009 +0200 +++ b/.hgignore Fri Aug 21 13:36:15 2009 +0200 @@ -469,3 +469,4 @@ pulseaudio/.*jar pulse-java.jar hotspot.tar.gz +ports/hotspot/src/cpu/zero/vm/bytecodes_arm.s
--- a/ChangeLog Fri Aug 21 13:35:04 2009 +0200 +++ b/ChangeLog Fri Aug 21 13:36:15 2009 +0200 @@ -1,3 +1,17 @@ +2009-08-20 Gary Benson <gbenson@redhat.com> + + * ports/hotspot/src/cpu/zero/vm/bc.def: Renamed to... + * ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def: New file. + + * Makefile.am: Build bytecodes_arm.s from bytecodes_arm.def. + + * ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S: Include + bytecodes_arm.s rather than bytecodes.s. + + * ports/hotspot/src/cpu/zero/vm/bytecodes.s: Removed. + + * .hgignore: Updated. + 2009-08-18 Edward Nevill <ed@camswl.com> Added ARM assembler interpreter
--- a/Makefile.am Fri Aug 21 13:35:04 2009 +0200 +++ b/Makefile.am Fri Aug 21 13:36:15 2009 +0200 @@ -457,6 +457,17 @@ rm -f $(NETBEANS_PROFILER_SRC_ZIP) endif +# Build asm interpreter bytecodes +ZERO_ASM_BC_DEF = $(abs_top_srcdir)/ports/hotspot/src/cpu/zero/vm/bytecodes_$(ZERO_LIBARCH).def +ZERO_ASM_BC_ASM = $(abs_top_srcdir)/ports/hotspot/src/cpu/zero/vm/bytecodes_$(ZERO_LIBARCH).s +ZERO_ASM_BC_ASM_COND = $(shell test -f ${ZERO_ASM_BC_DEF} && echo ${ZERO_ASM_BC_ASM}) + +$(abs_top_srcdir)/mkbc: $(abs_top_srcdir)/mkbc.c + $(CC) $< -o $@ + +${ZERO_ASM_BC_ASM}: ${ZERO_ASM_BC_DEF} $(abs_top_srcdir)/mkbc + $(abs_top_srcdir)/mkbc $< $@ + # Link ports sources into tree stamps/ports.stamp: stamps/replace-hotspot.stamp for target in $(abs_top_srcdir)/ports/hotspot/build/*/makefiles/* \ @@ -1122,7 +1133,7 @@ stamps/ports.stamp stamps/patch.stamp stamps/overlay.stamp \ $(ICEDTEAPLUGIN_TARGET) $(ICEDTEANPPLUGIN_TARGET) \ extra-lib/about.jar stamps/cacao.stamp stamps/visualvm.stamp \ - stamps/pulse-java.stamp + stamps/pulse-java.stamp $(ZERO_ASM_BC_ASM_COND) $(ARCH_PREFIX) $(MAKE) \ $(ICEDTEA_ENV) \ -C openjdk \ @@ -1207,7 +1218,7 @@ stamps/ports.stamp stamps/patch.stamp stamps/overlay.stamp \ $(ICEDTEAPLUGIN_TARGET) $(ICEDTEANPPLUGIN_TARGET) \ extra-lib/about.jar stamps/cacao.stamp stamps/visualvm.stamp \ - stamps/pulse-java.stamp + stamps/pulse-java.stamp $(ZERO_ASM_BC_ASM_COND) $(ARCH_PREFIX) $(MAKE) \ $(ICEDTEA_ENV) \ -C openjdk \ @@ -1319,7 +1330,8 @@ stamps/icedtea-ecj.stamp: stamps/bootstrap-directory-symlink-ecj.stamp \ stamps/hotspot-tools.stamp stamps/plugs.stamp \ - stamps/ports-ecj.stamp stamps/patch-ecj.stamp stamps/cacao.stamp + stamps/ports-ecj.stamp stamps/patch-ecj.stamp stamps/cacao.stamp \ + $(ZERO_ASM_BC_ASM_COND) $(ARCH_PREFIX) $(MAKE) \ $(ICEDTEA_ENV_ECJ) \ -C openjdk-ecj/ \
--- a/ports/hotspot/src/cpu/zero/vm/bc.def Fri Aug 21 13:35:04 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7863 +0,0 @@ -nop = 0x00, 1 -aconst_null = 0x01, 1 -iconst_m1 = 0x02, 1 -iconst_0 = 0x03, 1 -iconst_1 = 0x04, 1 -iconst_2 = 0x05, 1 -iconst_3 = 0x06, 1 -iconst_4 = 0x07, 1 -iconst_5 = 0x08, 1 -lconst_0 = 0x09, 1 -lconst_1 = 0x0a, 1 -fconst_0 = 0x0b, 1 -fconst_1 = 0x0c, 1 -fconst_2 = 0x0d, 1 -dconst_0 = 0x0e, 1 -dconst_1 = 0x0f, 1 -bipush = 0x10, 2 -sipush = 0x11, 3 -ldc = 0x12, 2 -ldc_w = 0x13, 3 -ldc2_w = 0x14, 3 -iload = 0x15, 2 -lload = 0x16, 2 -fload = 0x17, 2 -dload = 0x18, 2 -aload = 0x19, 2 -iload_0 = 0x1a, 1 -iload_1 = 0x1b, 1 -iload_2 = 0x1c, 1 -iload_3 = 0x1d, 1 -lload_0 = 0x1e, 1 -lload_1 = 0x1f, 1 -lload_2 = 0x20, 1 -lload_3 = 0x21, 1 -fload_0 = 0x22, 1 -fload_1 = 0x23, 1 -fload_2 = 0x24, 1 -fload_3 = 0x25, 1 -dload_0 = 0x26, 1 -dload_1 = 0x27, 1 -dload_2 = 0x28, 1 -dload_3 = 0x29, 1 -aload_0 = 0x2a, 1 -aload_1 = 0x2b, 1 -aload_2 = 0x2c, 1 -aload_3 = 0x2d, 1 -iaload = 0x2e, 1 -laload = 0x2f, 1 -faload = 0x30, 1 -daload = 0x31, 1 -aaload = 0x32, 1 -baload = 0x33, 1 -caload = 0x34, 1 -saload = 0x35, 1 -istore = 0x36, 2 -lstore = 0x37, 2 -fstore = 0x38, 2 -dstore = 0x39, 2 -astore = 0x3a, 2 -istore_0 = 0x3b, 1 -istore_1 = 0x3c, 1 -istore_2 = 0x3d, 1 -istore_3 = 0x3e, 1 -lstore_0 = 0x3f, 1 -lstore_1 = 0x40, 1 -lstore_2 = 0x41, 1 -lstore_3 = 0x42, 1 -fstore_0 = 0x43, 1 -fstore_1 = 0x44, 1 -fstore_2 = 0x45, 1 -fstore_3 = 0x46, 1 -dstore_0 = 0x47, 1 -dstore_1 = 0x48, 1 -dstore_2 = 0x49, 1 -dstore_3 = 0x4a, 1 -astore_0 = 0x4b, 1 -astore_1 = 0x4c, 1 -astore_2 = 0x4d, 1 -astore_3 = 0x4e, 1 -iastore = 0x4f, 1 -lastore = 0x50, 1 -fastore = 0x51, 1 -dastore = 0x52, 1 -aastore = 0x53, 1 -bastore = 0x54, 1 -castore = 0x55, 1 -sastore = 0x56, 1 -pop = 0x57, 1 -pop2 = 0x58, 1 -dup = 0x59, 1 -dup_x1 = 0x5a, 1 -dup_x2 = 0x5b, 1 -dup2 = 0x5c, 1 -dup2_x1 = 0x5d, 1 -dup2_x2 = 0x5e, 1 -swap = 0x5f, 1 -iadd = 0x60, 1 -ladd = 0x61, 1 -fadd = 0x62, 1 -dadd = 0x63, 1 -isub = 0x64, 1 -lsub = 0x65, 1 -fsub = 0x66, 1 -dsub = 0x67, 1 -imul = 0x68, 1 -lmul = 0x69, 1 -fmul = 0x6a, 1 -dmul = 0x6b, 1 -idiv = 0x6c, 1 -ldiv = 0x6d, 1 -fdiv = 0x6e, 1 -ddiv = 0x6f, 1 -irem = 0x70, 1 -lrem = 0x71, 1 -frem = 0x72, 1 -drem = 0x73, 1 -ineg = 0x74, 1 -lneg = 0x75, 1 -fneg = 0x76, 1 -dneg = 0x77, 1 -ishl = 0x78, 1 -lshl = 0x79, 1 -ishr = 0x7a, 1 -lshr = 0x7b, 1 -iushr = 0x7c, 1 -lushr = 0x7d, 1 -iand = 0x7e, 1 -land = 0x7f, 1 -ior = 0x80, 1 -lor = 0x81, 1 -ixor = 0x82, 1 -lxor = 0x83, 1 -iinc = 0x84, 3 -i2l = 0x85, 1 -i2f = 0x86, 1 -i2d = 0x87, 1 -l2i = 0x88, 1 -l2f = 0x89, 1 -l2d = 0x8a, 1 -f2i = 0x8b, 1 -f2l = 0x8c, 1 -f2d = 0x8d, 1 -d2i = 0x8e, 1 -d2l = 0x8f, 1 -d2f = 0x90, 1 -i2b = 0x91, 1 -i2c = 0x92, 1 -i2s = 0x93, 1 -lcmp = 0x94, 1 -fcmpl = 0x95, 1 -fcmpg = 0x96, 1 -dcmpl = 0x97, 1 -dcmpg = 0x98, 1 -ifeq = 0x99, 0 -ifne = 0x9a, 0 -iflt = 0x9b, 0 -ifge = 0x9c, 0 -ifgt = 0x9d, 0 -ifle = 0x9e, 0 -if_icmpeq = 0x9f, 0 -if_icmpne = 0xa0, 0 -if_icmplt = 0xa1, 0 -if_icmpge = 0xa2, 0 -if_icmpgt = 0xa3, 0 -if_icmple = 0xa4, 0 -if_acmpeq = 0xa5, 0 -if_acmpne = 0xa6, 0 -goto = 0xa7, 0 -jsr = 0xa8, 0 -ret = 0xa9, 0 -tableswitch = 0xaa, 0 -lookupswitch = 0xab, 0 -ireturn = 0xac, 0 -lreturn = 0xad, 0 -freturn = 0xae, 0 -dreturn = 0xaf, 0 -areturn = 0xb0, 0 -return = 0xb1, 0 -getstatic = 0xb2, 3 -putstatic = 0xb3, 3 -getfield = 0xb4, 3 -putfield = 0xb5, 3 -invokevirtual = 0xb6, 3 -invokespecial = 0xb7, 3 -invokestatic = 0xb8, 3 -invokeinterface = 0xb9, 0 -new = 0xbb, 3 -newarray = 0xbc, 2 -anewarray = 0xbd, 3 -arraylength = 0xbe, 1 -athrow = 0xbf, 0 -checkcast = 0xc0, 3 -instanceof = 0xc1, 3 -monitorenter = 0xc2, 1 -monitorexit = 0xc3, 1 -wide = 0xc4, 1 -multianewarray = 0xc5, 4 -ifnull = 0xc6, 0 -ifnonnull = 0xc7, 0 -goto_w = 0xc8, 0 -jsr_w = 0xc9, 0 -breakpoint = 0xca, 0 - -#agetfield = 0xcb, 3 -bgetfield = 0xcc, 3 -cgetfield = 0xcd, 3 -#dgetfield = 0xce, 3 -#fgetfield = 0xcf, 3 -igetfield = 0xd0, 3 -lgetfield = 0xd1, 3 -sgetfield = 0xd2, 3 - -aputfield = 0xd3, 3 -bputfield = 0xd4, 3 -cputfield = 0xd5, 3 -#dputfield = 0xd6, 3 -#fputfield = 0xd7, 3 -iputfield = 0xd8, 3 -lputfield = 0xd9, 3 -#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 - -return_register_finalizer = 229, 0 - -(nop) { - DISPATCH \seq_len -} - -(aconst_null,fconst_0) u4const_0 { - DISPATCH_START \seq_len - mov lr, #0 - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) iconst_N { - sub lr, r0, #opc_iconst_0 - DISPATCH_START \seq_len - PUSH lr - DISPATCH_FINISH -} - -(lconst_0,dconst_0) u8const_0 { - DISPATCH_START \seq_len - mov tmp1, #0 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(lconst_1) lconst_1 { - DISPATCH_START \seq_len - mov tmp2, #1 - DISPATCH_NEXT - mov tmp1, #0 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(fconst_1) fconst_1 { - DISPATCH_START \seq_len - mov tmp1, #0x3f800000 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(fconst_2) fconst_2 { - DISPATCH_START \seq_len - mov r2, #0x40000000 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(dconst_1) dconst_1 { - DISPATCH_START \seq_len - mov tmp1, #0x3f000000 - DISPATCH_NEXT - orr tmp1, tmp1, #0x00f00000 - DISPATCH_NEXT - mov tmp2, #0 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(bipush) bipush { - DISPATCH_START \seq_len - mov tmp1, r2, lsl #24 - DISPATCH_NEXT - mov tmp1, tmp1, asr #24 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -# r1 = [jpc, #2] -(sipush) sipush { - DISPATCH_START \seq_len - mov tmp1, r1 - DISPATCH_NEXT - mov r2, r2, lsl #24 - DISPATCH_NEXT - orr tmp1, tmp1, r2, asr #16 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload,fload,aload) u4load { - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(lload,dload) u8load { - DISPATCH_START \seq_len - sub r3, locals, r2, lsl #2 - DISPATCH_NEXT - ldmda r3, {tmp2, tmp1} - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(aload_0,aload_1,aload_2,aload_3) { - rsb tmp1, r0, #opc_aload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) { - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(fload_0,fload_1,fload_2,fload_3) { - rsb tmp1, r0, #opc_fload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(lload_0,dload_0) u8load_0 { - DISPATCH_START \seq_len - ldmda locals, {tmp2-tmp1} - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lload_1,dload_1) u8load_1 { - DISPATCH_START \seq_len - ldmdb locals, {tmp2-tmp1} - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lload_2,dload_2) u8load_2 { - DISPATCH_START \seq_len - ldr tmp2, [locals, #-12] - DISPATCH_NEXT - ldr tmp1, [locals, #-8] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(lload_3,dload_3) u8load_3 { - DISPATCH_START \seq_len - ldr tmp2, [locals, #-16] - DISPATCH_NEXT - ldr tmp1, [locals, #-12] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(iaload,faload,aaload) u4aload { - POP2 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 -.abortentry5: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - DISPATCH_NEXT - ldr tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(laload,daload) u8aload { - POP2 r2, r3 - DISPATCH_START \seq_len -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_1 -#endif -.abortentry6: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #3 - ldr tmp2, [r3, #16] - DISPATCH_NEXT - ldr tmp1, [r3, #20] - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(baload) baload { - POP2 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 -.abortentry7: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - DISPATCH_NEXT - ldrsb tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(caload) caload { - POP2 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 -.abortentry8: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - DISPATCH_NEXT - ldrh tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(saload) saload { - POP2 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 -.abortentry9: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - DISPATCH_NEXT - ldrsh tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(astore,istore,fstore) u4store { - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - POP r3 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(lstore,dstore) u8store { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub r3, locals, r2, lsl #2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmda r3, {tmp2, tmp1} - DISPATCH_FINISH -} - -(astore_0,istore_0,fstore_0) u4store_0 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #0] - DISPATCH_FINISH -} - -(astore_1,istore_1,fstore_1) u4store_1 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-4] - DISPATCH_FINISH -} - -(astore_2,istore_2,fstore_2) u4store_2 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-8] - DISPATCH_FINISH -} - -(astore_3,istore_3,fstore_3) u4store_3 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-12] - DISPATCH_FINISH -} - -(lstore_0,dstore_0) u8store_0 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP2 tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmda locals, {tmp2, tmp1} - DISPATCH_FINISH -} - -(lstore_1,dstore_1) u8store_1 { - DISPATCH_START \seq_len - DISPATCH_NEXT - POP2 tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmdb locals, {tmp2, tmp1} - DISPATCH_FINISH -} - -(lstore_2,dstore_2) u8store_2 { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - str tmp2, [locals, #-12] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-8] - DISPATCH_FINISH -} - -(lstore_3,dstore_3) u8store_3 { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - str tmp2, [locals, #-16] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-12] - DISPATCH_FINISH -} - -(iastore,fastore) u4astore { - POP3 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 -.abortentry10: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2, lsl #2 - DISPATCH_NEXT - str r3, [tmp1, #12] - DISPATCH_FINISH -} - -(lastore,dastore) u8astore { - POP4 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 -.abortentry11: - ldr ip, [tmp1, #8] @ ip = limit - cmp tmp2, ip - DISPATCH_NEXT - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2, lsl #3 - str r2, [tmp2, #16] - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [tmp2, #20] - DISPATCH_FINISH -} - -(bastore) bastore { - POP3 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 -.abortentry12: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2 - DISPATCH_NEXT - strb r3, [tmp1, #12] - DISPATCH_FINISH -} - -(castore,sastore) u2astore { - POP3 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 -.abortentry13: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2, lsl #1 - DISPATCH_NEXT - strh r3, [tmp1, #12] - DISPATCH_FINISH -} - -(pop) jpop { - DISPATCH_START \seq_len - add stack, stack, #4 - DISPATCH_FINISH -} - -(pop2) jpop2 { - DISPATCH_START \seq_len - add stack, stack, #8 - DISPATCH_FINISH -} - -(dup) dup { - DISPATCH_START \seq_len - ldr lr, [stack, #4] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(dup_x1) dup_x1 { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(dup_x2) dup_x2 { - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH3 r2, r3, lr - DISPATCH_FINISH -} - -(dup2) dup2 { - DISPATCH_START \seq_len - ldmib stack, {r2, r3} - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(dup2_x1) dup2_x1 { - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_NEXT - PUSH3 r2, r3, lr - DISPATCH_FINISH -} - -(dup2_x2) dup2_x2 { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - PUSH2 r2, r3 - PUSH4 r2, r3, tmp1, lr - DISPATCH_FINISH -} - -(swap) swap { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - - -(iadd) iadd { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(ladd) ladd { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - adds r2, r2, tmp1 - adc r3, r3, lr - DISPATCH_NEXT - PUSH2 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 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lsub) lsub { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - subs r2, tmp1, r2 - sbc r3, lr, r3 - DISPATCH_NEXT - PUSH2 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 - DISPATCH_NEXT - mul tmp2, r2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lmul) lmul { - POP4 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 - DISPATCH_FINISH -} - -(fmul) fmul { - POP2 r0, r1 - bl __aeabi_fmul - PUSH r0 - DISPATCH \seq_len -} - -(ldiv) ldiv { - POP2 r2, r3 - POP2 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 - DISPATCH \seq_len -} - -(lrem) lrem { - POP2 r2, r3 - POP2 r0, r1 - orrs lr, r2, r3 - beq .lrem_0 - bl __aeabi_ldivmod - PUSH2 r2, r3 - DISPATCH \seq_len -} - -(frem) frem { -@ ECN: It must be possible to do better than this - POP r0 - bl __aeabi_f2d - PUSH2 r0, r1 - GET_STACK 2, r0 - bl __aeabi_f2d - POP2 r2, r3 - bl fmod - bl __aeabi_d2f - PUT_STACK 0, r0 - DISPATCH \seq_len -} - -(drem) drem { - POP2 r2, r3 - POP2 r0, r1 - bl fmod - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(ineg) ineg { - DISPATCH_START \seq_len - POP tmp1 - DISPATCH_NEXT - rsb tmp1, tmp1, #0 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(lneg) lneg { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - rsbs r2, r2, #0 - rsc r3, r3, #0 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(fneg) fneg { - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - eor r2, r2, #0x80000000 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(dneg) dneg { - DISPATCH_START \seq_len - GET_STACK 1, r2 - DISPATCH_NEXT - eor r2, r2, #0x80000000 - DISPATCH_NEXT - PUT_STACK 1, r2 - DISPATCH_FINISH -} - -(ishl) ishl { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, lsl r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(lshl) lshl { - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne tmp1, #0 - movne lr, r3, lsl r2 - moveq tmp1, r3, lsl r2 - moveq lr, lr, lsl r2 - rsbeq r2, r2, #32 - orreq lr, lr, r3, lsr r2 - PUSH2 tmp1, lr - DISPATCH_FINISH -} - -(ishr) ishr { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, asr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(lshr) lshr { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne lr, tmp1, asr #31 - movne r3, tmp1, asr r2 - moveq lr, tmp1, asr r2 - moveq r3, r3, lsr r2 - rsbeq r2, r2, #32 - orreq r3, r3, tmp1, lsl r2 - PUSH2 r3, lr - DISPATCH_FINISH -} - -(iushr) iushr { - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, lsr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(lushr) lushr { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne lr, #0 - movne r3, tmp1, lsr r2 - moveq lr, tmp1, lsr r2 - moveq r3, r3, lsr r2 - rsbeq r2, r2, #32 - orreq r3, r3, tmp1, lsl r2 - PUSH2 r3, lr - DISPATCH_FINISH -} - -(iand) iand { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(land) land { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - and r2, tmp1, r2 - and r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(ior) ior { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lor) lor { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - orr r2, tmp1, r2 - orr r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(ixor) ixor { - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lxor) lxor { - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - eor r2, tmp1, r2 - eor r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iinc) iinc { - ldrsb lr, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - ldr r3, [locals, tmp1, lsl #2] - DISPATCH_NEXT - add r3, r3, lr - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH -} - -(i2l) i2l { - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - mov r3, r2, asr #31 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(i2f) i2f { - POP r0 - bl __aeabi_i2f - PUSH r0 - DISPATCH \seq_len -} - -(i2d) i2d { - POP r0 - bl __aeabi_i2d - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(l2i) l2i { - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - PUT_STACK 0, r3 - DISPATCH_FINISH -} - -(l2f) l2f { - POP2 r0, r1 - bl __aeabi_l2f - PUSH r0 - DISPATCH \seq_len -} - -(l2d) l2d { - POP2 r0, r1 - bl __aeabi_l2d - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(f2i) f2i { - POP r0 - bl _ZN13SharedRuntime3f2iEf - PUSH r0 - DISPATCH \seq_len -} - -(f2l) f2l { - POP r0 - bl _ZN13SharedRuntime3f2lEf - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(f2d) f2d { - POP r0 - bl __aeabi_f2d - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(d2i) d2i { - POP2 r0, r1 - bl _ZN13SharedRuntime3d2iEd - PUSH r0 - DISPATCH \seq_len -} - -(d2l) d2l { - POP2 r0, r1 - bl _ZN13SharedRuntime3d2lEd - PUSH2 r0, r1 - DISPATCH \seq_len -} - -(d2f) d2f { - POP2 r0, r1 - bl __aeabi_d2f - PUSH r0 - DISPATCH \seq_len -} - -(i2b) i2b { - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #24 - mov r3, r3, asr #24 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(i2c) i2c { - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #16 - mov r3, r3, lsr #16 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(i2s) i2s { - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #16 - mov r3, r3, asr #16 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(lcmp) lcmp { - POP4 r2, r3, tmp1, lr - DISPATCH_START \seq_len - subs r2, tmp1, r2 - movne r2, #1 - sbcs lr, lr, r3 - DISPATCH_NEXT - movne r2, #1 - rsblt r2, r2, #0 - DISPATCH_NEXT - PUSH r2 - 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 -} - -# r2 = [jpc, #1] -# r1 = [jpc, #2] -(ifeq,ifnull) ifeq_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ifne,ifnonnull) ifne_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iflt) iflt_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ifge) ifge_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ifgt) ifgt_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ifle) ifle_unsafe { - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmpeq,if_acmpeq) if_icmpeq_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmpne,if_acmpne) if_icmpne_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmplt) if_icmplt_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmpge) if_icmpge_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmpgt) if_icmpgt_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(if_icmple) if_icmple_unsafe { - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(goto) goto_unsafe { - mov r2, r2, lsl #24 - orr ip, r1, r2, asr #16 - DISPATCH_START_REG ip - DISPATCH_BYTECODE -} - -(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 -} - -# r2 = [jpc, #1] -# r1 = [jpc, #2] -(ret) ret { - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r0, #8] - ldr r1, [locals, -r2, lsl #2] - add jpc, r3, r1 - DISPATCH 48 -} - -# ECN: We dont do safe and unsafe versions of tableswitch and lookupswitch -(tableswitch) tableswitch { - POP a2 - bic a1, jpc, #3 - ldr a4,[a1,#8] -@ BYTESEX_REVERSE a3, a4, a3 - - eor a3, a4, a4, ror #16 - bic a3, a3, #0xff0000 - mov a4, a4, ror #8 - eor a3, a4, a3, lsr #8 - - ldr a4,[a1,#12] -@ BYTESEX_REVERSE a4, a4, ip - - eor ip, a4, a4, ror #16 - bic ip, ip, #0xff0000 - mov a4, a4, ror #8 - eor a4, a4, ip, lsr #8 - - sub a2,a2,a3 - sub a4,a4,a3 - cmp a4,a2 - ldrcc a1,[a1,#4] - addcs a1,a1,a2,LSL #2 - ldrcs a1,[a1,#16] -@ BYTESEX_REVERSE a1, a1, a4 - - eor a4, a1, a1, ror #16 - bic a4, a4, #0xff0000 - mov a1, a1, ror #8 - eors ip, a1, a4, lsr #8 - - DISPATCH_START_REG ip - DISPATCH_BYTECODE -} - -(lookupswitch) lookupswitch { - POP a2 - bic a1, jpc, #3 -@ BYTESEX_REVERSE a2, a2, ip - - eor ip, a2, a2, ror #16 - bic ip, ip, #0xff0000 - mov a2, a2, ror #8 - eor a2, a2, ip, lsr #8 - - ldr a3,[a1,#8] -@ BYTESEX_REVERSE a3, a3, ip - - eor ip, a3, a3, ror #16 - bic ip, ip, #0xff0000 - mov a3, a3, ror #8 - eor a3, a3, ip, lsr #8 - - subs a4,a3,#1 - bmi 1f - add a1, a1, #4 -0: - ldr a3,[a1,#8]! - cmp a3,a2 - beq 2f - subs a4,a4,#1 - bpl 0b -1: - bic a1, jpc, #3 -2: - ldr a2,[a1,#4] -@ BYTESEX_REVERSE a2, a2, ip - - eor ip, a2, a2, ror #16 - bic ip, ip, #0xff0000 - mov a2, a2, ror #8 - eors ip, a2, ip, lsr #8 - - DISPATCH_START_REG ip - DISPATCH_BYTECODE -} - -(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] - DISPATCH_NEXT -.abortentry78: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(bgetfield) bgetfield { - 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] - DISPATCH_NEXT -.abortentry79: - ldrsb tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(cgetfield) cgetfield { - 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] - DISPATCH_NEXT -.abortentry80: - ldrh tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(sgetfield) sgetfield { - 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] - DISPATCH_NEXT -.abortentry81: - ldrsh tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(lgetfield) lgetfield { - 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] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT -.abortentry82: - ldmia tmp2, {tmp2, tmp1} - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(iputfield) iputfield { - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry83: - str r3, [tmp1, tmp2] - DISPATCH_FINISH -} - -(cputfield) cputfield { - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry84: - strh r3, [tmp1, tmp2] - DISPATCH_FINISH -} - -(bputfield) bputfield { - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry85: - strb r3, [tmp1, tmp2] - DISPATCH_FINISH -} - -(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 - bl oop_store - ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] - DISPATCH_START 3 - POP r2 - ldr r3, [r3, #0] - DISPATCH_NEXT - ldr r3, [r3, #12] - DISPATCH_NEXT - ldr r3, [r3, #76] - mov tmp2, #0 - strb tmp2, [r3, r2, lsr #9] - DISPATCH_FINISH -} - -(lputfield) lputfield { - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP3 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] - DISPATCH_NEXT - add tmp2, lr, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry86: - stm tmp2, {r3, tmp1} - DISPATCH_FINISH -} - -# 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 - and r3, r3, #0x00ff0000 - cmp r3, #178 << 16 - bne resolve_getstatic - ldr r3, [tmp2, #4] - ldr r2, [tmp2, #12] - ldr lr, [tmp2, #8] - movs r2, r2, lsr #29 - bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 - bcs getstatic_h @ C = 1 => R2 = 1 - beq getstatic_sb @ Z = 1 => R2 = 0 - tst r2, #2 - bne getstatic_dw - b getstatic_sh -} - -# 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 - 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 - movs lr, lr, lsr #29 - bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 - bcs putstatic_h @ C = 1 => R2 = 1 - beq putstatic_sb @ Z = 1 => R2 = 0 - tst lr, #2 - bne putstatic_dw - b putstatic_sh -} - -(return) return_unsafe { - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r2, #0] - ldrh r0, [r0, #40] - add r1, r2, #4 - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - add stack, r1, r0, lsl #2 - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT - add r2, r2, #4 - DISPATCH_NEXT - 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] - DISPATCH_NEXT - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b -} - -(ireturn,areturn,freturn) ireturn_unsafe { - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - POP r1 @ pop result before we lose stack - - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b -} - -(lreturn,dreturn) lreturn_unsafe { - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r2, #0] - ldrh r0, [r0, #40] - add r1, r2, #4 - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - - POP2 r2, r3 - - add stack, r1, r0, lsl #2 - stmdb stack!, {r2, r3} - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT - add r2, r2, #4 - DISPATCH_NEXT - 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] - DISPATCH_NEXT - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b -} - -(ldc) ldc { - ldrb lr, [jpc, #1] - ldr r3, [istate, #ISTATE_METHOD] @ method - - DISPATCH_START \seq_len - - ldr r2, [r3, #12] @ constants - ldr r3, [r2, #8] - add r3, r3, #12 - ldrb r3, [r3, lr] - - 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 - DISPATCH_FINISH -1: - cmp r3, #JVM_CONSTANT_Class - bne 2f - add r0, r2, #32 - ldr r0, [r0, lr, lsl #2] - ldr r1, [r0, #60] - PUSH r1 - DISPATCH 0 -2: - sub jpc, jpc, #\seq_len - ldr r0, [istate, #ISTATE_THREAD] - str jpc, [istate, #ISTATE_BCP] - str stack, [istate, #ISTATE_STACK] - mov r1, #0 - bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb - ldr r0, [istate, #ISTATE_THREAD] @ thread - ldr stack, [istate, #ISTATE_STACK] - ldr constpool, [istate, #ISTATE_CONSTANTS] - ldr r1, [r0, #THREAD_PENDING_EXC] - ldr jpc, [istate, #ISTATE_BCP] - add constpool, constpool, #CONST_POOL_OFFSET - cmp r1, #0 - ldr locals, [istate, #ISTATE_LOCALS] - bne handle_exception - ldr r3, [r0, #THREAD_VM_RESULT] - mov r2, #0 - PUSH r3 - str r2, [r0, #THREAD_VM_RESULT] - DISPATCH \seq_len -} - -(ldc_w) ldc_w { - ldrb lr, [jpc, #1] - - ldr r3, [istate, #ISTATE_METHOD] @ method - ldrb ip, [jpc, #2] - ldr r2, [r3, #12] @ constants - - DISPATCH_START \seq_len - - ldr r3, [r2, #8] - orr lr, ip, lr, lsl #8 - add r3, r3, #12 - ldrb r3, [r3, lr] - - 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 - DISPATCH_FINISH -1: - cmp r3, #JVM_CONSTANT_Class - bne 2f - add r0, r2, #32 - ldr r0, [r0, lr, lsl #2] - ldr r1, [r0, #60] - PUSH r1 - DISPATCH 0 -2: - sub jpc, jpc, #\seq_len - ldr r0, [istate, #ISTATE_THREAD] - str jpc, [istate, #ISTATE_BCP] - str stack, [istate, #ISTATE_STACK] - mov r1, #1 - bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb - ldr r0, [istate, #ISTATE_THREAD] @ thread - ldr stack, [istate, #ISTATE_STACK] - ldr constpool, [istate, #ISTATE_CONSTANTS] - ldr r1, [r0, #THREAD_PENDING_EXC] - ldr jpc, [istate, #ISTATE_BCP] - add constpool, constpool, #CONST_POOL_OFFSET - cmp r1, #0 - ldr locals, [istate, #ISTATE_LOCALS] - bne handle_exception - ldr r3, [r0, #THREAD_VM_RESULT] - mov r2, #0 - PUSH r3 - str r2, [r0, #THREAD_VM_RESULT] - DISPATCH \seq_len -} - -(ldc2_w) ldc2_w { - ldrb r3, [jpc, #1] - - ldr tmp1, [istate, #ISTATE_METHOD] @ method - ldrb lr, [jpc, #2] - ldr r2, [tmp1, #12] @ constants - - DISPATCH_START \seq_len - - ldr tmp1, [r2, #8] - orr r3, lr, r3, lsl #8 - add tmp1, tmp1, #12 - ldrb tmp1, [tmp1, r3] - - 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 - DISPATCH_FINISH -} - -(iadd_u4store) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(isub_u4store) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(iand_u4store) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(ior_u4store) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(ixor_u4store) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(iadd_istore_N) { - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(isub_istore_N) { - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(iand_istore_N) { - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(ior_istore_N) { - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -(ixor_istore_N) { - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -{ - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - rsb r2, r2, #0 - DISPATCH_NEXT - sub r3, r3, #opc_iconst_0 - ldr tmp1, [locals, r2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - DISPATCH_FINISH -} - -(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr tmp1, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp2, r2, #opc_iconst_0 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -# (aload_N)(getfield) -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -{ - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb r3, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 4 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry87: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - PUSH tmp2 - 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) -{ - rsb tmp1, r0, #opc_aload_0 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_aload_0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(aload_0,aload_1,aload_2,aload_3) -(iload_0,iload_1,iload_2,iload_3) -{ - 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 - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(aload_0,aload_1,aload_2,aload_3) -{ - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_aload_0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -# 7 cycles -(iload_0,iload_1,iload_2,iload_3) -(iload_0,iload_1,iload_2,iload_3) -{ - rsb tmp1, r0, #opc_iload_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 - PUSH2 tmp2, 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 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - 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 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - 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 - DISPATCH_NEXT - rsb tmp1, r2, #0 - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - 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 - DISPATCH_NEXT - rsb tmp1, r2, #0 - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - 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] - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH -} - -# --- 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 - rsb tmp2, r1, #opc_astore_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) -(istore_0,istore_1,istore_2,istore_3) -{ - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - 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 - PUSH2 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 - PUSH2 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 - PUSH2 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 - PUSH2 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 - PUSH2 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 - PUSH2 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 - PUSH2 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] -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_1 -#endif -.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 -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_1 -#endif -.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] -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_1 -#endif -.abortentry21: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2 - ldrsb lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(caload) -{ - POP r3 - 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 -.abortentry22: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(saload) -{ - POP r3 - 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 -.abortentry23: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrsh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -# 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 -.abortentry24: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2 - ldrsb lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -# 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 -.abortentry25: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -# 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 -.abortentry26: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrsh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -# --- ECN: load; Xastore ------------------------------------------------------- - -(iload_0,iload_1,iload_2,iload_3) -(iastore,fastore) -{ - POP2 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 -.abortentry27: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(bastore) -{ - POP2 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 -.abortentry28: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - strb tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(castore,sastore) -{ - POP2 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 -.abortentry29: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - strh tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iload,aload,fload)(iastore,fastore) { - POP2 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 -.abortentry30: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3, lsl #2 - str r2, [tmp1, #12] - DISPATCH_FINISH -} - -(iload,aload,fload)(bastore) { - POP2 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 -.abortentry31: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3 - strb r2, [tmp1, #12] - DISPATCH_FINISH -} - -(iload,aload,fload)(castore,sastore) { - POP2 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 -.abortentry32: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3, lsl #1 - strh r2, [tmp1, #12] - DISPATCH_FINISH -} - -# --- ECN: load; dataop ------------------------------------------------------- - -(iload_0,iload_1,iload_2,iload_3) -(iadd) -{ - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - add tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload,aload,fload)(iadd) { - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(isub) -{ - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - sub tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload,aload,fload)(isub) { - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(imul) -{ - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mul r3, r2, lr - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(iload,aload,fload)(imul) { - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mul lr, r3, r2 - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(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 - b int_div -} - -(iload,aload,fload)(idiv) { - add jpc, jpc, #2 - POP r1 - ldr r0, [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 - b int_rem -} - -(iload,aload,fload)(irem) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - POP r1 - b int_rem -} - -(iload_0,iload_1,iload_2,iload_3) -(ineg) -{ - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - rsb lr, lr, #0 - PUSH lr - DISPATCH_FINISH -} - -(iload,aload,fload)(ineg) { - DISPATCH_START \seq_len - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - rsb r2, r2, #0 - PUSH r2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(ishl) -{ - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, lsl lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iload,aload,fload)(ishl) { - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, lsl r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(ishr) -{ - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, asr lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iload,aload,fload)(ishr) { - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, asr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(iushr) -{ - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, lsr lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH -} - -(iload,aload,fload)(iushr) { - ldrb r2, [jpc, #1] - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, lsr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(iand) -{ - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - and tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload,aload,fload)(iand) { - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(ior) -{ - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - orr tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload,aload,fload)(ior) { - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(ixor) -{ - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - eor tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iload,aload,fload)(ixor) { - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iload_0,iload_1,iload_2,iload_3) -(i2c) -{ - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, lr, asl #16 - mov lr, lr, lsr #16 - PUSH lr - DISPATCH_FINISH -} - -(iload,aload,fload)(i2c) { - DISPATCH_START \seq_len - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r2, asl #16 - mov r2, r2, lsr #16 - PUSH r2 - DISPATCH_FINISH -} - -# --- ECN: load; branch ------------------------------------------------------- - -(iload_0,iload_1,iload_2,iload_3) -(ifeq,ifnull) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(ifeq,ifnull) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(ifne,ifnonnull) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(ifne,ifnonnull) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(iflt) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(iflt) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(ifge) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(ifge) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(ifgt) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(ifgt) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(ifle) -{ - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(ifle) { - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmpeq,if_acmpeq) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmpeq,if_acmpeq) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmpne,if_acmpne) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmpne,if_acmpne) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmplt) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmplt) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmpge) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmpge) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmpgt) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmpgt) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload_0,iload_1,iload_2,iload_3) -(if_icmple) -{ - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iload,aload,fload)(if_icmple) { - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -# --- ECN: load; return/invoke ------------------------------------------------- - -(iload_0,iload_1,iload_2,iload_3) -(ireturn,areturn,freturn) -{ - rsb r0, r0, #opc_iload_0 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr r1, [locals, r0, lsl #2] - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(iload,aload,fload)(ireturn,areturn,freturn) { - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr r1, [locals, -r2, lsl #2] - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #2 - bl return_check_monitors - POP r1 - b 2b -} - -(iload_0,iload_1,iload_2,iload_3) -(invokeresolved) -{ - 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_invokeresolved -} - -(aload_0,aload_1,aload_2,aload_3) -(invokeresolved) -{ - 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_invokeresolved -} - -(iload,aload,fload)(invokeresolved) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokeresolved -} - -(iload_0,iload_1,iload_2,iload_3) -(invokevfinal) -{ - 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_invokevfinal -} - -(aload_0,aload_1,aload_2,aload_3) -(invokevfinal) -{ - 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_invokevfinal -} - -(iload,aload,fload)(invokevfinal) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokevfinal -} - -(iload_0,iload_1,iload_2,iload_3) -(invokespecialresolved) -{ - 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_invokespecialresolved -} - -(aload_0,aload_1,aload_2,aload_3) -(invokespecialresolved) -{ - 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_invokespecialresolved -} - -(iload,aload,fload)(invokespecialresolved) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokespecialresolved -} - -(iload_0,iload_1,iload_2,iload_3) -(invokestaticresolved) -{ - 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_invokestaticresolved -} - -(aload_0,aload_1,aload_2,aload_3) -(invokestaticresolved) -{ - 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_invokestaticresolved -} - -(iload,aload,fload)(invokestaticresolved) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokestaticresolved -} - -(iload_0,iload_1,iload_2,iload_3) -(invokeinterface) -{ - add jpc, jpc, #1 - rsb r0, r0, #opc_iload_0 - ldr r0, [locals, r0, lsl #2] - PUSH r0 - b do_invokeinterface -} - -(aload_0,aload_1,aload_2,aload_3) -(invokeinterface) -{ - add jpc, jpc, #1 - rsb r0, r0, #opc_aload_0 - ldr r0, [locals, r0, lsl #2] - PUSH r0 - b do_invokeinterface -} - -(iload,aload,fload)(invokeinterface) { - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - PUSH r0 - b do_invokeinterface -} - -(aload_0,aload_1,aload_2,aload_3) -(igetfield) -{ - add r0, r0, #opc_iaccess_0-opc_aload_0 - strb r0, [jpc] - DISPATCH_BYTECODE -} - -# 13 cycles -(iload,aload,fload)(igetfield) { - ldrb ip, [jpc, #4] - rsb tmp1, r2, #0 - ldrb r3, [jpc, #3] - add tmp2, constpool, ip, lsl #12 - DISPATCH_START 5 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry88: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -# --- 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) -{ - sub r3, r0, #opc_iconst_0 - DISPATCH_START \seq_len - rsb r2, r1, #opc_istore_0 - str r3, [locals, r2, lsl #2] - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(astore,istore,fstore) { - ldrb r2, [jpc, #2] - sub r3, r0, #opc_iconst_0 - DISPATCH_START \seq_len - str r3, [locals, -r2, lsl #2] - DISPATCH_BYTECODE -} - -# --- ECN: iconst; dataop ------------------------------------------------- - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(iadd) { - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP tmp2 - DISPATCH_NEXT - add tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(isub) { - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP tmp2 - DISPATCH_NEXT - sub tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(idiv) { - subs lr, r0, #opc_iconst_2 - DISPATCH_START \seq_len - POP tmp1 - 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 .iconst_div_rem_0 - 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 -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ishl) { - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - mov tmp1, r2, lsl tmp1 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -# --- ECN: iconst; branch ------------------------------------------------- - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpeq) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpne) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmplt) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpge) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpgt) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmple) { - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ireturn) { - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - sub r1, r0, #opc_iconst_0 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(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 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokeresolved -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokevfinal) { - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokevfinal -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokestaticresolved) { - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokestaticresolved -} - -(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokespecialresolved) { - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokespecialresolved -} - -## --- 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 - DISPATCH_START \seq_len -#ifndef HW_NULL_PTR_CHECK - cmp lr, #0 - beq null_ptr_exception_jpc_2 -#endif -.abortentry38: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(bipush) { - ldrsb r2, [jpc, #2] - POP2 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 -.abortentry39: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(sipush) { - ldrsb r2, [jpc, #2] - ldrb tmp1, [jpc, #3] - POP2 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 -.abortentry40: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_4_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(iload,fload,aload) { - ldrb r2, [jpc, #2] - POP2 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 -.abortentry41: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(iaload,faload,aaload) -(iload_0,iload_1,iload_2,iload_3) -{ - rsb r2, r1, #opc_iload_0 - POP2 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 -.abortentry42: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH -} - -(iaload,faload,aaload) -(aload_0,aload_1,aload_2,aload_3) -{ - rsb r2, r1, #opc_aload_0 - POP2 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 -.abortentry42_1: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 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 -.abortentry43: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - 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 -.abortentry44: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr r2, [lr, #12] - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(astore,istore,fstore) { - ldrb r2, [jpc, #2] - POP2 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 -.abortentry45: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - str r3, [locals, -r2, lsl #2] - DISPATCH_FINISH -} - -(iaload,faload,aaload) -(istore_0,istore_1,istore_2,istore_3) { - rsb r2, r1, #opc_istore_0 - POP2 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 -.abortentry46: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - str r3, [locals, r2, lsl #2] - DISPATCH_FINISH -} - -(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 -.abortentry47: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry48: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(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 -.abortentry49: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry50: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - strb tmp1, [r3, #12] - DISPATCH_FINISH -} - -(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 -.abortentry51: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry52: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - strh tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iaload,faload,aaload)(iand) { - POP2 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 -.abortentry58: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - and tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(ior) { - POP2 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 -.abortentry59: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - orr tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH -} - -(iaload,faload,aaload)(ixor) { - POP2 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 -.abortentry60: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - eor tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH -} - -(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 -.abortentry61: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry62: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry63: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry64: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry65: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry66: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry67: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry68: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry69: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry70: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry71: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(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 -.abortentry72: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -# ---- iadd; xxx ------------------------------------------------------------ - -(iadd)(iload,fload,aload) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iadd) -(iload_0,iload_1,iload_2,iload_3) -{ - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iadd)(iaload,aaload,faload) { - POP3 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 -.abortentry73: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iadd)(istore) { - mov r0, #opc_iadd_u4store - strb r0, [jpc] - b do_iadd_u4store -} - -(iadd) -(istore_0,istore_1,istore_2,istore_3) { - mov r0, #opc_iadd_istore_N - strb r0, [jpc] - b do_iadd_istore_N -} - -(iadd)(iastore,fastore) { - POP2 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 -.abortentry106: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iadd)(iadd) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - add tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iadd)(isub) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - add tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iadd)(ifeq,ifnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(ifne,ifnonnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(iflt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(ifge) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(ifgt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(ifle) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmpeq,if_acmpeq) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmpne,if_acmpne) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmplt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmpge) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmpgt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(if_icmple) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iadd)(goto) { - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - add r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iadd)(ireturn) { - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - add r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(iadd)(iinc) { - POP2 tmp1, lr - DISPATCH_START \seq_len - add tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH -} -# ---- sub; xxx ------------------------------------------------------------ - -(isub)(iload,fload,aload) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(isub) -(iload_0,iload_1,iload_2,iload_3) -{ - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(isub)(iaload,aaload,faload) { - POP3 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 -.abortentry74: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(isub)(istore) { - mov r0, #opc_isub_u4store - strb r0, [jpc] - b do_isub_u4store -} - -(isub) -(istore_0,istore_1,istore_2,istore_3) { - mov r0, #opc_isub_istore_N - strb r0, [jpc] - b do_isub_istore_N -} - -(isub)(iastore,fastore) { - POP2 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 -.abortentry105: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(isub)(iadd) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - sub tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(isub)(isub) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - sub tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(isub)(ifeq,ifnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(ifne,ifnonnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(iflt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(ifge) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(ifgt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(ifle) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmpeq,if_acmpeq) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmpne,if_acmpne) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmplt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmpge) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmpgt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(if_icmple) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(isub)(goto) { - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - sub r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(isub)(ireturn) { - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - sub r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(isub)(iinc) { - POP2 tmp1, lr - DISPATCH_START \seq_len - sub tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH -} -# ---- iand; xxx ------------------------------------------------------------ - -(iand)(iload,fload,aload) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iand) -(iload_0,iload_1,iload_2,iload_3) -{ - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iand)(iaload,aaload,faload) { - POP3 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 -.abortentry75: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iand)(istore) { - mov r0, #opc_iand_u4store - strb r0, [jpc] - b do_iand_u4store -} - -(iand) -(istore_0,istore_1,istore_2,istore_3) { - mov r0, #opc_iand_istore_N - strb r0, [jpc] - b do_iand_istore_N -} - -(iand)(iastore,fastore) { - POP2 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 -.abortentry107: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(iand)(iadd) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - and tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iand)(isub) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - and tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(iand)(ifeq,ifnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(ifne,ifnonnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(iflt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(ifge) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(ifgt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(ifle) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmpeq,if_acmpeq) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmpne,if_acmpne) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmplt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmpge) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmpgt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(if_icmple) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iand)(goto) { - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - and r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(iand)(ireturn) { - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - and r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(iand)(iinc) { - POP2 tmp1, lr - DISPATCH_START \seq_len - and tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH -} -# ---- ior; xxx ------------------------------------------------------------ - -(ior)(iload,fload,aload) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(ior) -(iload_0,iload_1,iload_2,iload_3) -{ - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(ior)(iaload,aaload,faload) { - POP3 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 -.abortentry76: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(ior)(istore) { - mov r0, #opc_ior_u4store - strb r0, [jpc] - b do_ior_u4store -} - -(ior) -(istore_0,istore_1,istore_2,istore_3) { - mov r0, #opc_ior_istore_N - strb r0, [jpc] - b do_ior_istore_N -} - -(ior)(iastore,fastore) { - POP2 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 -.abortentry108: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(ior)(iadd) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - orr tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(ior)(isub) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - orr tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(ior)(ifeq,ifnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(ifne,ifnonnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(iflt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(ifge) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(ifgt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(ifle) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmpeq,if_acmpeq) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmpne,if_acmpne) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmplt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmpge) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmpgt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(if_icmple) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ior)(goto) { - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - orr r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(ior)(ireturn) { - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - orr r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(ior)(iinc) { - POP2 tmp1, lr - DISPATCH_START \seq_len - orr tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH -} - -# ---- ixor; xxx ------------------------------------------------------------ - -(ixor)(iload,fload,aload) { - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(ixor) -(iload_0,iload_1,iload_2,iload_3) -{ - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(ixor)(iaload,aaload,faload) { - POP3 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 -.abortentry77: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(ixor)(istore) { - mov r0, #opc_ixor_u4store - strb r0, [jpc] - b do_ixor_u4store -} - -(ixor) -(istore_0,istore_1,istore_2,istore_3) { - mov r0, #opc_ixor_istore_N - strb r0, [jpc] - b do_ixor_istore_N -} - -(ixor)(iastore,fastore) { - POP2 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 -.abortentry109: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH -} - -(ixor)(iadd) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - eor tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(ixor)(isub) { - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - eor tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH -} - -(ixor)(ifeq,ifnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(ifne,ifnonnull) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(iflt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(ifge) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(ifgt) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(ifle) { - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmpeq,if_acmpeq) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmpne,if_acmpne) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmplt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmpge) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmpgt) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(if_icmple) { - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(ixor)(goto) { - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - eor r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH -} - -(ixor)(ireturn) { - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - eor r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b -} - -(ixor)(iinc) { - POP2 tmp1, lr - DISPATCH_START \seq_len - eor tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH -} - -# --- iinc; xxx -------------------------------------------------------------- - -(iinc)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) { - ldrsb tmp1, [jpc, #2] - sub lr, r1, #opc_iconst_0 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - PUSH lr - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - DISPATCH_FINISH -} - -(iinc)(iload,aload,fload) { - ldrb lr, [jpc, #4] - ldrsb tmp1, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - rsb lr, lr, #0 - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - ldr tmp1, [locals, lr, lsl #2] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -(iinc) -(iload_0,iload_1,iload_2,iload_3) -{ - rsb lr, r1, #opc_iload_0 - ldrsb tmp1, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - ldr tmp1, [locals, lr, lsl #2] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH -} - -################################################################################ -## ECN: Optimised bytecode triples -################################################################################ - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(iload,fload,aload) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb r3, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 6 - ldr tmp1, [locals, tmp1, lsl #2] - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT - rsb r3, r3, #0 -.abortentry89: - ldr tmp2, [tmp1, tmp2] - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(iload_0,iload_1,iload_2,iload_3) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 5 - rsb r3, r1, #opc_iload_0 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry90: - ldr tmp2, [tmp1, tmp2] - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(iadd) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 5 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT - POP r3 -.abortentry91: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - add tmp2, tmp2, r3 - PUSH tmp2 - DISPATCH_FINISH -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(ifeq,ifnull) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry92: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(ifne,ifnonnull) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry93: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(iflt) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry94: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(ifge) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry95: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(ifgt) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry96: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(ifle) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry97: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmpeq,if_acmpeq) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry98: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmpne,if_acmpne) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry99: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmplt) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry100: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmpge) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry101: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmpgt) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry102: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE -} - -(iaccess_0,iaccess_1,iaccess_2,iaccess_3) -(if_icmple) { - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry103: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - ble 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) -(iadd) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) -(isub) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - sub r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) -(iand) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - and r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) -(ior) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - orr r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) -(ixor) -{ - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - eor r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -(iadd) -{ - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - add r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -(isub) -{ - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - sub r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -(iand) -{ - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - and r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -(ior) -{ - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - orr r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH -} - -# r2 = [jpc, #1] -(iload_iconst_N) -(ixor) -{ - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - 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) -(iadd_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 - 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 - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH -} - -(iload_iconst_N) -(iadd_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 - 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 -}
--- a/ports/hotspot/src/cpu/zero/vm/bytecodes.s Fri Aug 21 13:35:04 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12797 +0,0 @@ -#define opc_nop 0x00 -#define opc_aconst_null 0x01 -#define opc_iconst_m1 0x02 -#define opc_iconst_0 0x03 -#define opc_iconst_1 0x04 -#define opc_iconst_2 0x05 -#define opc_iconst_3 0x06 -#define opc_iconst_4 0x07 -#define opc_iconst_5 0x08 -#define opc_lconst_0 0x09 -#define opc_lconst_1 0x0a -#define opc_fconst_0 0x0b -#define opc_fconst_1 0x0c -#define opc_fconst_2 0x0d -#define opc_dconst_0 0x0e -#define opc_dconst_1 0x0f -#define opc_bipush 0x10 -#define opc_sipush 0x11 -#define opc_ldc 0x12 -#define opc_ldc_w 0x13 -#define opc_ldc2_w 0x14 -#define opc_iload 0x15 -#define opc_lload 0x16 -#define opc_fload 0x17 -#define opc_dload 0x18 -#define opc_aload 0x19 -#define opc_iload_0 0x1a -#define opc_iload_1 0x1b -#define opc_iload_2 0x1c -#define opc_iload_3 0x1d -#define opc_lload_0 0x1e -#define opc_lload_1 0x1f -#define opc_lload_2 0x20 -#define opc_lload_3 0x21 -#define opc_fload_0 0x22 -#define opc_fload_1 0x23 -#define opc_fload_2 0x24 -#define opc_fload_3 0x25 -#define opc_dload_0 0x26 -#define opc_dload_1 0x27 -#define opc_dload_2 0x28 -#define opc_dload_3 0x29 -#define opc_aload_0 0x2a -#define opc_aload_1 0x2b -#define opc_aload_2 0x2c -#define opc_aload_3 0x2d -#define opc_iaload 0x2e -#define opc_laload 0x2f -#define opc_faload 0x30 -#define opc_daload 0x31 -#define opc_aaload 0x32 -#define opc_baload 0x33 -#define opc_caload 0x34 -#define opc_saload 0x35 -#define opc_istore 0x36 -#define opc_lstore 0x37 -#define opc_fstore 0x38 -#define opc_dstore 0x39 -#define opc_astore 0x3a -#define opc_istore_0 0x3b -#define opc_istore_1 0x3c -#define opc_istore_2 0x3d -#define opc_istore_3 0x3e -#define opc_lstore_0 0x3f -#define opc_lstore_1 0x40 -#define opc_lstore_2 0x41 -#define opc_lstore_3 0x42 -#define opc_fstore_0 0x43 -#define opc_fstore_1 0x44 -#define opc_fstore_2 0x45 -#define opc_fstore_3 0x46 -#define opc_dstore_0 0x47 -#define opc_dstore_1 0x48 -#define opc_dstore_2 0x49 -#define opc_dstore_3 0x4a -#define opc_astore_0 0x4b -#define opc_astore_1 0x4c -#define opc_astore_2 0x4d -#define opc_astore_3 0x4e -#define opc_iastore 0x4f -#define opc_lastore 0x50 -#define opc_fastore 0x51 -#define opc_dastore 0x52 -#define opc_aastore 0x53 -#define opc_bastore 0x54 -#define opc_castore 0x55 -#define opc_sastore 0x56 -#define opc_pop 0x57 -#define opc_pop2 0x58 -#define opc_dup 0x59 -#define opc_dup_x1 0x5a -#define opc_dup_x2 0x5b -#define opc_dup2 0x5c -#define opc_dup2_x1 0x5d -#define opc_dup2_x2 0x5e -#define opc_swap 0x5f -#define opc_iadd 0x60 -#define opc_ladd 0x61 -#define opc_fadd 0x62 -#define opc_dadd 0x63 -#define opc_isub 0x64 -#define opc_lsub 0x65 -#define opc_fsub 0x66 -#define opc_dsub 0x67 -#define opc_imul 0x68 -#define opc_lmul 0x69 -#define opc_fmul 0x6a -#define opc_dmul 0x6b -#define opc_idiv 0x6c -#define opc_ldiv 0x6d -#define opc_fdiv 0x6e -#define opc_ddiv 0x6f -#define opc_irem 0x70 -#define opc_lrem 0x71 -#define opc_frem 0x72 -#define opc_drem 0x73 -#define opc_ineg 0x74 -#define opc_lneg 0x75 -#define opc_fneg 0x76 -#define opc_dneg 0x77 -#define opc_ishl 0x78 -#define opc_lshl 0x79 -#define opc_ishr 0x7a -#define opc_lshr 0x7b -#define opc_iushr 0x7c -#define opc_lushr 0x7d -#define opc_iand 0x7e -#define opc_land 0x7f -#define opc_ior 0x80 -#define opc_lor 0x81 -#define opc_ixor 0x82 -#define opc_lxor 0x83 -#define opc_iinc 0x84 -#define opc_i2l 0x85 -#define opc_i2f 0x86 -#define opc_i2d 0x87 -#define opc_l2i 0x88 -#define opc_l2f 0x89 -#define opc_l2d 0x8a -#define opc_f2i 0x8b -#define opc_f2l 0x8c -#define opc_f2d 0x8d -#define opc_d2i 0x8e -#define opc_d2l 0x8f -#define opc_d2f 0x90 -#define opc_i2b 0x91 -#define opc_i2c 0x92 -#define opc_i2s 0x93 -#define opc_lcmp 0x94 -#define opc_fcmpl 0x95 -#define opc_fcmpg 0x96 -#define opc_dcmpl 0x97 -#define opc_dcmpg 0x98 -#define opc_ifeq 0x99 -#define opc_ifne 0x9a -#define opc_iflt 0x9b -#define opc_ifge 0x9c -#define opc_ifgt 0x9d -#define opc_ifle 0x9e -#define opc_if_icmpeq 0x9f -#define opc_if_icmpne 0xa0 -#define opc_if_icmplt 0xa1 -#define opc_if_icmpge 0xa2 -#define opc_if_icmpgt 0xa3 -#define opc_if_icmple 0xa4 -#define opc_if_acmpeq 0xa5 -#define opc_if_acmpne 0xa6 -#define opc_goto 0xa7 -#define opc_jsr 0xa8 -#define opc_ret 0xa9 -#define opc_tableswitch 0xaa -#define opc_lookupswitch 0xab -#define opc_ireturn 0xac -#define opc_lreturn 0xad -#define opc_freturn 0xae -#define opc_dreturn 0xaf -#define opc_areturn 0xb0 -#define opc_return 0xb1 -#define opc_getstatic 0xb2 -#define opc_putstatic 0xb3 -#define opc_getfield 0xb4 -#define opc_putfield 0xb5 -#define opc_invokevirtual 0xb6 -#define opc_invokespecial 0xb7 -#define opc_invokestatic 0xb8 -#define opc_invokeinterface 0xb9 -#define opc_new 0xbb -#define opc_newarray 0xbc -#define opc_anewarray 0xbd -#define opc_arraylength 0xbe -#define opc_athrow 0xbf -#define opc_checkcast 0xc0 -#define opc_instanceof 0xc1 -#define opc_monitorenter 0xc2 -#define opc_monitorexit 0xc3 -#define opc_wide 0xc4 -#define opc_multianewarray 0xc5 -#define opc_ifnull 0xc6 -#define opc_ifnonnull 0xc7 -#define opc_goto_w 0xc8 -#define opc_jsr_w 0xc9 -#define opc_breakpoint 0xca -#define opc_bgetfield 0xcc -#define opc_cgetfield 0xcd -#define opc_igetfield 0xd0 -#define opc_lgetfield 0xd1 -#define opc_sgetfield 0xd2 -#define opc_aputfield 0xd3 -#define opc_bputfield 0xd4 -#define opc_cputfield 0xd5 -#define opc_iputfield 0xd8 -#define opc_lputfield 0xd9 -#define opc_iaccess_0 0xdb -#define opc_iaccess_1 0xdc -#define opc_iaccess_2 0xdd -#define opc_iaccess_3 0xde -#define opc_invokevfinal 0xe2 -#define opc_return_register_finalizer 0xe5 -#define opc_iload_0_iconst_N 0xe7 -#define opc_iload_1_iconst_N 0xe8 -#define opc_iload_2_iconst_N 0xe9 -#define opc_iload_3_iconst_N 0xea -#define opc_iload_iconst_N 0xeb -#define opc_invokeresolved 0xec -#define opc_iadd_istore_N 0xed -#define opc_isub_istore_N 0xee -#define opc_iand_istore_N 0xef -#define opc_ior_istore_N 0xf0 -#define opc_ixor_istore_N 0xf1 -#define opc_iadd_u4store 0xf2 -#define opc_isub_u4store 0xf3 -#define opc_iand_u4store 0xf4 -#define opc_ior_u4store 0xf5 -#define opc_ixor_u4store 0xf6 -#define opc_invokespecialresolved 0xf7 -#define opc_invokestaticresolved 0xf8 - -@----------------------------------------------------------------------------- - .macro nop jpc_off=0, seq_len=1 - DISPATCH \seq_len - .endm - - Opcode nop - nop -@----------------------------------------------------------------------------- - .macro u4const_0 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov lr, #0 - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode u4const_0 - u4const_0 -@----------------------------------------------------------------------------- - .macro iconst_N jpc_off=0, seq_len=1 - sub lr, r0, #opc_iconst_0 - DISPATCH_START \seq_len - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iconst_N - iconst_N -@----------------------------------------------------------------------------- - .macro u8const_0 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov tmp1, #0 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode u8const_0 - u8const_0 -@----------------------------------------------------------------------------- - .macro lconst_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov tmp2, #1 - DISPATCH_NEXT - mov tmp1, #0 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode lconst_1 - lconst_1 -@----------------------------------------------------------------------------- - .macro fconst_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov tmp1, #0x3f800000 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode fconst_1 - fconst_1 -@----------------------------------------------------------------------------- - .macro fconst_2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov r2, #0x40000000 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode fconst_2 - fconst_2 -@----------------------------------------------------------------------------- - .macro dconst_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - mov tmp1, #0x3f000000 - DISPATCH_NEXT - orr tmp1, tmp1, #0x00f00000 - DISPATCH_NEXT - mov tmp2, #0 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode dconst_1 - dconst_1 -@----------------------------------------------------------------------------- - .macro bipush jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - mov tmp1, r2, lsl #24 - DISPATCH_NEXT - mov tmp1, tmp1, asr #24 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode bipush - bipush -@----------------------------------------------------------------------------- - .macro sipush jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - mov tmp1, r1 - DISPATCH_NEXT - mov r2, r2, lsl #24 - DISPATCH_NEXT - orr tmp1, tmp1, r2, asr #16 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode sipush - sipush -@----------------------------------------------------------------------------- - .macro u4load jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode u4load - u4load -@----------------------------------------------------------------------------- - .macro u8load jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - sub r3, locals, r2, lsl #2 - DISPATCH_NEXT - ldmda r3, {tmp2, tmp1} - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode u8load - u8load -@----------------------------------------------------------------------------- - .macro aload_0 jpc_off=0, seq_len=1 - rsb tmp1, r0, #opc_aload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode aload_0 - aload_0 -@----------------------------------------------------------------------------- - .macro iload_0 jpc_off=0, seq_len=1 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0 - iload_0 -@----------------------------------------------------------------------------- - .macro fload_0 jpc_off=0, seq_len=1 - rsb tmp1, r0, #opc_fload_0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode fload_0 - fload_0 -@----------------------------------------------------------------------------- - .macro u8load_0 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldmda locals, {tmp2-tmp1} - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode u8load_0 - u8load_0 -@----------------------------------------------------------------------------- - .macro u8load_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldmdb locals, {tmp2-tmp1} - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode u8load_1 - u8load_1 -@----------------------------------------------------------------------------- - .macro u8load_2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldr tmp2, [locals, #-12] - DISPATCH_NEXT - ldr tmp1, [locals, #-8] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode u8load_2 - u8load_2 -@----------------------------------------------------------------------------- - .macro u8load_3 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldr tmp2, [locals, #-16] - DISPATCH_NEXT - ldr tmp1, [locals, #-12] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode u8load_3 - u8load_3 -@----------------------------------------------------------------------------- - .macro u4aload jpc_off=0, seq_len=1 - POP2 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 -.abortentry5: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - DISPATCH_NEXT - ldr tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode u4aload - u4aload -@----------------------------------------------------------------------------- - .macro u8aload jpc_off=0, seq_len=1 - POP2 r2, r3 - DISPATCH_START \seq_len -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_1 -#endif -.abortentry6: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #3 - ldr tmp2, [r3, #16] - DISPATCH_NEXT - ldr tmp1, [r3, #20] - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode u8aload - u8aload -@----------------------------------------------------------------------------- - .macro baload jpc_off=0, seq_len=1 - POP2 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 -.abortentry7: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - DISPATCH_NEXT - ldrsb tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode baload - baload -@----------------------------------------------------------------------------- - .macro caload jpc_off=0, seq_len=1 - POP2 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 -.abortentry8: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - DISPATCH_NEXT - ldrh tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode caload - caload -@----------------------------------------------------------------------------- - .macro saload jpc_off=0, seq_len=1 - POP2 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 -.abortentry9: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - DISPATCH_NEXT - ldrsh tmp1, [r3, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode saload - saload -@----------------------------------------------------------------------------- - .macro u4store jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - POP r3 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH - .endm - - Opcode u4store - u4store -@----------------------------------------------------------------------------- - .macro u8store jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub r3, locals, r2, lsl #2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmda r3, {tmp2, tmp1} - DISPATCH_FINISH - .endm - - Opcode u8store - u8store -@----------------------------------------------------------------------------- - .macro u4store_0 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #0] - DISPATCH_FINISH - .endm - - Opcode u4store_0 - u4store_0 -@----------------------------------------------------------------------------- - .macro u4store_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-4] - DISPATCH_FINISH - .endm - - Opcode u4store_1 - u4store_1 -@----------------------------------------------------------------------------- - .macro u4store_2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-8] - DISPATCH_FINISH - .endm - - Opcode u4store_2 - u4store_2 -@----------------------------------------------------------------------------- - .macro u4store_3 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-12] - DISPATCH_FINISH - .endm - - Opcode u4store_3 - u4store_3 -@----------------------------------------------------------------------------- - .macro u8store_0 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP2 tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmda locals, {tmp2, tmp1} - DISPATCH_FINISH - .endm - - Opcode u8store_0 - u8store_0 -@----------------------------------------------------------------------------- - .macro u8store_1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - DISPATCH_NEXT - POP2 tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - stmdb locals, {tmp2, tmp1} - DISPATCH_FINISH - .endm - - Opcode u8store_1 - u8store_1 -@----------------------------------------------------------------------------- - .macro u8store_2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - str tmp2, [locals, #-12] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-8] - DISPATCH_FINISH - .endm - - Opcode u8store_2 - u8store_2 -@----------------------------------------------------------------------------- - .macro u8store_3 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - str tmp2, [locals, #-16] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, #-12] - DISPATCH_FINISH - .endm - - Opcode u8store_3 - u8store_3 -@----------------------------------------------------------------------------- - .macro u4astore jpc_off=0, seq_len=1 - POP3 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 -.abortentry10: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2, lsl #2 - DISPATCH_NEXT - str r3, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode u4astore - u4astore -@----------------------------------------------------------------------------- - .macro u8astore jpc_off=0, seq_len=1 - POP4 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 -.abortentry11: - ldr ip, [tmp1, #8] @ ip = limit - cmp tmp2, ip - DISPATCH_NEXT - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2, lsl #3 - str r2, [tmp2, #16] - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [tmp2, #20] - DISPATCH_FINISH - .endm - - Opcode u8astore - u8astore -@----------------------------------------------------------------------------- - .macro bastore jpc_off=0, seq_len=1 - POP3 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 -.abortentry12: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2 - DISPATCH_NEXT - strb r3, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode bastore - bastore -@----------------------------------------------------------------------------- - .macro u2astore jpc_off=0, seq_len=1 - POP3 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 -.abortentry13: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp tmp2, lr - bcs array_bound_exception_jpc_1_tmp2 - DISPATCH_NEXT - add tmp1, tmp1, tmp2, lsl #1 - DISPATCH_NEXT - strh r3, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode u2astore - u2astore -@----------------------------------------------------------------------------- - .macro jpop jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - add stack, stack, #4 - DISPATCH_FINISH - .endm - - Opcode jpop - jpop -@----------------------------------------------------------------------------- - .macro jpop2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - add stack, stack, #8 - DISPATCH_FINISH - .endm - - Opcode jpop2 - jpop2 -@----------------------------------------------------------------------------- - .macro dup jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldr lr, [stack, #4] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode dup - dup -@----------------------------------------------------------------------------- - .macro dup_x1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode dup_x1 - dup_x1 -@----------------------------------------------------------------------------- - .macro dup_x2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH3 r2, r3, lr - DISPATCH_FINISH - .endm - - Opcode dup_x2 - dup_x2 -@----------------------------------------------------------------------------- - .macro dup2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - ldmib stack, {r2, r3} - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode dup2 - dup2 -@----------------------------------------------------------------------------- - .macro dup2_x1 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_NEXT - PUSH3 r2, r3, lr - DISPATCH_FINISH - .endm - - Opcode dup2_x1 - dup2_x1 -@----------------------------------------------------------------------------- - .macro dup2_x2 jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - PUSH2 r2, r3 - PUSH4 r2, r3, tmp1, lr - DISPATCH_FINISH - .endm - - Opcode dup2_x2 - dup2_x2 -@----------------------------------------------------------------------------- - .macro swap jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - PUSH r2 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode swap - swap -@----------------------------------------------------------------------------- - .macro iadd jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iadd - iadd -@----------------------------------------------------------------------------- - .macro ladd jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - adds r2, r2, tmp1 - adc r3, r3, lr - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode ladd - ladd -@----------------------------------------------------------------------------- - .macro fadd jpc_off=0, seq_len=1 - POP2 r0, r1 - bl __aeabi_fadd - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode fadd - fadd -@----------------------------------------------------------------------------- - .macro isub jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode isub - isub -@----------------------------------------------------------------------------- - .macro lsub jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - subs r2, tmp1, r2 - sbc r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode lsub - lsub -@----------------------------------------------------------------------------- - .macro fsub jpc_off=0, seq_len=1 - POP r1 - POP r0 - bl __aeabi_fsub - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode fsub - fsub -@----------------------------------------------------------------------------- - .macro imul jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, tmp1 - DISPATCH_NEXT - mul tmp2, r2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode imul - imul -@----------------------------------------------------------------------------- - .macro lmul jpc_off=0, seq_len=1 - POP4 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 - DISPATCH_FINISH - .endm - - Opcode lmul - lmul -@----------------------------------------------------------------------------- - .macro fmul jpc_off=0, seq_len=1 - POP2 r0, r1 - bl __aeabi_fmul - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode fmul - fmul -@----------------------------------------------------------------------------- - .macro ldiv jpc_off=0, seq_len=1 - POP2 r2, r3 - POP2 r0, r1 - orrs lr, r2, r3 - beq .ldiv_0 - bl __aeabi_ldivmod - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode ldiv - ldiv -@----------------------------------------------------------------------------- - .macro fdiv jpc_off=0, seq_len=1 - POP r1 - POP r0 - bl __aeabi_fdiv - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode fdiv - fdiv -@----------------------------------------------------------------------------- - .macro ddiv jpc_off=0, seq_len=1 - POP2 r2, r3 - POP2 r0, r1 - bl __aeabi_ddiv - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode ddiv - ddiv -@----------------------------------------------------------------------------- - .macro lrem jpc_off=0, seq_len=1 - POP2 r2, r3 - POP2 r0, r1 - orrs lr, r2, r3 - beq .lrem_0 - bl __aeabi_ldivmod - PUSH2 r2, r3 - DISPATCH \seq_len - .endm - - Opcode lrem - lrem -@----------------------------------------------------------------------------- - .macro frem jpc_off=0, seq_len=1 -@ ECN: It must be possible to do better than this - POP r0 - bl __aeabi_f2d - PUSH2 r0, r1 - GET_STACK 2, r0 - bl __aeabi_f2d - POP2 r2, r3 - bl fmod - bl __aeabi_d2f - PUT_STACK 0, r0 - DISPATCH \seq_len - .endm - - Opcode frem - frem -@----------------------------------------------------------------------------- - .macro drem jpc_off=0, seq_len=1 - POP2 r2, r3 - POP2 r0, r1 - bl fmod - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode drem - drem -@----------------------------------------------------------------------------- - .macro ineg jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP tmp1 - DISPATCH_NEXT - rsb tmp1, tmp1, #0 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode ineg - ineg -@----------------------------------------------------------------------------- - .macro lneg jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - rsbs r2, r2, #0 - rsc r3, r3, #0 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode lneg - lneg -@----------------------------------------------------------------------------- - .macro fneg jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - eor r2, r2, #0x80000000 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode fneg - fneg -@----------------------------------------------------------------------------- - .macro dneg jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - GET_STACK 1, r2 - DISPATCH_NEXT - eor r2, r2, #0x80000000 - DISPATCH_NEXT - PUT_STACK 1, r2 - DISPATCH_FINISH - .endm - - Opcode dneg - dneg -@----------------------------------------------------------------------------- - .macro ishl jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, lsl r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode ishl - ishl -@----------------------------------------------------------------------------- - .macro lshl jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP3 r2, r3, lr - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne tmp1, #0 - movne lr, r3, lsl r2 - moveq tmp1, r3, lsl r2 - moveq lr, lr, lsl r2 - rsbeq r2, r2, #32 - orreq lr, lr, r3, lsr r2 - PUSH2 tmp1, lr - DISPATCH_FINISH - .endm - - Opcode lshl - lshl -@----------------------------------------------------------------------------- - .macro ishr jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, asr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode ishr - ishr -@----------------------------------------------------------------------------- - .macro lshr jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne lr, tmp1, asr #31 - movne r3, tmp1, asr r2 - moveq lr, tmp1, asr r2 - moveq r3, r3, lsr r2 - rsbeq r2, r2, #32 - orreq r3, r3, tmp1, lsl r2 - PUSH2 r3, lr - DISPATCH_FINISH - .endm - - Opcode lshr - lshr -@----------------------------------------------------------------------------- - .macro iushr jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 r2, r3 - DISPATCH_NEXT - and r2, r2, #31 - mov r2, r3, lsr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iushr - iushr -@----------------------------------------------------------------------------- - .macro lushr jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - tst r2, #32 - and r2, r2, #31 - movne lr, #0 - movne r3, tmp1, lsr r2 - moveq lr, tmp1, lsr r2 - moveq r3, r3, lsr r2 - rsbeq r2, r2, #32 - orreq r3, r3, tmp1, lsl r2 - PUSH2 r3, lr - DISPATCH_FINISH - .endm - - Opcode lushr - lushr -@----------------------------------------------------------------------------- - .macro iand jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iand - iand -@----------------------------------------------------------------------------- - .macro land jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - and r2, tmp1, r2 - and r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode land - land -@----------------------------------------------------------------------------- - .macro ior jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ior - ior -@----------------------------------------------------------------------------- - .macro lor jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - orr r2, tmp1, r2 - orr r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode lor - lor -@----------------------------------------------------------------------------- - .macro ixor jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ixor - ixor -@----------------------------------------------------------------------------- - .macro lxor jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP4 r2, r3, tmp1, lr - DISPATCH_NEXT - eor r2, tmp1, r2 - eor r3, lr, r3 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode lxor - lxor -@----------------------------------------------------------------------------- - .macro iinc jpc_off=0, seq_len=3 - ldrsb lr, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp1, r2, #0 - DISPATCH_NEXT - ldr r3, [locals, tmp1, lsl #2] - DISPATCH_NEXT - add r3, r3, lr - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iinc - iinc -@----------------------------------------------------------------------------- - .macro i2l jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - mov r3, r2, asr #31 - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode i2l - i2l -@----------------------------------------------------------------------------- - .macro i2f jpc_off=0, seq_len=1 - POP r0 - bl __aeabi_i2f - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode i2f - i2f -@----------------------------------------------------------------------------- - .macro i2d jpc_off=0, seq_len=1 - POP r0 - bl __aeabi_i2d - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode i2d - i2d -@----------------------------------------------------------------------------- - .macro l2i jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - PUT_STACK 0, r3 - DISPATCH_FINISH - .endm - - Opcode l2i - l2i -@----------------------------------------------------------------------------- - .macro l2f jpc_off=0, seq_len=1 - POP2 r0, r1 - bl __aeabi_l2f - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode l2f - l2f -@----------------------------------------------------------------------------- - .macro l2d jpc_off=0, seq_len=1 - POP2 r0, r1 - bl __aeabi_l2d - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode l2d - l2d -@----------------------------------------------------------------------------- - .macro f2i jpc_off=0, seq_len=1 - POP r0 - bl _ZN13SharedRuntime3f2iEf - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode f2i - f2i -@----------------------------------------------------------------------------- - .macro f2l jpc_off=0, seq_len=1 - POP r0 - bl _ZN13SharedRuntime3f2lEf - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode f2l - f2l -@----------------------------------------------------------------------------- - .macro f2d jpc_off=0, seq_len=1 - POP r0 - bl __aeabi_f2d - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode f2d - f2d -@----------------------------------------------------------------------------- - .macro d2i jpc_off=0, seq_len=1 - POP2 r0, r1 - bl _ZN13SharedRuntime3d2iEd - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode d2i - d2i -@----------------------------------------------------------------------------- - .macro d2l jpc_off=0, seq_len=1 - POP2 r0, r1 - bl _ZN13SharedRuntime3d2lEd - PUSH2 r0, r1 - DISPATCH \seq_len - .endm - - Opcode d2l - d2l -@----------------------------------------------------------------------------- - .macro d2f jpc_off=0, seq_len=1 - POP2 r0, r1 - bl __aeabi_d2f - PUSH r0 - DISPATCH \seq_len - .endm - - Opcode d2f - d2f -@----------------------------------------------------------------------------- - .macro i2b jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #24 - mov r3, r3, asr #24 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode i2b - i2b -@----------------------------------------------------------------------------- - .macro i2c jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #16 - mov r3, r3, lsr #16 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode i2c - i2c -@----------------------------------------------------------------------------- - .macro i2s jpc_off=0, seq_len=1 - DISPATCH_START \seq_len - POP r3 - DISPATCH_NEXT - mov r3, r3, asl #16 - mov r3, r3, asr #16 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode i2s - i2s -@----------------------------------------------------------------------------- - .macro lcmp jpc_off=0, seq_len=1 - POP4 r2, r3, tmp1, lr - DISPATCH_START \seq_len - subs r2, tmp1, r2 - movne r2, #1 - sbcs lr, lr, r3 - DISPATCH_NEXT - movne r2, #1 - rsblt r2, r2, #0 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode lcmp - lcmp -@----------------------------------------------------------------------------- - .macro fcmpl jpc_off=0, seq_len=1 - 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 - .endm - - Opcode fcmpl - fcmpl -@----------------------------------------------------------------------------- - .macro fcmpg jpc_off=0, seq_len=1 - 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 - .endm - - Opcode fcmpg - fcmpg -@----------------------------------------------------------------------------- - .macro dcmpl jpc_off=0, seq_len=1 - 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 - .endm - - Opcode dcmpl - dcmpl -@----------------------------------------------------------------------------- - .macro dcmpg jpc_off=0, seq_len=1 - 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 - .endm - - Opcode dcmpg - dcmpg -@----------------------------------------------------------------------------- - .macro ifeq_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ifeq_unsafe - ifeq_unsafe -@----------------------------------------------------------------------------- - .macro ifne_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ifne_unsafe - ifne_unsafe -@----------------------------------------------------------------------------- - .macro iflt_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iflt_unsafe - iflt_unsafe -@----------------------------------------------------------------------------- - .macro ifge_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ifge_unsafe - ifge_unsafe -@----------------------------------------------------------------------------- - .macro ifgt_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ifgt_unsafe - ifgt_unsafe -@----------------------------------------------------------------------------- - .macro ifle_unsafe jpc_off=0, seq_len=0 - POP r3 - mov r2, r2, lsl #24 - cmp r3, #0 - orr ip, r1, r2, asr #16 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ifle_unsafe - ifle_unsafe -@----------------------------------------------------------------------------- - .macro if_icmpeq_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmpeq_unsafe - if_icmpeq_unsafe -@----------------------------------------------------------------------------- - .macro if_icmpne_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmpne_unsafe - if_icmpne_unsafe -@----------------------------------------------------------------------------- - .macro if_icmplt_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmplt_unsafe - if_icmplt_unsafe -@----------------------------------------------------------------------------- - .macro if_icmpge_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmpge_unsafe - if_icmpge_unsafe -@----------------------------------------------------------------------------- - .macro if_icmpgt_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmpgt_unsafe - if_icmpgt_unsafe -@----------------------------------------------------------------------------- - .macro if_icmple_unsafe jpc_off=0, seq_len=0 - POP2 r3, tmp1 - mov r2, r2, lsl #24 - cmp tmp1, r3 - orr ip, r1, r2, asr #16 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode if_icmple_unsafe - if_icmple_unsafe -@----------------------------------------------------------------------------- - .macro goto_unsafe jpc_off=0, seq_len=0 - mov r2, r2, lsl #24 - orr ip, r1, r2, asr #16 - DISPATCH_START_REG ip - DISPATCH_BYTECODE - .endm - - Opcode goto_unsafe - goto_unsafe -@----------------------------------------------------------------------------- - .macro jsr jpc_off=0, seq_len=0 - ldr r3, [istate, #ISTATE_METHOD] - ldr r1, [r3, #8] - rsb r2, r1, jpc - sub r2, r2, #45 - PUSH r2 - b do_goto_safe - .endm - - Opcode jsr - jsr -@----------------------------------------------------------------------------- - .macro ret jpc_off=0, seq_len=0 - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r0, #8] - ldr r1, [locals, -r2, lsl #2] - add jpc, r3, r1 - DISPATCH 48 - .endm - - Opcode ret - ret -@----------------------------------------------------------------------------- - .macro tableswitch jpc_off=0, seq_len=0 - POP a2 - bic a1, jpc, #3 - ldr a4,[a1,#8] -@ BYTESEX_REVERSE a3, a4, a3 - - eor a3, a4, a4, ror #16 - bic a3, a3, #0xff0000 - mov a4, a4, ror #8 - eor a3, a4, a3, lsr #8 - - ldr a4,[a1,#12] -@ BYTESEX_REVERSE a4, a4, ip - - eor ip, a4, a4, ror #16 - bic ip, ip, #0xff0000 - mov a4, a4, ror #8 - eor a4, a4, ip, lsr #8 - - sub a2,a2,a3 - sub a4,a4,a3 - cmp a4,a2 - ldrcc a1,[a1,#4] - addcs a1,a1,a2,LSL #2 - ldrcs a1,[a1,#16] -@ BYTESEX_REVERSE a1, a1, a4 - - eor a4, a1, a1, ror #16 - bic a4, a4, #0xff0000 - mov a1, a1, ror #8 - eors ip, a1, a4, lsr #8 - - DISPATCH_START_REG ip - DISPATCH_BYTECODE - .endm - - Opcode tableswitch - tableswitch -@----------------------------------------------------------------------------- - .macro lookupswitch jpc_off=0, seq_len=0 - POP a2 - bic a1, jpc, #3 -@ BYTESEX_REVERSE a2, a2, ip - - eor ip, a2, a2, ror #16 - bic ip, ip, #0xff0000 - mov a2, a2, ror #8 - eor a2, a2, ip, lsr #8 - - ldr a3,[a1,#8] -@ BYTESEX_REVERSE a3, a3, ip - - eor ip, a3, a3, ror #16 - bic ip, ip, #0xff0000 - mov a3, a3, ror #8 - eor a3, a3, ip, lsr #8 - - subs a4,a3,#1 - bmi 1f - add a1, a1, #4 -0: - ldr a3,[a1,#8]! - cmp a3,a2 - beq 2f - subs a4,a4,#1 - bpl 0b -1: - bic a1, jpc, #3 -2: - ldr a2,[a1,#4] -@ BYTESEX_REVERSE a2, a2, ip - - eor ip, a2, a2, ror #16 - bic ip, ip, #0xff0000 - mov a2, a2, ror #8 - eors ip, a2, ip, lsr #8 - - DISPATCH_START_REG ip - DISPATCH_BYTECODE - .endm - - Opcode lookupswitch - lookupswitch -@----------------------------------------------------------------------------- - .macro igetfield jpc_off=0, seq_len=3 - 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] - DISPATCH_NEXT -.abortentry78: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode igetfield - igetfield -@----------------------------------------------------------------------------- - .macro bgetfield jpc_off=0, seq_len=3 - 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] - DISPATCH_NEXT -.abortentry79: - ldrsb tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode bgetfield - bgetfield -@----------------------------------------------------------------------------- - .macro cgetfield jpc_off=0, seq_len=3 - 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] - DISPATCH_NEXT -.abortentry80: - ldrh tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode cgetfield - cgetfield -@----------------------------------------------------------------------------- - .macro sgetfield jpc_off=0, seq_len=3 - 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] - DISPATCH_NEXT -.abortentry81: - ldrsh tmp2, [tmp1, tmp2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode sgetfield - sgetfield -@----------------------------------------------------------------------------- - .macro lgetfield jpc_off=0, seq_len=3 - 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] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT -.abortentry82: - ldmia tmp2, {tmp2, tmp1} - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode lgetfield - lgetfield -@----------------------------------------------------------------------------- - .macro iputfield jpc_off=0, seq_len=3 - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry83: - str r3, [tmp1, tmp2] - DISPATCH_FINISH - .endm - - Opcode iputfield - iputfield -@----------------------------------------------------------------------------- - .macro cputfield jpc_off=0, seq_len=3 - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry84: - strh r3, [tmp1, tmp2] - DISPATCH_FINISH - .endm - - Opcode cputfield - cputfield -@----------------------------------------------------------------------------- - .macro bputfield jpc_off=0, seq_len=3 - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP2 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] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry85: - strb r3, [tmp1, tmp2] - DISPATCH_FINISH - .endm - - Opcode bputfield - bputfield -@----------------------------------------------------------------------------- - .macro aputfield jpc_off=0, seq_len=3 - 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 - bl oop_store - ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] - DISPATCH_START 3 - POP r2 - ldr r3, [r3, #0] - DISPATCH_NEXT - ldr r3, [r3, #12] - DISPATCH_NEXT - ldr r3, [r3, #76] - mov tmp2, #0 - strb tmp2, [r3, r2, lsr #9] - DISPATCH_FINISH - .endm - - Opcode aputfield - aputfield -@----------------------------------------------------------------------------- - .macro lputfield jpc_off=0, seq_len=3 - DISPATCH_START 3 - add tmp2, constpool, r1, lsl #12 - POP3 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] - DISPATCH_NEXT - add tmp2, lr, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT -.abortentry86: - stm tmp2, {r3, tmp1} - DISPATCH_FINISH - .endm - - Opcode lputfield - lputfield -@----------------------------------------------------------------------------- - .macro getstatic jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - add tmp2, constpool, r1, lsl #12 - ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags - DISPATCH_NEXT - and r3, r3, #0x00ff0000 - cmp r3, #178 << 16 - bne resolve_getstatic - ldr r3, [tmp2, #4] - ldr r2, [tmp2, #12] - ldr lr, [tmp2, #8] - movs r2, r2, lsr #29 - bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 - bcs getstatic_h @ C = 1 => R2 = 1 - beq getstatic_sb @ Z = 1 => R2 = 0 - tst r2, #2 - bne getstatic_dw - b getstatic_sh - .endm - - Opcode getstatic - getstatic -@----------------------------------------------------------------------------- - .macro putstatic jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - add tmp2, constpool, r1, lsl #12 - ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags - DISPATCH_NEXT - 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 - movs lr, lr, lsr #29 - bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 - bcs putstatic_h @ C = 1 => R2 = 1 - beq putstatic_sb @ Z = 1 => R2 = 0 - tst lr, #2 - bne putstatic_dw - b putstatic_sh - .endm - - Opcode putstatic - putstatic -@----------------------------------------------------------------------------- - .macro return_unsafe jpc_off=0, seq_len=0 - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r2, #0] - ldrh r0, [r0, #40] - add r1, r2, #4 - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - add stack, r1, r0, lsl #2 - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT - add r2, r2, #4 - DISPATCH_NEXT - 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] - DISPATCH_NEXT - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b - .endm - - Opcode return_unsafe - return_unsafe -@----------------------------------------------------------------------------- - .macro ireturn_unsafe jpc_off=0, seq_len=0 - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - POP r1 @ pop result before we lose stack - - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b - .endm - - Opcode ireturn_unsafe - ireturn_unsafe -@----------------------------------------------------------------------------- - .macro lreturn_unsafe jpc_off=0, seq_len=0 - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - - ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [r2, #0] - ldrh r0, [r0, #40] - add r1, r2, #4 - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - - POP2 r2, r3 - - add stack, r1, r0, lsl #2 - stmdb stack!, {r2, r3} - cmp istate, #0 - beq normal_return - - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT - add r2, r2, #4 - DISPATCH_NEXT - 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] - DISPATCH_NEXT - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - bl return_check_monitors - b 2b - .endm - - Opcode lreturn_unsafe - lreturn_unsafe -@----------------------------------------------------------------------------- - .macro ldc jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - ldr r3, [istate, #ISTATE_METHOD] @ method - - DISPATCH_START \seq_len - - ldr r2, [r3, #12] @ constants - ldr r3, [r2, #8] - add r3, r3, #12 - ldrb r3, [r3, lr] - - 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 - DISPATCH_FINISH -1: - cmp r3, #JVM_CONSTANT_Class - bne 2f - add r0, r2, #32 - ldr r0, [r0, lr, lsl #2] - ldr r1, [r0, #60] - PUSH r1 - DISPATCH 0 -2: - sub jpc, jpc, #\seq_len - ldr r0, [istate, #ISTATE_THREAD] - str jpc, [istate, #ISTATE_BCP] - str stack, [istate, #ISTATE_STACK] - mov r1, #0 - bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb - ldr r0, [istate, #ISTATE_THREAD] @ thread - ldr stack, [istate, #ISTATE_STACK] - ldr constpool, [istate, #ISTATE_CONSTANTS] - ldr r1, [r0, #THREAD_PENDING_EXC] - ldr jpc, [istate, #ISTATE_BCP] - add constpool, constpool, #CONST_POOL_OFFSET - cmp r1, #0 - ldr locals, [istate, #ISTATE_LOCALS] - bne handle_exception - ldr r3, [r0, #THREAD_VM_RESULT] - mov r2, #0 - PUSH r3 - str r2, [r0, #THREAD_VM_RESULT] - DISPATCH \seq_len - .endm - - Opcode ldc - ldc -@----------------------------------------------------------------------------- - .macro ldc_w jpc_off=0, seq_len=3 - ldrb lr, [jpc, #1] - - ldr r3, [istate, #ISTATE_METHOD] @ method - ldrb ip, [jpc, #2] - ldr r2, [r3, #12] @ constants - - DISPATCH_START \seq_len - - ldr r3, [r2, #8] - orr lr, ip, lr, lsl #8 - add r3, r3, #12 - ldrb r3, [r3, lr] - - 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 - DISPATCH_FINISH -1: - cmp r3, #JVM_CONSTANT_Class - bne 2f - add r0, r2, #32 - ldr r0, [r0, lr, lsl #2] - ldr r1, [r0, #60] - PUSH r1 - DISPATCH 0 -2: - sub jpc, jpc, #\seq_len - ldr r0, [istate, #ISTATE_THREAD] - str jpc, [istate, #ISTATE_BCP] - str stack, [istate, #ISTATE_STACK] - mov r1, #1 - bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb - ldr r0, [istate, #ISTATE_THREAD] @ thread - ldr stack, [istate, #ISTATE_STACK] - ldr constpool, [istate, #ISTATE_CONSTANTS] - ldr r1, [r0, #THREAD_PENDING_EXC] - ldr jpc, [istate, #ISTATE_BCP] - add constpool, constpool, #CONST_POOL_OFFSET - cmp r1, #0 - ldr locals, [istate, #ISTATE_LOCALS] - bne handle_exception - ldr r3, [r0, #THREAD_VM_RESULT] - mov r2, #0 - PUSH r3 - str r2, [r0, #THREAD_VM_RESULT] - DISPATCH \seq_len - .endm - - Opcode ldc_w - ldc_w -@----------------------------------------------------------------------------- - .macro ldc2_w jpc_off=0, seq_len=3 - ldrb r3, [jpc, #1] - - ldr tmp1, [istate, #ISTATE_METHOD] @ method - ldrb lr, [jpc, #2] - ldr r2, [tmp1, #12] @ constants - - DISPATCH_START \seq_len - - ldr tmp1, [r2, #8] - orr r3, lr, r3, lsl #8 - add tmp1, tmp1, #12 - ldrb tmp1, [tmp1, r3] - - 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 - DISPATCH_FINISH - .endm - - Opcode ldc2_w - ldc2_w -@----------------------------------------------------------------------------- - .macro iadd_u4store jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iadd_u4store - iadd_u4store -@----------------------------------------------------------------------------- - .macro isub_u4store jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode isub_u4store - isub_u4store -@----------------------------------------------------------------------------- - .macro iand_u4store jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iand_u4store - iand_u4store -@----------------------------------------------------------------------------- - .macro ior_u4store jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ior_u4store - ior_u4store -@----------------------------------------------------------------------------- - .macro ixor_u4store jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ixor_u4store - ixor_u4store -@----------------------------------------------------------------------------- - .macro iadd_istore_N jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iadd_istore_N - iadd_istore_N -@----------------------------------------------------------------------------- - .macro isub_istore_N jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode isub_istore_N - isub_istore_N -@----------------------------------------------------------------------------- - .macro iand_istore_N jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iand_istore_N - iand_istore_N -@----------------------------------------------------------------------------- - .macro ior_istore_N jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ior_istore_N - ior_istore_N -@----------------------------------------------------------------------------- - .macro ixor_istore_N jpc_off=0, seq_len=2 - ldrb lr, [jpc, #1] - DISPATCH_START \seq_len - DISPATCH_NEXT - rsb r3, lr, #opc_istore_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - str tmp2, [locals, r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ixor_istore_N - ixor_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - rsb r2, r2, #0 - DISPATCH_NEXT - sub r3, r3, #opc_iconst_0 - ldr tmp1, [locals, r2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N - iload_iconst_N -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N jpc_off=0, seq_len=2 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr tmp1, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp2, r2, #opc_iconst_0 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N - iload_0_iconst_N -@----------------------------------------------------------------------------- - .macro iaccess_0 jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb r3, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 4 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry87: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iaccess_0 - iaccess_0 -@----------------------------------------------------------------------------- - .macro aload_0_aload_0 jpc_off=0, seq_len=2 - rsb tmp1, r0, #opc_aload_0 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_aload_0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode aload_0_aload_0 - aload_0_aload_0 -@----------------------------------------------------------------------------- - .macro aload_0_iload_0 jpc_off=0, seq_len=2 - 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 - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode aload_0_iload_0 - aload_0_iload_0 -@----------------------------------------------------------------------------- - .macro iload_0_aload_0 jpc_off=0, seq_len=2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_aload_0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_aload_0 - iload_0_aload_0 -@----------------------------------------------------------------------------- - .macro iload_0_iload_0 jpc_off=0, seq_len=2 - rsb tmp1, r0, #opc_iload_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 - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_iload_0 - iload_0_iload_0 -@----------------------------------------------------------------------------- - .macro aload_0_iload jpc_off=0, seq_len=3 - 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 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - DISPATCH_FINISH - .endm - - Opcode aload_0_iload - aload_0_iload -@----------------------------------------------------------------------------- - .macro iload_0_iload jpc_off=0, seq_len=3 - 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 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_iload - iload_0_iload -@----------------------------------------------------------------------------- - .macro iload_aload_0 jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_aload_0 - DISPATCH_NEXT - rsb tmp1, r2, #0 - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_aload_0 - iload_aload_0 -@----------------------------------------------------------------------------- - .macro iload_iload_0 jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - 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 - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_iload_0 - iload_iload_0 -@----------------------------------------------------------------------------- - .macro iload_iload jpc_off=0, seq_len=4 - ldrb tmp2, [jpc, #3] - rsb tmp1, r2, #0 - DISPATCH_START \seq_len - rsb tmp2, tmp2, #0 - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 tmp2, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_iload - iload_iload -@----------------------------------------------------------------------------- - .macro aload_0_astore_0 jpc_off=0, seq_len=2 - rsb tmp1, r0, #opc_aload_0 - DISPATCH_START \seq_len - rsb tmp2, r1, #opc_astore_0 - DISPATCH_NEXT - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - str tmp1, [locals, tmp2, lsl #2] - DISPATCH_FINISH - .endm - - Opcode aload_0_astore_0 - aload_0_astore_0 -@----------------------------------------------------------------------------- - .macro iload_0_istore_0 jpc_off=0, seq_len=2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - 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 - .endm - - Opcode iload_0_istore_0 - iload_0_istore_0 -@----------------------------------------------------------------------------- - .macro aload_0_astore jpc_off=0, seq_len=3 - 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 - .endm - - Opcode aload_0_astore - aload_0_astore -@----------------------------------------------------------------------------- - .macro iload_0_astore jpc_off=0, seq_len=3 - 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 - .endm - - Opcode iload_0_astore - iload_0_astore -@----------------------------------------------------------------------------- - .macro iload_astore_0 jpc_off=0, seq_len=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 - .endm - - Opcode iload_astore_0 - iload_astore_0 -@----------------------------------------------------------------------------- - .macro iload_istore_0 jpc_off=0, seq_len=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 - .endm - - Opcode iload_istore_0 - iload_istore_0 -@----------------------------------------------------------------------------- - .macro iload_astore jpc_off=0, seq_len=4 - 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 - .endm - - Opcode iload_astore - iload_astore -@----------------------------------------------------------------------------- - .macro aload_0_iconst_m1 jpc_off=0, seq_len=2 - 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 - .endm - - Opcode aload_0_iconst_m1 - aload_0_iconst_m1 -@----------------------------------------------------------------------------- - .macro iload_0_iconst_m1 jpc_off=0, seq_len=2 - add r0, r0, #opc_iload_0_iconst_N-opc_iload_0 - strb r0, [jpc] - b do_iload_0_iconst_N - .endm - - Opcode iload_0_iconst_m1 - iload_0_iconst_m1 -@----------------------------------------------------------------------------- - .macro iload_iconst_m1 jpc_off=0, seq_len=3 - 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 - PUSH2 r3, tmp2 - DISPATCH_FINISH -1: - mov tmp1, #opc_iload_iconst_N - strb tmp1, [jpc, #-\seq_len]! - b do_iload_iconst_N - .endm - - Opcode iload_iconst_m1 - iload_iconst_m1 -@----------------------------------------------------------------------------- - .macro aload_0_bipush jpc_off=0, seq_len=3 - ldrsb r2, [jpc, #2] - rsb r3, r0, #opc_aload_0 - DISPATCH_START \seq_len - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode aload_0_bipush - aload_0_bipush -@----------------------------------------------------------------------------- - .macro iload_0_bipush jpc_off=0, seq_len=3 - ldrsb r2, [jpc, #2] - rsb r3, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_bipush - iload_0_bipush -@----------------------------------------------------------------------------- - .macro aload_0_sipush jpc_off=0, seq_len=4 - 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 - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode aload_0_sipush - aload_0_sipush -@----------------------------------------------------------------------------- - .macro iload_0_sipush jpc_off=0, seq_len=4 - 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 - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_sipush - iload_0_sipush -@----------------------------------------------------------------------------- - .macro iload_bipush jpc_off=0, seq_len=4 - ldrsb r3, [jpc, #3] - DISPATCH_START \seq_len - ldr lr, [locals, -r2, lsl #2] - DISPATCH_NEXT - PUSH2 r3, lr - DISPATCH_FINISH - .endm - - Opcode iload_bipush - iload_bipush -@----------------------------------------------------------------------------- - .macro iload_sipush jpc_off=0, seq_len=5 - 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 - PUSH2 r3, tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_sipush - iload_sipush -@----------------------------------------------------------------------------- - .macro iload_0_iaload jpc_off=0, seq_len=2 - POP r3 - 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 -.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 - .endm - - Opcode iload_0_iaload - iload_0_iaload -@----------------------------------------------------------------------------- - .macro iload_iaload jpc_off=0, seq_len=3 - 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 -.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 - .endm - - Opcode iload_iaload - iload_iaload -@----------------------------------------------------------------------------- - .macro iload_0_baload jpc_off=0, seq_len=2 - POP r3 - 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 -.abortentry21: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2 - ldrsb lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_baload - iload_0_baload -@----------------------------------------------------------------------------- - .macro iload_0_caload jpc_off=0, seq_len=2 - POP r3 - 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 -.abortentry22: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_caload - iload_0_caload -@----------------------------------------------------------------------------- - .macro iload_0_saload jpc_off=0, seq_len=2 - POP r3 - 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 -.abortentry23: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrsh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_saload - iload_0_saload -@----------------------------------------------------------------------------- - .macro iload_baload jpc_off=0, seq_len=3 - 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 -.abortentry24: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2 - ldrsb lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_baload - iload_baload -@----------------------------------------------------------------------------- - .macro iload_caload jpc_off=0, seq_len=3 - 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 -.abortentry25: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_caload - iload_caload -@----------------------------------------------------------------------------- - .macro iload_saload jpc_off=0, seq_len=3 - 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 -.abortentry26: - ldr lr, [r3, #8] @ lr = length - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - add r3, r3, r2, lsl #1 - ldrsh lr, [r3, #12] - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_saload - iload_saload -@----------------------------------------------------------------------------- - .macro iload_0_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry27: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iload_0_iastore - iload_0_iastore -@----------------------------------------------------------------------------- - .macro iload_0_bastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry28: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - strb tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iload_0_bastore - iload_0_bastore -@----------------------------------------------------------------------------- - .macro iload_0_castore jpc_off=0, seq_len=2 - POP2 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 -.abortentry29: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - strh tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iload_0_castore - iload_0_castore -@----------------------------------------------------------------------------- - .macro iload_iastore jpc_off=0, seq_len=3 - POP2 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 -.abortentry30: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3, lsl #2 - str r2, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode iload_iastore - iload_iastore -@----------------------------------------------------------------------------- - .macro iload_bastore jpc_off=0, seq_len=3 - POP2 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 -.abortentry31: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3 - strb r2, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode iload_bastore - iload_bastore -@----------------------------------------------------------------------------- - .macro iload_castore jpc_off=0, seq_len=3 - POP2 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 -.abortentry32: - ldr lr, [tmp1, #8] @ lr = limit - DISPATCH_NEXT - cmp r3, lr - bcs array_bound_exception_jpc_1_r3 - DISPATCH_NEXT - add tmp1, tmp1, r3, lsl #1 - strh r2, [tmp1, #12] - DISPATCH_FINISH - .endm - - Opcode iload_castore - iload_castore -@----------------------------------------------------------------------------- - .macro iload_0_iadd jpc_off=0, seq_len=2 - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - add tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_iadd - iload_0_iadd -@----------------------------------------------------------------------------- - .macro iload_iadd jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_iadd - iload_iadd -@----------------------------------------------------------------------------- - .macro iload_0_isub jpc_off=0, seq_len=2 - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - sub tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_isub - iload_0_isub -@----------------------------------------------------------------------------- - .macro iload_isub jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_isub - iload_isub -@----------------------------------------------------------------------------- - .macro iload_0_imul jpc_off=0, seq_len=2 - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mul r3, r2, lr - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_imul - iload_0_imul -@----------------------------------------------------------------------------- - .macro iload_imul jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mul lr, r3, r2 - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_imul - iload_imul -@----------------------------------------------------------------------------- - .macro iload_0_idiv jpc_off=0, seq_len=2 - rsb r0, r0, #opc_iload_0 - ldr r0, [locals, r0, lsl #2] - add jpc, jpc, #1 - POP r1 - b int_div - .endm - - Opcode iload_0_idiv - iload_0_idiv -@----------------------------------------------------------------------------- - .macro iload_idiv jpc_off=0, seq_len=3 - add jpc, jpc, #2 - POP r1 - ldr r0, [locals, -r2, lsl #2] - b int_div - .endm - - Opcode iload_idiv - iload_idiv -@----------------------------------------------------------------------------- - .macro iload_0_irem jpc_off=0, seq_len=2 - rsb r0, r0, #opc_iload_0 - ldr r0, [locals, r0, lsl #2] - add jpc, jpc, #1 - POP r1 - b int_rem - .endm - - Opcode iload_0_irem - iload_0_irem -@----------------------------------------------------------------------------- - .macro iload_irem jpc_off=0, seq_len=3 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - POP r1 - b int_rem - .endm - - Opcode iload_irem - iload_irem -@----------------------------------------------------------------------------- - .macro iload_0_ineg jpc_off=0, seq_len=2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - rsb lr, lr, #0 - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_ineg - iload_0_ineg -@----------------------------------------------------------------------------- - .macro iload_ineg jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - rsb r2, r2, #0 - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iload_ineg - iload_ineg -@----------------------------------------------------------------------------- - .macro iload_0_ishl jpc_off=0, seq_len=2 - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, lsl lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_ishl - iload_0_ishl -@----------------------------------------------------------------------------- - .macro iload_ishl jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, lsl r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iload_ishl - iload_ishl -@----------------------------------------------------------------------------- - .macro iload_0_ishr jpc_off=0, seq_len=2 - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, asr lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_ishr - iload_0_ishr -@----------------------------------------------------------------------------- - .macro iload_ishr jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, asr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iload_ishr - iload_ishr -@----------------------------------------------------------------------------- - .macro iload_0_iushr jpc_off=0, seq_len=2 - POP r2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, r2, lsr lr - DISPATCH_NEXT - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_iushr - iload_0_iushr -@----------------------------------------------------------------------------- - .macro iload_iushr jpc_off=0, seq_len=3 - ldrb r2, [jpc, #1] - DISPATCH_START \seq_len - POP r3 - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r3, lsr r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iload_iushr - iload_iushr -@----------------------------------------------------------------------------- - .macro iload_0_iand jpc_off=0, seq_len=2 - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - and tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_iand - iload_0_iand -@----------------------------------------------------------------------------- - .macro iload_iand jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_iand - iload_iand -@----------------------------------------------------------------------------- - .macro iload_0_ior jpc_off=0, seq_len=2 - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - orr tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_ior - iload_0_ior -@----------------------------------------------------------------------------- - .macro iload_ior jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_ior - iload_ior -@----------------------------------------------------------------------------- - .macro iload_0_ixor jpc_off=0, seq_len=2 - POP tmp2 - rsb tmp1, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr tmp1, [locals, tmp1, lsl #2] - DISPATCH_NEXT - eor tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iload_0_ixor - iload_0_ixor -@----------------------------------------------------------------------------- - .macro iload_ixor jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - POP tmp1 - DISPATCH_NEXT - ldr tmp2, [locals, tmp2, lsl #2] - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_ixor - iload_ixor -@----------------------------------------------------------------------------- - .macro iload_0_i2c jpc_off=0, seq_len=2 - rsb lr, r0, #opc_iload_0 - DISPATCH_START \seq_len - ldr lr, [locals, lr, lsl #2] - DISPATCH_NEXT - mov lr, lr, asl #16 - mov lr, lr, lsr #16 - PUSH lr - DISPATCH_FINISH - .endm - - Opcode iload_0_i2c - iload_0_i2c -@----------------------------------------------------------------------------- - .macro iload_i2c jpc_off=0, seq_len=3 - DISPATCH_START \seq_len - ldr r2, [locals, -r2, lsl #2] - DISPATCH_NEXT - mov r2, r2, asl #16 - mov r2, r2, lsr #16 - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iload_i2c - iload_i2c -@----------------------------------------------------------------------------- - .macro iload_0_ifeq jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_ifeq - iload_0_ifeq -@----------------------------------------------------------------------------- - .macro iload_ifeq jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_ifeq - iload_ifeq -@----------------------------------------------------------------------------- - .macro iload_0_ifne jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_ifne - iload_0_ifne -@----------------------------------------------------------------------------- - .macro iload_ifne jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_ifne - iload_ifne -@----------------------------------------------------------------------------- - .macro iload_0_iflt jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_iflt - iload_0_iflt -@----------------------------------------------------------------------------- - .macro iload_iflt jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_iflt - iload_iflt -@----------------------------------------------------------------------------- - .macro iload_0_ifge jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_ifge - iload_0_ifge -@----------------------------------------------------------------------------- - .macro iload_ifge jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_ifge - iload_ifge -@----------------------------------------------------------------------------- - .macro iload_0_ifgt jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_ifgt - iload_0_ifgt -@----------------------------------------------------------------------------- - .macro iload_ifgt jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_ifgt - iload_ifgt -@----------------------------------------------------------------------------- - .macro iload_0_ifle jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - rsb r3, r0, #opc_iload_0 - add jpc, jpc, #1 - ldr r3, [locals, r3, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_ifle - iload_0_ifle -@----------------------------------------------------------------------------- - .macro iload_ifle jpc_off=0, seq_len=2 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - add jpc, jpc, #2 - ldr r3, [locals, -r2, lsl #2] - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_ifle - iload_ifle -@----------------------------------------------------------------------------- - .macro iload_0_if_icmpeq jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmpeq - iload_0_if_icmpeq -@----------------------------------------------------------------------------- - .macro iload_if_icmpeq jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmpeq - iload_if_icmpeq -@----------------------------------------------------------------------------- - .macro iload_0_if_icmpne jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmpne - iload_0_if_icmpne -@----------------------------------------------------------------------------- - .macro iload_if_icmpne jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmpne - iload_if_icmpne -@----------------------------------------------------------------------------- - .macro iload_0_if_icmplt jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmplt - iload_0_if_icmplt -@----------------------------------------------------------------------------- - .macro iload_if_icmplt jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmplt - iload_if_icmplt -@----------------------------------------------------------------------------- - .macro iload_0_if_icmpge jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmpge - iload_0_if_icmpge -@----------------------------------------------------------------------------- - .macro iload_if_icmpge jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmpge - iload_if_icmpge -@----------------------------------------------------------------------------- - .macro iload_0_if_icmpgt jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmpgt - iload_0_if_icmpgt -@----------------------------------------------------------------------------- - .macro iload_if_icmpgt jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmpgt - iload_if_icmpgt -@----------------------------------------------------------------------------- - .macro iload_0_if_icmple jpc_off=0, seq_len=1 - POP r3 - rsb r2, r0, #opc_iload_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - ldr r2, [locals, r2, lsl #2] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_0_if_icmple - iload_0_if_icmple -@----------------------------------------------------------------------------- - .macro iload_if_icmple jpc_off=0, seq_len=2 - POP r3 - ldrsb r1, [jpc, #3] - ldrb ip, [jpc, #4] - ldr r2, [locals, -r2, lsl #2] - add jpc, jpc, #2 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iload_if_icmple - iload_if_icmple -@----------------------------------------------------------------------------- - .macro iload_0_ireturn jpc_off=0, seq_len=1 - rsb r0, r0, #opc_iload_0 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr r1, [locals, r0, lsl #2] - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode iload_0_ireturn - iload_0_ireturn -@----------------------------------------------------------------------------- - .macro iload_ireturn jpc_off=0, seq_len=2 - - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - ldr r1, [locals, -r2, lsl #2] - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #2 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode iload_ireturn - iload_ireturn -@----------------------------------------------------------------------------- - .macro iload_0_invokeresolved jpc_off=0, seq_len=4 - 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_invokeresolved - .endm - - Opcode iload_0_invokeresolved - iload_0_invokeresolved -@----------------------------------------------------------------------------- - .macro aload_0_invokeresolved jpc_off=0, seq_len=4 - 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_invokeresolved - .endm - - Opcode aload_0_invokeresolved - aload_0_invokeresolved -@----------------------------------------------------------------------------- - .macro iload_invokeresolved jpc_off=0, seq_len=5 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokeresolved - .endm - - Opcode iload_invokeresolved - iload_invokeresolved -@----------------------------------------------------------------------------- - .macro iload_0_invokevfinal jpc_off=0, seq_len=4 - 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_invokevfinal - .endm - - Opcode iload_0_invokevfinal - iload_0_invokevfinal -@----------------------------------------------------------------------------- - .macro aload_0_invokevfinal jpc_off=0, seq_len=4 - 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_invokevfinal - .endm - - Opcode aload_0_invokevfinal - aload_0_invokevfinal -@----------------------------------------------------------------------------- - .macro iload_invokevfinal jpc_off=0, seq_len=5 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokevfinal - .endm - - Opcode iload_invokevfinal - iload_invokevfinal -@----------------------------------------------------------------------------- - .macro iload_0_invokespecialresolved jpc_off=0, seq_len=4 - 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_invokespecialresolved - .endm - - Opcode iload_0_invokespecialresolved - iload_0_invokespecialresolved -@----------------------------------------------------------------------------- - .macro aload_0_invokespecialresolved jpc_off=0, seq_len=4 - 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_invokespecialresolved - .endm - - Opcode aload_0_invokespecialresolved - aload_0_invokespecialresolved -@----------------------------------------------------------------------------- - .macro iload_invokespecialresolved jpc_off=0, seq_len=5 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokespecialresolved - .endm - - Opcode iload_invokespecialresolved - iload_invokespecialresolved -@----------------------------------------------------------------------------- - .macro iload_0_invokestaticresolved jpc_off=0, seq_len=4 - 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_invokestaticresolved - .endm - - Opcode iload_0_invokestaticresolved - iload_0_invokestaticresolved -@----------------------------------------------------------------------------- - .macro aload_0_invokestaticresolved jpc_off=0, seq_len=4 - 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_invokestaticresolved - .endm - - Opcode aload_0_invokestaticresolved - aload_0_invokestaticresolved -@----------------------------------------------------------------------------- - .macro iload_invokestaticresolved jpc_off=0, seq_len=5 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokestaticresolved - .endm - - Opcode iload_invokestaticresolved - iload_invokestaticresolved -@----------------------------------------------------------------------------- - .macro iload_0_invokeinterface jpc_off=0, seq_len=1 - add jpc, jpc, #1 - rsb r0, r0, #opc_iload_0 - ldr r0, [locals, r0, lsl #2] - PUSH r0 - b do_invokeinterface - .endm - - Opcode iload_0_invokeinterface - iload_0_invokeinterface -@----------------------------------------------------------------------------- - .macro aload_0_invokeinterface jpc_off=0, seq_len=1 - add jpc, jpc, #1 - rsb r0, r0, #opc_aload_0 - ldr r0, [locals, r0, lsl #2] - PUSH r0 - b do_invokeinterface - .endm - - Opcode aload_0_invokeinterface - aload_0_invokeinterface -@----------------------------------------------------------------------------- - .macro iload_invokeinterface jpc_off=0, seq_len=2 - ldr r0, [locals, -r2, lsl #2] - add jpc, jpc, #2 - PUSH r0 - b do_invokeinterface - .endm - - Opcode iload_invokeinterface - iload_invokeinterface -@----------------------------------------------------------------------------- - .macro aload_0_igetfield jpc_off=0, seq_len=4 - add r0, r0, #opc_iaccess_0-opc_aload_0 - strb r0, [jpc] - DISPATCH_BYTECODE - .endm - - Opcode aload_0_igetfield - aload_0_igetfield -@----------------------------------------------------------------------------- - .macro iload_igetfield jpc_off=0, seq_len=5 - ldrb ip, [jpc, #4] - rsb tmp1, r2, #0 - ldrb r3, [jpc, #3] - add tmp2, constpool, ip, lsl #12 - DISPATCH_START 5 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry88: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iload_igetfield - iload_igetfield -@----------------------------------------------------------------------------- - .macro iconst_m1_istore_0 jpc_off=0, seq_len=2 - sub r3, r0, #opc_iconst_0 - DISPATCH_START \seq_len - rsb r2, r1, #opc_istore_0 - str r3, [locals, r2, lsl #2] - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_istore_0 - iconst_m1_istore_0 -@----------------------------------------------------------------------------- - .macro iconst_m1_astore jpc_off=0, seq_len=3 - ldrb r2, [jpc, #2] - sub r3, r0, #opc_iconst_0 - DISPATCH_START \seq_len - str r3, [locals, -r2, lsl #2] - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_astore - iconst_m1_astore -@----------------------------------------------------------------------------- - .macro iconst_m1_iadd jpc_off=0, seq_len=2 - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP tmp2 - DISPATCH_NEXT - add tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iconst_m1_iadd - iconst_m1_iadd -@----------------------------------------------------------------------------- - .macro iconst_m1_isub jpc_off=0, seq_len=2 - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP tmp2 - DISPATCH_NEXT - sub tmp1, tmp2, tmp1 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iconst_m1_isub - iconst_m1_isub -@----------------------------------------------------------------------------- - .macro iconst_m1_idiv jpc_off=0, seq_len=2 - subs lr, r0, #opc_iconst_2 - DISPATCH_START \seq_len - POP tmp1 - 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 .iconst_div_rem_0 - 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 - .endm - - Opcode iconst_m1_idiv - iconst_m1_idiv -@----------------------------------------------------------------------------- - .macro iconst_m1_ishl jpc_off=0, seq_len=2 - sub tmp1, r0, #opc_iconst_0 - DISPATCH_START \seq_len - POP r2 - DISPATCH_NEXT - mov tmp1, r2, lsl tmp1 - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iconst_m1_ishl - iconst_m1_ishl -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmpeq jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmpeq - iconst_m1_if_icmpeq -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmpne jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmpne - iconst_m1_if_icmpne -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmplt jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmplt - iconst_m1_if_icmplt -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmpge jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmpge - iconst_m1_if_icmpge -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmpgt jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmpgt - iconst_m1_if_icmpgt -@----------------------------------------------------------------------------- - .macro iconst_m1_if_icmple jpc_off=0, seq_len=1 - POP r3 - sub r2, r0, #opc_iconst_0 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iconst_m1_if_icmple - iconst_m1_if_icmple -@----------------------------------------------------------------------------- - .macro iconst_m1_ireturn jpc_off=0, seq_len=1 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - sub r1, r0, #opc_iconst_0 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode iconst_m1_ireturn - iconst_m1_ireturn -@----------------------------------------------------------------------------- - .macro iconst_m1_invokeresolved jpc_off=0, seq_len=4 - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokeresolved - .endm - - Opcode iconst_m1_invokeresolved - iconst_m1_invokeresolved -@----------------------------------------------------------------------------- - .macro iconst_m1_invokevfinal jpc_off=0, seq_len=4 - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokevfinal - .endm - - Opcode iconst_m1_invokevfinal - iconst_m1_invokevfinal -@----------------------------------------------------------------------------- - .macro iconst_m1_invokestaticresolved jpc_off=0, seq_len=4 - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokestaticresolved - .endm - - Opcode iconst_m1_invokestaticresolved - iconst_m1_invokestaticresolved -@----------------------------------------------------------------------------- - .macro iconst_m1_invokespecialresolved jpc_off=0, seq_len=4 - add jpc, jpc, #1 - sub r0, r0, #opc_iconst_0 - ldrb r2, [jpc, #1] - ldrb r1, [jpc, #2] - PUSH r0 - b do_invokespecialresolved - .endm - - Opcode iconst_m1_invokespecialresolved - iconst_m1_invokespecialresolved -@----------------------------------------------------------------------------- - .macro iaload_iconst_m1 jpc_off=0, seq_len=2 - sub r2, r1, #opc_iconst_0 - POP2 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 -.abortentry38: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_iconst_m1 - iaload_iconst_m1 -@----------------------------------------------------------------------------- - .macro iaload_bipush jpc_off=0, seq_len=3 - ldrsb r2, [jpc, #2] - POP2 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 -.abortentry39: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_bipush - iaload_bipush -@----------------------------------------------------------------------------- - .macro iaload_sipush jpc_off=0, seq_len=4 - ldrsb r2, [jpc, #2] - ldrb tmp1, [jpc, #3] - POP2 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 -.abortentry40: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_4_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_sipush - iaload_sipush -@----------------------------------------------------------------------------- - .macro iaload_iload jpc_off=0, seq_len=3 - ldrb r2, [jpc, #2] - POP2 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 -.abortentry41: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_iload - iaload_iload -@----------------------------------------------------------------------------- - .macro iaload_iload_0 jpc_off=0, seq_len=2 - rsb r2, r1, #opc_iload_0 - POP2 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 -.abortentry42: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_iload_0 - iaload_iload_0 -@----------------------------------------------------------------------------- - .macro iaload_aload_0 jpc_off=0, seq_len=2 - rsb r2, r1, #opc_aload_0 - POP2 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 -.abortentry42_1: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - PUSH2 r2, r3 - DISPATCH_FINISH - .endm - - Opcode iaload_aload_0 - iaload_aload_0 -@----------------------------------------------------------------------------- - .macro iaload_iaload jpc_off=0, seq_len=2 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry43: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - 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 -.abortentry44: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr r2, [lr, #12] - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iaload_iaload - iaload_iaload -@----------------------------------------------------------------------------- - .macro iaload_astore jpc_off=0, seq_len=3 - ldrb r2, [jpc, #2] - POP2 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 -.abortentry45: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_3_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - str r3, [locals, -r2, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iaload_astore - iaload_astore -@----------------------------------------------------------------------------- - .macro iaload_istore_0 jpc_off=0, seq_len=2 - rsb r2, r1, #opc_istore_0 - POP2 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 -.abortentry46: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - add lr, lr, r3, lsl #2 - ldr r3, [lr, #12] - DISPATCH_NEXT - str r3, [locals, r2, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iaload_istore_0 - iaload_istore_0 -@----------------------------------------------------------------------------- - .macro iaload_iastore jpc_off=0, seq_len=2 - POP2 r3, lr @ r3 = index, lr = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp lr, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry47: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry48: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iaload_iastore - iaload_iastore -@----------------------------------------------------------------------------- - .macro iaload_bastore jpc_off=0, seq_len=2 - POP2 r3, lr @ r3 = index, lr = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp lr, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry49: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry50: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2 - strb tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iaload_bastore - iaload_bastore -@----------------------------------------------------------------------------- - .macro iaload_castore jpc_off=0, seq_len=2 - POP2 r3, lr @ r3 = index, lr = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp lr, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry51: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_START \seq_len - cmp r3, tmp1 - bcs array_bound_exception_jpc_2_r3 - 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 -.abortentry52: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #1 - strh tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iaload_castore - iaload_castore -@----------------------------------------------------------------------------- - .macro iaload_iand jpc_off=0, seq_len=2 - POP2 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 -.abortentry58: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - and tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iaload_iand - iaload_iand -@----------------------------------------------------------------------------- - .macro iaload_ior jpc_off=0, seq_len=2 - POP2 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 -.abortentry59: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - orr tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iaload_ior - iaload_ior -@----------------------------------------------------------------------------- - .macro iaload_ixor jpc_off=0, seq_len=2 - POP2 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 -.abortentry60: - ldr tmp1, [r3, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_2 - add r3, r3, r2, lsl #2 - ldr tmp1, [r3, #12] @ tmp1 = tos - POP r2 @ r2 = tosm1 - DISPATCH_NEXT - eor tmp1, r2, tmp1 @ tosm1 <dop> tos - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iaload_ixor - iaload_ixor -@----------------------------------------------------------------------------- - .macro iaload_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry61: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_ifeq - iaload_ifeq -@----------------------------------------------------------------------------- - .macro iaload_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry62: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_ifne - iaload_ifne -@----------------------------------------------------------------------------- - .macro iaload_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry63: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_iflt - iaload_iflt -@----------------------------------------------------------------------------- - .macro iaload_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry64: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_ifge - iaload_ifge -@----------------------------------------------------------------------------- - .macro iaload_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry65: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_ifgt - iaload_ifgt -@----------------------------------------------------------------------------- - .macro iaload_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry66: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r3, [r3, #12] @ r1 = tos - - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_ifle - iaload_ifle -@----------------------------------------------------------------------------- - .macro iaload_if_icmpeq jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry67: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmpeq - iaload_if_icmpeq -@----------------------------------------------------------------------------- - .macro iaload_if_icmpne jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry68: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmpne - iaload_if_icmpne -@----------------------------------------------------------------------------- - .macro iaload_if_icmplt jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry69: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmplt - iaload_if_icmplt -@----------------------------------------------------------------------------- - .macro iaload_if_icmpge jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry70: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmpge - iaload_if_icmpge -@----------------------------------------------------------------------------- - .macro iaload_if_icmpgt jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry71: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmpgt - iaload_if_icmpgt -@----------------------------------------------------------------------------- - .macro iaload_if_icmple jpc_off=0, seq_len=1 - POP2 r2, r3 @ r2 = index, r3 = arrayref -#ifndef HW_NULL_PTR_CHECK - cmp r3, #0 - beq null_ptr_exception_jpc_0 -#endif -.abortentry72: - ldr r1, [r3, #8] @ r1 = length - cmp r2, r1 - bcs array_bound_exception_jpc_0 - add r3, r3, r2, lsl #2 - ldr r2, [r3, #12] @ r1 = tos - - POP r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - cmp r3, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaload_if_icmple - iaload_if_icmple -@----------------------------------------------------------------------------- - .macro iadd_iload jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iadd_iload - iadd_iload -@----------------------------------------------------------------------------- - .macro iadd_iload_0 jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iadd_iload_0 - iadd_iload_0 -@----------------------------------------------------------------------------- - .macro iadd_iaload jpc_off=0, seq_len=2 - POP3 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 -.abortentry73: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iadd_iaload - iadd_iaload -@----------------------------------------------------------------------------- - .macro iadd_istore jpc_off=0, seq_len=3 - mov r0, #opc_iadd_u4store - strb r0, [jpc] - b do_iadd_u4store - .endm - - Opcode iadd_istore - iadd_istore -@----------------------------------------------------------------------------- - .macro iadd_istore_0 jpc_off=0, seq_len=2 - mov r0, #opc_iadd_istore_N - strb r0, [jpc] - b do_iadd_istore_N - .endm - - Opcode iadd_istore_0 - iadd_istore_0 -@----------------------------------------------------------------------------- - .macro iadd_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry106: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iadd_iastore - iadd_iastore -@----------------------------------------------------------------------------- - .macro iadd_iadd jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - add tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iadd_iadd - iadd_iadd -@----------------------------------------------------------------------------- - .macro iadd_isub jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - add tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iadd_isub - iadd_isub -@----------------------------------------------------------------------------- - .macro iadd_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_ifeq - iadd_ifeq -@----------------------------------------------------------------------------- - .macro iadd_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_ifne - iadd_ifne -@----------------------------------------------------------------------------- - .macro iadd_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_iflt - iadd_iflt -@----------------------------------------------------------------------------- - .macro iadd_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_ifge - iadd_ifge -@----------------------------------------------------------------------------- - .macro iadd_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_ifgt - iadd_ifgt -@----------------------------------------------------------------------------- - .macro iadd_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_ifle - iadd_ifle -@----------------------------------------------------------------------------- - .macro iadd_if_icmpeq jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmpeq - iadd_if_icmpeq -@----------------------------------------------------------------------------- - .macro iadd_if_icmpne jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmpne - iadd_if_icmpne -@----------------------------------------------------------------------------- - .macro iadd_if_icmplt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmplt - iadd_if_icmplt -@----------------------------------------------------------------------------- - .macro iadd_if_icmpge jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmpge - iadd_if_icmpge -@----------------------------------------------------------------------------- - .macro iadd_if_icmpgt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmpgt - iadd_if_icmpgt -@----------------------------------------------------------------------------- - .macro iadd_if_icmple jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iadd_if_icmple - iadd_if_icmple -@----------------------------------------------------------------------------- - .macro iadd_goto jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - add r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iadd_goto - iadd_goto -@----------------------------------------------------------------------------- - .macro iadd_ireturn jpc_off=0, seq_len=1 - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - add r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode iadd_ireturn - iadd_ireturn -@----------------------------------------------------------------------------- - .macro iadd_iinc jpc_off=0, seq_len=4 - POP2 tmp1, lr - DISPATCH_START \seq_len - add tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iadd_iinc - iadd_iinc -@----------------------------------------------------------------------------- - .macro isub_iload jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode isub_iload - isub_iload -@----------------------------------------------------------------------------- - .macro isub_iload_0 jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode isub_iload_0 - isub_iload_0 -@----------------------------------------------------------------------------- - .macro isub_iaload jpc_off=0, seq_len=2 - POP3 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 -.abortentry74: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode isub_iaload - isub_iaload -@----------------------------------------------------------------------------- - .macro isub_istore jpc_off=0, seq_len=3 - mov r0, #opc_isub_u4store - strb r0, [jpc] - b do_isub_u4store - .endm - - Opcode isub_istore - isub_istore -@----------------------------------------------------------------------------- - .macro isub_istore_0 jpc_off=0, seq_len=2 - mov r0, #opc_isub_istore_N - strb r0, [jpc] - b do_isub_istore_N - .endm - - Opcode isub_istore_0 - isub_istore_0 -@----------------------------------------------------------------------------- - .macro isub_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry105: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode isub_iastore - isub_iastore -@----------------------------------------------------------------------------- - .macro isub_iadd jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - sub tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode isub_iadd - isub_iadd -@----------------------------------------------------------------------------- - .macro isub_isub jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - sub tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode isub_isub - isub_isub -@----------------------------------------------------------------------------- - .macro isub_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_ifeq - isub_ifeq -@----------------------------------------------------------------------------- - .macro isub_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_ifne - isub_ifne -@----------------------------------------------------------------------------- - .macro isub_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_iflt - isub_iflt -@----------------------------------------------------------------------------- - .macro isub_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_ifge - isub_ifge -@----------------------------------------------------------------------------- - .macro isub_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_ifgt - isub_ifgt -@----------------------------------------------------------------------------- - .macro isub_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_ifle - isub_ifle -@----------------------------------------------------------------------------- - .macro isub_if_icmpeq jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmpeq - isub_if_icmpeq -@----------------------------------------------------------------------------- - .macro isub_if_icmpne jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmpne - isub_if_icmpne -@----------------------------------------------------------------------------- - .macro isub_if_icmplt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmplt - isub_if_icmplt -@----------------------------------------------------------------------------- - .macro isub_if_icmpge jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmpge - isub_if_icmpge -@----------------------------------------------------------------------------- - .macro isub_if_icmpgt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmpgt - isub_if_icmpgt -@----------------------------------------------------------------------------- - .macro isub_if_icmple jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - sub r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode isub_if_icmple - isub_if_icmple -@----------------------------------------------------------------------------- - .macro isub_goto jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - sub r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode isub_goto - isub_goto -@----------------------------------------------------------------------------- - .macro isub_ireturn jpc_off=0, seq_len=1 - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - sub r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode isub_ireturn - isub_ireturn -@----------------------------------------------------------------------------- - .macro isub_iinc jpc_off=0, seq_len=4 - POP2 tmp1, lr - DISPATCH_START \seq_len - sub tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode isub_iinc - isub_iinc -@----------------------------------------------------------------------------- - .macro iand_iload jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iand_iload - iand_iload -@----------------------------------------------------------------------------- - .macro iand_iload_0 jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - and tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iand_iload_0 - iand_iload_0 -@----------------------------------------------------------------------------- - .macro iand_iaload jpc_off=0, seq_len=2 - POP3 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 -.abortentry75: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iand_iaload - iand_iaload -@----------------------------------------------------------------------------- - .macro iand_istore jpc_off=0, seq_len=3 - mov r0, #opc_iand_u4store - strb r0, [jpc] - b do_iand_u4store - .endm - - Opcode iand_istore - iand_istore -@----------------------------------------------------------------------------- - .macro iand_istore_0 jpc_off=0, seq_len=2 - mov r0, #opc_iand_istore_N - strb r0, [jpc] - b do_iand_istore_N - .endm - - Opcode iand_istore_0 - iand_istore_0 -@----------------------------------------------------------------------------- - .macro iand_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry107: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode iand_iastore - iand_iastore -@----------------------------------------------------------------------------- - .macro iand_iadd jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - and tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iand_iadd - iand_iadd -@----------------------------------------------------------------------------- - .macro iand_isub jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - and tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iand_isub - iand_isub -@----------------------------------------------------------------------------- - .macro iand_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_ifeq - iand_ifeq -@----------------------------------------------------------------------------- - .macro iand_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_ifne - iand_ifne -@----------------------------------------------------------------------------- - .macro iand_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_iflt - iand_iflt -@----------------------------------------------------------------------------- - .macro iand_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_ifge - iand_ifge -@----------------------------------------------------------------------------- - .macro iand_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_ifgt - iand_ifgt -@----------------------------------------------------------------------------- - .macro iand_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_ifle - iand_ifle -@----------------------------------------------------------------------------- - .macro iand_if_icmpeq jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmpeq - iand_if_icmpeq -@----------------------------------------------------------------------------- - .macro iand_if_icmpne jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmpne - iand_if_icmpne -@----------------------------------------------------------------------------- - .macro iand_if_icmplt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmplt - iand_if_icmplt -@----------------------------------------------------------------------------- - .macro iand_if_icmpge jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmpge - iand_if_icmpge -@----------------------------------------------------------------------------- - .macro iand_if_icmpgt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmpgt - iand_if_icmpgt -@----------------------------------------------------------------------------- - .macro iand_if_icmple jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - and r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iand_if_icmple - iand_if_icmple -@----------------------------------------------------------------------------- - .macro iand_goto jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - and r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode iand_goto - iand_goto -@----------------------------------------------------------------------------- - .macro iand_ireturn jpc_off=0, seq_len=1 - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - and r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode iand_ireturn - iand_ireturn -@----------------------------------------------------------------------------- - .macro iand_iinc jpc_off=0, seq_len=4 - POP2 tmp1, lr - DISPATCH_START \seq_len - and tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iand_iinc - iand_iinc -@----------------------------------------------------------------------------- - .macro ior_iload jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode ior_iload - ior_iload -@----------------------------------------------------------------------------- - .macro ior_iload_0 jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - orr tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode ior_iload_0 - ior_iload_0 -@----------------------------------------------------------------------------- - .macro ior_iaload jpc_off=0, seq_len=2 - POP3 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 -.abortentry76: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode ior_iaload - ior_iaload -@----------------------------------------------------------------------------- - .macro ior_istore jpc_off=0, seq_len=3 - mov r0, #opc_ior_u4store - strb r0, [jpc] - b do_ior_u4store - .endm - - Opcode ior_istore - ior_istore -@----------------------------------------------------------------------------- - .macro ior_istore_0 jpc_off=0, seq_len=2 - mov r0, #opc_ior_istore_N - strb r0, [jpc] - b do_ior_istore_N - .endm - - Opcode ior_istore_0 - ior_istore_0 -@----------------------------------------------------------------------------- - .macro ior_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry108: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode ior_iastore - ior_iastore -@----------------------------------------------------------------------------- - .macro ior_iadd jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - orr tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ior_iadd - ior_iadd -@----------------------------------------------------------------------------- - .macro ior_isub jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - orr tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ior_isub - ior_isub -@----------------------------------------------------------------------------- - .macro ior_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_ifeq - ior_ifeq -@----------------------------------------------------------------------------- - .macro ior_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_ifne - ior_ifne -@----------------------------------------------------------------------------- - .macro ior_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_iflt - ior_iflt -@----------------------------------------------------------------------------- - .macro ior_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_ifge - ior_ifge -@----------------------------------------------------------------------------- - .macro ior_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_ifgt - ior_ifgt -@----------------------------------------------------------------------------- - .macro ior_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_ifle - ior_ifle -@----------------------------------------------------------------------------- - .macro ior_if_icmpeq jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmpeq - ior_if_icmpeq -@----------------------------------------------------------------------------- - .macro ior_if_icmpne jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmpne - ior_if_icmpne -@----------------------------------------------------------------------------- - .macro ior_if_icmplt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmplt - ior_if_icmplt -@----------------------------------------------------------------------------- - .macro ior_if_icmpge jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmpge - ior_if_icmpge -@----------------------------------------------------------------------------- - .macro ior_if_icmpgt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmpgt - ior_if_icmpgt -@----------------------------------------------------------------------------- - .macro ior_if_icmple jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - orr r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ior_if_icmple - ior_if_icmple -@----------------------------------------------------------------------------- - .macro ior_goto jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - orr r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode ior_goto - ior_goto -@----------------------------------------------------------------------------- - .macro ior_ireturn jpc_off=0, seq_len=1 - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - orr r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode ior_ireturn - ior_ireturn -@----------------------------------------------------------------------------- - .macro ior_iinc jpc_off=0, seq_len=4 - POP2 tmp1, lr - DISPATCH_START \seq_len - orr tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ior_iinc - ior_iinc -@----------------------------------------------------------------------------- - .macro ixor_iload jpc_off=0, seq_len=3 - ldrb r3, [jpc, #2] - DISPATCH_START \seq_len - POP2 tmp2, tmp1 - DISPATCH_NEXT - rsb r3, r3, #0 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode ixor_iload - ixor_iload -@----------------------------------------------------------------------------- - .macro ixor_iload_0 jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - rsb r3, r1, #opc_iload_0 - POP2 tmp2, tmp1 - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - eor tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode ixor_iload_0 - ixor_iload_0 -@----------------------------------------------------------------------------- - .macro ixor_iaload jpc_off=0, seq_len=2 - POP3 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 -.abortentry77: - ldr tmp1, [lr, #8] @ tmp1 = length - DISPATCH_NEXT - cmp r2, tmp1 - bcs array_bound_exception_jpc_1 - add lr, lr, r2, lsl #2 - ldr tmp1, [lr, #12] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode ixor_iaload - ixor_iaload -@----------------------------------------------------------------------------- - .macro ixor_istore jpc_off=0, seq_len=3 - mov r0, #opc_ixor_u4store - strb r0, [jpc] - b do_ixor_u4store - .endm - - Opcode ixor_istore - ixor_istore -@----------------------------------------------------------------------------- - .macro ixor_istore_0 jpc_off=0, seq_len=2 - mov r0, #opc_ixor_istore_N - strb r0, [jpc] - b do_ixor_istore_N - .endm - - Opcode ixor_istore_0 - ixor_istore_0 -@----------------------------------------------------------------------------- - .macro ixor_iastore jpc_off=0, seq_len=2 - POP2 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 -.abortentry109: - ldr lr, [r3, #8] @ lr = limit - DISPATCH_NEXT - cmp r2, lr - bcs array_bound_exception_jpc_1 - DISPATCH_NEXT - add r3, r3, r2, lsl #2 - str tmp1, [r3, #12] - DISPATCH_FINISH - .endm - - Opcode ixor_iastore - ixor_iastore -@----------------------------------------------------------------------------- - .macro ixor_iadd jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - eor tmp2, r3, r2 - DISPATCH_NEXT - add tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ixor_iadd - ixor_iadd -@----------------------------------------------------------------------------- - .macro ixor_isub jpc_off=0, seq_len=2 - DISPATCH_START \seq_len - POP3 r2, r3, tmp1 - DISPATCH_NEXT - eor tmp2, r3, r2 - DISPATCH_NEXT - sub tmp2, tmp1, tmp2 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode ixor_isub - ixor_isub -@----------------------------------------------------------------------------- - .macro ixor_ifeq jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_ifeq - ixor_ifeq -@----------------------------------------------------------------------------- - .macro ixor_ifne jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_ifne - ixor_ifne -@----------------------------------------------------------------------------- - .macro ixor_iflt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_iflt - ixor_iflt -@----------------------------------------------------------------------------- - .macro ixor_ifge jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_ifge - ixor_ifge -@----------------------------------------------------------------------------- - .macro ixor_ifgt jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_ifgt - ixor_ifgt -@----------------------------------------------------------------------------- - .macro ixor_ifle jpc_off=0, seq_len=1 - POP2 r2, r3 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r3, r3, r2 - add jpc, jpc, #1 - cmp r3, #0 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_ifle - ixor_ifle -@----------------------------------------------------------------------------- - .macro ixor_if_icmpeq jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmpeq - ixor_if_icmpeq -@----------------------------------------------------------------------------- - .macro ixor_if_icmpne jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmpne - ixor_if_icmpne -@----------------------------------------------------------------------------- - .macro ixor_if_icmplt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmplt - ixor_if_icmplt -@----------------------------------------------------------------------------- - .macro ixor_if_icmpge jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmpge - ixor_if_icmpge -@----------------------------------------------------------------------------- - .macro ixor_if_icmpgt jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmpgt - ixor_if_icmpgt -@----------------------------------------------------------------------------- - .macro ixor_if_icmple jpc_off=0, seq_len=1 - POP3 r2, r3, lr - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - eor r2, r3, r2 - add jpc, jpc, #1 - cmp lr, r2 - orr ip, ip, r1, lsl #8 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode ixor_if_icmple - ixor_if_icmple -@----------------------------------------------------------------------------- - .macro ixor_goto jpc_off=0, seq_len=1 - ldrsb r1, [jpc, #2] - ldrb ip, [jpc, #3] - add jpc, jpc, #1 - orr ip, ip, r1, lsl #8 - DISPATCH_START_REG ip - POP2 r2, r3 - eor r2, r3, r2 - DISPATCH_NEXT - PUSH r2 - DISPATCH_FINISH - .endm - - Opcode ixor_goto - ixor_goto -@----------------------------------------------------------------------------- - .macro ixor_ireturn jpc_off=0, seq_len=1 - POP2 r2, r3 - ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base - ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end - eor r1, r3, r2 - ldr tmp_xxx, [istate, #ISTATE_THREAD] - cmp tmp1, tmp2 - bcc 1f -2: - mov r3, #0 - ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] - ldr r0, [istate, #ISTATE_METHOD] - ldr r3, [stack, #0] - ldrh r0, [r0, #40] - ldr istate, [istate, #ISTATE_SAVED_ISTATE] - str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - str r1, [stack, r0, lsl #2]! - cmp istate, #0 - beq normal_return - ldr jpc, [istate, #ISTATE_BCP] - ldr r2, [istate, #ISTATE_STACK_LIMIT] - DISPATCH_START 3 @ ldrb r0, [jpc, #3]! - sub stack, stack, #4 - ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] - DISPATCH_NEXT @ ldrb r1, [jpc, #2] - add r2, r2, #4 - DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] - 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] - DISPATCH_NEXT @ ands lr, ip, lr - add constpool, constpool, #CONST_POOL_OFFSET - DISPATCH_FINISH -1: - PUSH r1 - add jpc, jpc, #1 - bl return_check_monitors - POP r1 - b 2b - .endm - - Opcode ixor_ireturn - ixor_ireturn -@----------------------------------------------------------------------------- - .macro ixor_iinc jpc_off=0, seq_len=4 - POP2 tmp1, lr - DISPATCH_START \seq_len - eor tmp1, lr, tmp1 - ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc - ldrsb r2, [jpc, #-1] - DISPATCH_NEXT - PUSH tmp1 - ldr tmp1, [locals, -r3, lsl #2] - DISPATCH_NEXT - add tmp1, tmp1, r2 - str tmp1, [locals, -r3, lsl #2] - DISPATCH_FINISH - .endm - - Opcode ixor_iinc - ixor_iinc -@----------------------------------------------------------------------------- - .macro iinc_iconst_m1 jpc_off=0, seq_len=4 - ldrsb tmp1, [jpc, #2] - sub lr, r1, #opc_iconst_0 - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - PUSH lr - DISPATCH_NEXT - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iinc_iconst_m1 - iinc_iconst_m1 -@----------------------------------------------------------------------------- - .macro iinc_iload jpc_off=0, seq_len=5 - ldrb lr, [jpc, #4] - ldrsb tmp1, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - rsb lr, lr, #0 - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - ldr tmp1, [locals, lr, lsl #2] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iinc_iload - iinc_iload -@----------------------------------------------------------------------------- - .macro iinc_iload_0 jpc_off=0, seq_len=4 - rsb lr, r1, #opc_iload_0 - ldrsb tmp1, [jpc, #2] - DISPATCH_START \seq_len - rsb tmp2, r2, #0 - ldr r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - DISPATCH_NEXT - ldr tmp1, [locals, lr, lsl #2] - DISPATCH_NEXT - PUSH tmp1 - DISPATCH_FINISH - .endm - - Opcode iinc_iload_0 - iinc_iload_0 -@----------------------------------------------------------------------------- - .macro iaccess_0_iload jpc_off=0, seq_len=6 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb r3, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 6 - ldr tmp1, [locals, tmp1, lsl #2] - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT - rsb r3, r3, #0 -.abortentry89: - ldr tmp2, [tmp1, tmp2] - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iaccess_0_iload - iaccess_0_iload -@----------------------------------------------------------------------------- - .macro iaccess_0_iload_0 jpc_off=0, seq_len=5 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 5 - rsb r3, r1, #opc_iload_0 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT -.abortentry90: - ldr tmp2, [tmp1, tmp2] - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - PUSH2 r3, tmp2 - DISPATCH_FINISH - .endm - - Opcode iaccess_0_iload_0 - iaccess_0_iload_0 -@----------------------------------------------------------------------------- - .macro iaccess_0_iadd jpc_off=0, seq_len=5 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add tmp2, constpool, r2, lsl #12 - DISPATCH_START 5 - 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 - DISPATCH_NEXT - ldr tmp2, [tmp2, #8] - DISPATCH_NEXT - POP r3 -.abortentry91: - ldr tmp2, [tmp1, tmp2] - DISPATCH_NEXT - add tmp2, tmp2, r3 - PUSH tmp2 - DISPATCH_FINISH - .endm - - Opcode iaccess_0_iadd - iaccess_0_iadd -@----------------------------------------------------------------------------- - .macro iaccess_0_ifeq jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry92: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_ifeq - iaccess_0_ifeq -@----------------------------------------------------------------------------- - .macro iaccess_0_ifne jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry93: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_ifne - iaccess_0_ifne -@----------------------------------------------------------------------------- - .macro iaccess_0_iflt jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry94: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_iflt - iaccess_0_iflt -@----------------------------------------------------------------------------- - .macro iaccess_0_ifge jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry95: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_ifge - iaccess_0_ifge -@----------------------------------------------------------------------------- - .macro iaccess_0_ifgt jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry96: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_ifgt - iaccess_0_ifgt -@----------------------------------------------------------------------------- - .macro iaccess_0_ifle jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - orr ip, ip, r0, lsl #8 -.abortentry97: - ldr tmp2, [tmp1, tmp2] - cmp tmp2, #0 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_ifle - iaccess_0_ifle -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmpeq jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry98: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - beq 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmpeq - iaccess_0_if_icmpeq -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmpne jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry99: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bne 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmpne - iaccess_0_if_icmpne -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmplt jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry100: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - blt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmplt - iaccess_0_if_icmplt -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmpge jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry101: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bge 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmpge - iaccess_0_if_icmpge -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmpgt jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry102: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - bgt 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmpgt - iaccess_0_if_icmpgt -@----------------------------------------------------------------------------- - .macro iaccess_0_if_icmple jpc_off=0, seq_len=4 - ldrb r2, [jpc, #3] - rsb tmp1, r0, #opc_iaccess_0 - ldrb ip, [jpc, #2] - add jpc, jpc, #4 - ldrsb r0, [jpc, #1] - add tmp2, constpool, r2, lsl #12 - 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] - POP r3 - orr ip, ip, r0, lsl #8 -.abortentry103: - ldr tmp2, [tmp1, tmp2] - cmp r3, tmp2 - ble 1f - mov ip, #3 -1: - ldrb r0, [jpc, ip]! - DISPATCH_BYTECODE - .endm - - Opcode iaccess_0_if_icmple - iaccess_0_if_icmple -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iadd jpc_off=0, seq_len=3 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - add r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_iadd - iload_0_iconst_N_iadd -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_isub jpc_off=0, seq_len=3 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - sub r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_isub - iload_0_iconst_N_isub -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iand jpc_off=0, seq_len=3 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - and r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_iand - iload_0_iconst_N_iand -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ior jpc_off=0, seq_len=3 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - orr r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_ior - iload_0_iconst_N_ior -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ixor jpc_off=0, seq_len=3 - rsb r3, r0, #opc_iload_0_iconst_N - DISPATCH_START \seq_len - ldrb r2, [jpc, #1-\seq_len] - DISPATCH_NEXT - ldr r3, [locals, r3, lsl #2] - DISPATCH_NEXT - sub tmp1, r2, #opc_iconst_0 - DISPATCH_NEXT - eor r3, r3, tmp1 - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_ixor - iload_0_iconst_N_ixor -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iadd jpc_off=0, seq_len=4 - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - add r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_iadd - iload_iconst_N_iadd -@----------------------------------------------------------------------------- - .macro iload_iconst_N_isub jpc_off=0, seq_len=4 - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - sub r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_isub - iload_iconst_N_isub -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iand jpc_off=0, seq_len=4 - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - and r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_iand - iload_iconst_N_iand -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ior jpc_off=0, seq_len=4 - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - orr r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_ior - iload_iconst_N_ior -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ixor jpc_off=0, seq_len=4 - ldrb r3, [jpc, #2] - rsb r2, r2, #0 - DISPATCH_START \seq_len - DISPATCH_NEXT - ldr r2, [locals, r2, lsl #2] - sub r3, r3, #opc_iconst_0 - DISPATCH_NEXT - eor r3, r2, r3 - DISPATCH_NEXT - DISPATCH_NEXT - PUSH r3 - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_ixor - iload_iconst_N_ixor -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iadd_u4store jpc_off=0, seq_len=5 - 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, #0 - DISPATCH_NEXT - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_iadd_u4store - iload_0_iconst_N_iadd_u4store -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iadd_u4store jpc_off=0, seq_len=6 - 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 - .endm - - Opcode iload_iconst_N_iadd_u4store - iload_iconst_N_iadd_u4store -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iadd_istore_N jpc_off=0, seq_len=4 - 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 - str r3, [locals, tmp1, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iload_0_iconst_N_iadd_istore_N - iload_0_iconst_N_iadd_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iadd_istore_N jpc_off=0, seq_len=5 - 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 - add r3, tmp1, r3 - DISPATCH_NEXT - str r3, [locals, tmp2, lsl #2] - DISPATCH_FINISH - .endm - - Opcode iload_iconst_N_iadd_istore_N - iload_iconst_N_iadd_istore_N -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_isub_u4store jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_0_iconst_N_isub_u4store - iload_0_iconst_N_isub_u4store -@----------------------------------------------------------------------------- - .macro iload_iconst_N_isub_u4store jpc_off=0, seq_len=6 - 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 - .endm - - Opcode iload_iconst_N_isub_u4store - iload_iconst_N_isub_u4store -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_isub_istore_N jpc_off=0, seq_len=4 - 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 - .endm - - Opcode iload_0_iconst_N_isub_istore_N - iload_0_iconst_N_isub_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N_isub_istore_N jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_iconst_N_isub_istore_N - iload_iconst_N_isub_istore_N -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iand_u4store jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_0_iconst_N_iand_u4store - iload_0_iconst_N_iand_u4store -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iand_u4store jpc_off=0, seq_len=6 - 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 - .endm - - Opcode iload_iconst_N_iand_u4store - iload_iconst_N_iand_u4store -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_iand_istore_N jpc_off=0, seq_len=4 - 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 - .endm - - Opcode iload_0_iconst_N_iand_istore_N - iload_0_iconst_N_iand_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N_iand_istore_N jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_iconst_N_iand_istore_N - iload_iconst_N_iand_istore_N -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ior_u4store jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_0_iconst_N_ior_u4store - iload_0_iconst_N_ior_u4store -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ior_u4store jpc_off=0, seq_len=6 - 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 - .endm - - Opcode iload_iconst_N_ior_u4store - iload_iconst_N_ior_u4store -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ior_istore_N jpc_off=0, seq_len=4 - 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 - .endm - - Opcode iload_0_iconst_N_ior_istore_N - iload_0_iconst_N_ior_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ior_istore_N jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_iconst_N_ior_istore_N - iload_iconst_N_ior_istore_N -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ixor_u4store jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_0_iconst_N_ixor_u4store - iload_0_iconst_N_ixor_u4store -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ixor_u4store jpc_off=0, seq_len=6 - 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 - .endm - - Opcode iload_iconst_N_ixor_u4store - iload_iconst_N_ixor_u4store -@----------------------------------------------------------------------------- - .macro iload_0_iconst_N_ixor_istore_N jpc_off=0, seq_len=4 - 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 - .endm - - Opcode iload_0_iconst_N_ixor_istore_N - iload_0_iconst_N_ixor_istore_N -@----------------------------------------------------------------------------- - .macro iload_iconst_N_ixor_istore_N jpc_off=0, seq_len=5 - 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 - .endm - - Opcode iload_iconst_N_ixor_istore_N - iload_iconst_N_ixor_istore_N - .macro MAIN_DISPATCH_TABLE - .word do_nop - .word do_u4const_0 - .word dispatch_iconst_m1+1 - .word dispatch_iconst_0+1 - .word dispatch_iconst_1+1 - .word dispatch_iconst_2+1 - .word dispatch_iconst_3+1 - .word dispatch_iconst_4+1 - .word dispatch_iconst_5+1 - .word do_u8const_0 - .word do_lconst_1 - .word do_u4const_0 - .word do_fconst_1 - .word do_fconst_2 - .word do_u8const_0 - .word do_dconst_1 - .word do_bipush - .word do_sipush - .word do_ldc - .word do_ldc_w - .word do_ldc2_w - .word dispatch_iload+2 - .word do_u8load - .word dispatch_fload+2 - .word do_u8load - .word dispatch_aload+2 - .word dispatch_iload_0+1 - .word dispatch_iload_1+1 - .word dispatch_iload_2+1 - .word dispatch_iload_3+1 - .word do_u8load_0 - .word do_u8load_1 - .word do_u8load_2 - .word do_u8load_3 - .word do_fload_0 - .word do_fload_0 - .word do_fload_0 - .word do_fload_0 - .word do_u8load_0 - .word do_u8load_1 - .word do_u8load_2 - .word do_u8load_3 - .word dispatch_aload_0+1 - .word dispatch_aload_1+1 - .word dispatch_aload_2+1 - .word dispatch_aload_3+1 - .word dispatch_iaload+1 - .word do_u8aload - .word dispatch_faload+1 - .word do_u8aload - .word dispatch_aaload+1 - .word do_baload - .word do_caload - .word do_saload - .word do_u4store - .word do_u8store - .word do_u4store - .word do_u8store - .word do_u4store - .word do_u4store_0 - .word do_u4store_1 - .word do_u4store_2 - .word do_u4store_3 - .word do_u8store_0 - .word do_u8store_1 - .word do_u8store_2 - .word do_u8store_3 - .word do_u4store_0 - .word do_u4store_1 - .word do_u4store_2 - .word do_u4store_3 - .word do_u8store_0 - .word do_u8store_1 - .word do_u8store_2 - .word do_u8store_3 - .word do_u4store_0 - .word do_u4store_1 - .word do_u4store_2 - .word do_u4store_3 - .word do_u4astore - .word do_u8astore - .word do_u4astore - .word do_u8astore - .word do_aastore - .word do_bastore - .word do_u2astore - .word do_u2astore - .word do_jpop - .word do_jpop2 - .word do_dup - .word do_dup_x1 - .word do_dup_x2 - .word do_dup2 - .word do_dup2_x1 - .word do_dup2_x2 - .word do_swap - .word dispatch_iadd+1 - .word do_ladd - .word do_fadd - .word do_dadd - .word dispatch_isub+1 - .word do_lsub - .word do_fsub - .word do_dsub - .word do_imul - .word do_lmul - .word do_fmul - .word do_dmul - .word do_idiv - .word do_ldiv - .word do_fdiv - .word do_ddiv - .word do_irem - .word do_lrem - .word do_frem - .word do_drem - .word do_ineg - .word do_lneg - .word do_fneg - .word do_dneg - .word do_ishl - .word do_lshl - .word do_ishr - .word do_lshr - .word do_iushr - .word do_lushr - .word dispatch_iand+1 - .word do_land - .word dispatch_ior+1 - .word do_lor - .word dispatch_ixor+1 - .word do_lxor - .word dispatch_iinc+3 - .word do_i2l - .word do_i2f - .word do_i2d - .word do_l2i - .word do_l2f - .word do_l2d - .word do_f2i - .word do_f2l - .word do_f2d - .word do_d2i - .word do_d2l - .word do_d2f - .word do_i2b - .word do_i2c - .word do_i2s - .word do_lcmp - .word do_fcmpl - .word do_fcmpg - .word do_dcmpl - .word do_dcmpg - .word do_ifeq_unsafe - .word do_ifne_unsafe - .word do_iflt_unsafe - .word do_ifge_unsafe - .word do_ifgt_unsafe - .word do_ifle_unsafe - .word do_if_icmpeq_unsafe - .word do_if_icmpne_unsafe - .word do_if_icmplt_unsafe - .word do_if_icmpge_unsafe - .word do_if_icmpgt_unsafe - .word do_if_icmple_unsafe - .word do_if_icmpeq_unsafe - .word do_if_icmpne_unsafe - .word do_goto_unsafe - .word do_jsr - .word do_ret - .word do_tableswitch - .word do_lookupswitch - .word do_ireturn_unsafe - .word do_lreturn_unsafe - .word do_ireturn_unsafe - .word do_lreturn_unsafe - .word do_ireturn_unsafe - .word do_return_unsafe - .word do_getstatic - .word do_putstatic - .word do_getfield - .word do_putfield - .word do_invokevirtual - .word do_invokespecial - .word do_invokestatic - .word do_invokeinterface - .word do_undefined - .word do_new - .word do_newarray - .word do_anewarray - .word do_arraylength - .word do_athrow - .word do_checkcast - .word do_instanceof - .word do_monitorenter - .word do_monitorexit - .word do_wide - .word do_multianewarray - .word do_ifeq_unsafe - .word do_ifne_unsafe - .word do_goto_w - .word do_jsr_w - .word do_breakpoint - .word do_undefined - .word do_bgetfield - .word do_cgetfield - .word do_undefined - .word do_undefined - .word do_igetfield - .word do_lgetfield - .word do_sgetfield - .word do_aputfield - .word do_bputfield - .word do_cputfield - .word do_undefined - .word do_undefined - .word do_iputfield - .word do_lputfield - .word do_undefined - .word dispatch_iaccess_0+4 - .word dispatch_iaccess_1+4 - .word dispatch_iaccess_2+4 - .word dispatch_iaccess_3+4 - .word do_undefined - .word do_undefined - .word do_undefined - .word do_invokevfinal - .word do_undefined - .word do_undefined - .word do_return_register_finalizer - .word do_undefined - .word dispatch_iload_0_iconst_N+2 - .word dispatch_iload_1_iconst_N+2 - .word dispatch_iload_2_iconst_N+2 - .word dispatch_iload_3_iconst_N+2 - .word dispatch_iload_iconst_N+3 - .word do_invokeresolved - .word do_iadd_istore_N - .word do_isub_istore_N - .word do_iand_istore_N - .word do_ior_istore_N - .word do_ixor_istore_N - .word do_iadd_u4store - .word do_isub_u4store - .word do_iand_u4store - .word do_ior_u4store - .word do_ixor_u4store - .word do_invokespecialresolved - .word do_invokestaticresolved - .word do_undefined - .word do_undefined - .word do_undefined - .word do_undefined - .word do_undefined - .word do_undefined - .word do_undefined - .endm - .macro SUB_DISPATCH_TABLES -dispatch_iconst_m1: -dispatch_iconst_0: -dispatch_iconst_1: -dispatch_iconst_2: -dispatch_iconst_3: -dispatch_iconst_4: -dispatch_iconst_5: - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_astore - .word do_iconst_N - .word do_iconst_m1_astore - .word do_iconst_N - .word do_iconst_m1_astore - .word do_iconst_m1_istore_0 - .word do_iconst_m1_istore_0 - .word do_iconst_m1_istore_0 - .word do_iconst_m1_istore_0 - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_iadd - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_isub - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_idiv - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_ishl - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_if_icmpeq - .word do_iconst_m1_if_icmpne - .word do_iconst_m1_if_icmplt - .word do_iconst_m1_if_icmpge - .word do_iconst_m1_if_icmpgt - .word do_iconst_m1_if_icmple - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_ireturn - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_invokevfinal - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_invokeresolved - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_m1_invokespecialresolved - .word do_iconst_m1_invokestaticresolved - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N - .word do_iconst_N -dispatch_iload: -dispatch_fload: -dispatch_aload: - .word do_u4load - .word do_u4load - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_iload_iconst_m1 - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_bipush - .word do_iload_sipush - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_iload - .word do_u4load - .word do_iload_iload - .word do_u4load - .word do_iload_iload - .word do_iload_iload_0 - .word do_iload_iload_0 - .word do_iload_iload_0 - .word do_iload_iload_0 - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_aload_0 - .word do_iload_aload_0 - .word do_iload_aload_0 - .word do_iload_aload_0 - .word do_iload_iaload - .word do_u4load - .word do_iload_iaload - .word do_u4load - .word do_iload_iaload - .word do_iload_baload - .word do_iload_caload - .word do_iload_saload - .word do_iload_astore - .word do_u4load - .word do_iload_astore - .word do_u4load - .word do_iload_astore - .word do_iload_istore_0 - .word do_iload_istore_0 - .word do_iload_istore_0 - .word do_iload_istore_0 - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_astore_0 - .word do_iload_astore_0 - .word do_iload_astore_0 - .word do_iload_astore_0 - .word do_iload_iastore - .word do_u4load - .word do_iload_iastore - .word do_u4load - .word do_u4load - .word do_iload_bastore - .word do_iload_castore - .word do_iload_castore - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_iadd - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_isub - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_imul - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_idiv - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_irem - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_ineg - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_ishl - .word do_u4load - .word do_iload_ishr - .word do_u4load - .word do_iload_iushr - .word do_u4load - .word do_iload_iand - .word do_u4load - .word do_iload_ior - .word do_u4load - .word do_iload_ixor - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_i2c - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_ifeq - .word do_iload_ifne - .word do_iload_iflt - .word do_iload_ifge - .word do_iload_ifgt - .word do_iload_ifle - .word do_iload_if_icmpeq - .word do_iload_if_icmpne - .word do_iload_if_icmplt - .word do_iload_if_icmpge - .word do_iload_if_icmpgt - .word do_iload_if_icmple - .word do_iload_if_icmpeq - .word do_iload_if_icmpne - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_ireturn - .word do_u4load - .word do_iload_ireturn - .word do_u4load - .word do_iload_ireturn - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_invokeinterface - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_ifeq - .word do_iload_ifne - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_igetfield - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_invokevfinal - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_invokeresolved - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_iload_invokespecialresolved - .word do_iload_invokestaticresolved - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load - .word do_u4load -dispatch_iload_0: -dispatch_iload_1: -dispatch_iload_2: -dispatch_iload_3: - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0_iconst_m1 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_bipush - .word do_iload_0_sipush - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_iload - .word do_iload_0 - .word do_iload_0_iload - .word do_iload_0 - .word do_iload_0_iload - .word do_iload_0_iload_0 - .word do_iload_0_iload_0 - .word do_iload_0_iload_0 - .word do_iload_0_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_aload_0 - .word do_iload_0_aload_0 - .word do_iload_0_aload_0 - .word do_iload_0_aload_0 - .word do_iload_0_iaload - .word do_iload_0 - .word do_iload_0_iaload - .word do_iload_0 - .word do_iload_0_iaload - .word do_iload_0_baload - .word do_iload_0_caload - .word do_iload_0_saload - .word do_iload_0_astore - .word do_iload_0 - .word do_iload_0_astore - .word do_iload_0 - .word do_iload_0_astore - .word do_iload_0_istore_0 - .word do_iload_0_istore_0 - .word do_iload_0_istore_0 - .word do_iload_0_istore_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_iastore - .word do_iload_0 - .word do_iload_0_iastore - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_bastore - .word do_iload_0_castore - .word do_iload_0_castore - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_iadd - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_isub - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_imul - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_idiv - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_irem - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_ineg - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_ishl - .word do_iload_0 - .word do_iload_0_ishr - .word do_iload_0 - .word do_iload_0_iushr - .word do_iload_0 - .word do_iload_0_iand - .word do_iload_0 - .word do_iload_0_ior - .word do_iload_0 - .word do_iload_0_ixor - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_i2c - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_ifeq - .word do_iload_0_ifne - .word do_iload_0_iflt - .word do_iload_0_ifge - .word do_iload_0_ifgt - .word do_iload_0_ifle - .word do_iload_0_if_icmpeq - .word do_iload_0_if_icmpne - .word do_iload_0_if_icmplt - .word do_iload_0_if_icmpge - .word do_iload_0_if_icmpgt - .word do_iload_0_if_icmple - .word do_iload_0_if_icmpeq - .word do_iload_0_if_icmpne - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_ireturn - .word do_iload_0 - .word do_iload_0_ireturn - .word do_iload_0 - .word do_iload_0_ireturn - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_invokeinterface - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_ifeq - .word do_iload_0_ifne - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_invokevfinal - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_invokeresolved - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0_invokespecialresolved - .word do_iload_0_invokestaticresolved - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 - .word do_iload_0 -dispatch_aload_0: -dispatch_aload_1: -dispatch_aload_2: -dispatch_aload_3: - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0_iconst_m1 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_bipush - .word do_aload_0_sipush - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_iload - .word do_aload_0 - .word do_aload_0_iload - .word do_aload_0 - .word do_aload_0_iload - .word do_aload_0_iload_0 - .word do_aload_0_iload_0 - .word do_aload_0_iload_0 - .word do_aload_0_iload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_aload_0 - .word do_aload_0_aload_0 - .word do_aload_0_aload_0 - .word do_aload_0_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_astore - .word do_aload_0 - .word do_aload_0_astore - .word do_aload_0 - .word do_aload_0_astore - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_astore_0 - .word do_aload_0_astore_0 - .word do_aload_0_astore_0 - .word do_aload_0_astore_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_invokeinterface - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_igetfield - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_invokevfinal - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_invokeresolved - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0_invokespecialresolved - .word do_aload_0_invokestaticresolved - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 - .word do_aload_0 -dispatch_iaload: -dispatch_faload: -dispatch_aaload: - .word do_u4aload - .word do_u4aload - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_iaload_iconst_m1 - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_bipush - .word do_iaload_sipush - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_iload - .word do_u4aload - .word do_iaload_iload - .word do_u4aload - .word do_iaload_iload - .word do_iaload_iload_0 - .word do_iaload_iload_0 - .word do_iaload_iload_0 - .word do_iaload_iload_0 - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_aload_0 - .word do_iaload_aload_0 - .word do_iaload_aload_0 - .word do_iaload_aload_0 - .word do_iaload_iaload - .word do_u4aload - .word do_iaload_iaload - .word do_u4aload - .word do_iaload_iaload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_astore - .word do_u4aload - .word do_iaload_astore - .word do_u4aload - .word do_iaload_astore - .word do_iaload_istore_0 - .word do_iaload_istore_0 - .word do_iaload_istore_0 - .word do_iaload_istore_0 - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_iastore - .word do_u4aload - .word do_iaload_iastore - .word do_u4aload - .word do_u4aload - .word do_iaload_bastore - .word do_iaload_castore - .word do_iaload_castore - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_iand - .word do_u4aload - .word do_iaload_ior - .word do_u4aload - .word do_iaload_ixor - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_ifeq - .word do_iaload_ifne - .word do_iaload_iflt - .word do_iaload_ifge - .word do_iaload_ifgt - .word do_iaload_ifle - .word do_iaload_if_icmpeq - .word do_iaload_if_icmpne - .word do_iaload_if_icmplt - .word do_iaload_if_icmpge - .word do_iaload_if_icmpgt - .word do_iaload_if_icmple - .word do_iaload_if_icmpeq - .word do_iaload_if_icmpne - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_iaload_ifeq - .word do_iaload_ifne - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload - .word do_u4aload -dispatch_iadd: - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_iload - .word do_iadd - .word do_iadd_iload - .word do_iadd - .word do_iadd_iload - .word do_iadd_iload_0 - .word do_iadd_iload_0 - .word do_iadd_iload_0 - .word do_iadd_iload_0 - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_iaload - .word do_iadd - .word do_iadd_iaload - .word do_iadd - .word do_iadd_iaload - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_istore - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_istore_0 - .word do_iadd_istore_0 - .word do_iadd_istore_0 - .word do_iadd_istore_0 - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_iastore - .word do_iadd - .word do_iadd_iastore - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_isub - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_iinc - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_ifeq - .word do_iadd_ifne - .word do_iadd_iflt - .word do_iadd_ifge - .word do_iadd_ifgt - .word do_iadd_ifle - .word do_iadd_if_icmpeq - .word do_iadd_if_icmpne - .word do_iadd_if_icmplt - .word do_iadd_if_icmpge - .word do_iadd_if_icmpgt - .word do_iadd_if_icmple - .word do_iadd_if_icmpeq - .word do_iadd_if_icmpne - .word do_iadd_goto - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_ireturn - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd_ifeq - .word do_iadd_ifne - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd - .word do_iadd -dispatch_isub: - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_iload - .word do_isub - .word do_isub_iload - .word do_isub - .word do_isub_iload - .word do_isub_iload_0 - .word do_isub_iload_0 - .word do_isub_iload_0 - .word do_isub_iload_0 - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_iaload - .word do_isub - .word do_isub_iaload - .word do_isub - .word do_isub_iaload - .word do_isub - .word do_isub - .word do_isub - .word do_isub_istore - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_istore_0 - .word do_isub_istore_0 - .word do_isub_istore_0 - .word do_isub_istore_0 - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_iastore - .word do_isub - .word do_isub_iastore - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_iadd - .word do_isub - .word do_isub - .word do_isub - .word do_isub_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_iinc - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_ifeq - .word do_isub_ifne - .word do_isub_iflt - .word do_isub_ifge - .word do_isub_ifgt - .word do_isub_ifle - .word do_isub_if_icmpeq - .word do_isub_if_icmpne - .word do_isub_if_icmplt - .word do_isub_if_icmpge - .word do_isub_if_icmpgt - .word do_isub_if_icmple - .word do_isub_if_icmpeq - .word do_isub_if_icmpne - .word do_isub_goto - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_ireturn - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub_ifeq - .word do_isub_ifne - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub - .word do_isub -dispatch_iand: - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_iload - .word do_iand - .word do_iand_iload - .word do_iand - .word do_iand_iload - .word do_iand_iload_0 - .word do_iand_iload_0 - .word do_iand_iload_0 - .word do_iand_iload_0 - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_iaload - .word do_iand - .word do_iand_iaload - .word do_iand - .word do_iand_iaload - .word do_iand - .word do_iand - .word do_iand - .word do_iand_istore - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_istore_0 - .word do_iand_istore_0 - .word do_iand_istore_0 - .word do_iand_istore_0 - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_iastore - .word do_iand - .word do_iand_iastore - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_iadd - .word do_iand - .word do_iand - .word do_iand - .word do_iand_isub - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_iinc - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_ifeq - .word do_iand_ifne - .word do_iand_iflt - .word do_iand_ifge - .word do_iand_ifgt - .word do_iand_ifle - .word do_iand_if_icmpeq - .word do_iand_if_icmpne - .word do_iand_if_icmplt - .word do_iand_if_icmpge - .word do_iand_if_icmpgt - .word do_iand_if_icmple - .word do_iand_if_icmpeq - .word do_iand_if_icmpne - .word do_iand_goto - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_ireturn - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand_ifeq - .word do_iand_ifne - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand - .word do_iand -dispatch_ior: - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_iload - .word do_ior - .word do_ior_iload - .word do_ior - .word do_ior_iload - .word do_ior_iload_0 - .word do_ior_iload_0 - .word do_ior_iload_0 - .word do_ior_iload_0 - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_iaload - .word do_ior - .word do_ior_iaload - .word do_ior - .word do_ior_iaload - .word do_ior - .word do_ior - .word do_ior - .word do_ior_istore - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_istore_0 - .word do_ior_istore_0 - .word do_ior_istore_0 - .word do_ior_istore_0 - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_iastore - .word do_ior - .word do_ior_iastore - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_iadd - .word do_ior - .word do_ior - .word do_ior - .word do_ior_isub - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_iinc - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_ifeq - .word do_ior_ifne - .word do_ior_iflt - .word do_ior_ifge - .word do_ior_ifgt - .word do_ior_ifle - .word do_ior_if_icmpeq - .word do_ior_if_icmpne - .word do_ior_if_icmplt - .word do_ior_if_icmpge - .word do_ior_if_icmpgt - .word do_ior_if_icmple - .word do_ior_if_icmpeq - .word do_ior_if_icmpne - .word do_ior_goto - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_ireturn - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior_ifeq - .word do_ior_ifne - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior - .word do_ior -dispatch_ixor: - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_iload - .word do_ixor - .word do_ixor_iload - .word do_ixor - .word do_ixor_iload - .word do_ixor_iload_0 - .word do_ixor_iload_0 - .word do_ixor_iload_0 - .word do_ixor_iload_0 - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_iaload - .word do_ixor - .word do_ixor_iaload - .word do_ixor - .word do_ixor_iaload - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_istore - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_istore_0 - .word do_ixor_istore_0 - .word do_ixor_istore_0 - .word do_ixor_istore_0 - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_iastore - .word do_ixor - .word do_ixor_iastore - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_iadd - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_isub - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_iinc - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_ifeq - .word do_ixor_ifne - .word do_ixor_iflt - .word do_ixor_ifge - .word do_ixor_ifgt - .word do_ixor_ifle - .word do_ixor_if_icmpeq - .word do_ixor_if_icmpne - .word do_ixor_if_icmplt - .word do_ixor_if_icmpge - .word do_ixor_if_icmpgt - .word do_ixor_if_icmple - .word do_ixor_if_icmpeq - .word do_ixor_if_icmpne - .word do_ixor_goto - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_ireturn - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor_ifeq - .word do_ixor_ifne - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor - .word do_ixor -dispatch_iinc: - .word do_iinc - .word do_iinc - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc_iconst_m1 - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc_iload - .word do_iinc - .word do_iinc_iload - .word do_iinc - .word do_iinc_iload - .word do_iinc_iload_0 - .word do_iinc_iload_0 - .word do_iinc_iload_0 - .word do_iinc_iload_0 - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc - .word do_iinc -dispatch_iaccess_0: -dispatch_iaccess_1: -dispatch_iaccess_2: -dispatch_iaccess_3: - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0_iload - .word do_iaccess_0 - .word do_iaccess_0_iload - .word do_iaccess_0 - .word do_iaccess_0_iload - .word do_iaccess_0_iload_0 - .word do_iaccess_0_iload_0 - .word do_iaccess_0_iload_0 - .word do_iaccess_0_iload_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0_iadd - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0_ifeq - .word do_iaccess_0_ifne - .word do_iaccess_0_iflt - .word do_iaccess_0_ifge - .word do_iaccess_0_ifgt - .word do_iaccess_0_ifle - .word do_iaccess_0_if_icmpeq - .word do_iaccess_0_if_icmpne - .word do_iaccess_0_if_icmplt - .word do_iaccess_0_if_icmpge - .word do_iaccess_0_if_icmpgt - .word do_iaccess_0_if_icmple - .word do_iaccess_0_if_icmpeq - .word do_iaccess_0_if_icmpne - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0_ifeq - .word do_iaccess_0_ifne - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 - .word do_iaccess_0 -dispatch_iload_0_iconst_N: -dispatch_iload_1_iconst_N: -dispatch_iload_2_iconst_N: -dispatch_iload_3_iconst_N: - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_iadd - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_isub - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_iand - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_ior - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_ixor - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N_iadd_istore_N - .word do_iload_0_iconst_N_isub_istore_N - .word do_iload_0_iconst_N_iand_istore_N - .word do_iload_0_iconst_N_ior_istore_N - .word do_iload_0_iconst_N_ixor_istore_N - .word do_iload_0_iconst_N_iadd_u4store - .word do_iload_0_iconst_N_isub_u4store - .word do_iload_0_iconst_N_iand_u4store - .word do_iload_0_iconst_N_ior_u4store - .word do_iload_0_iconst_N_ixor_u4store - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N - .word do_iload_0_iconst_N -dispatch_iload_iconst_N: - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N_iadd - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N_isub - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N_iand - .word do_iload_iconst_N - .word do_iload_iconst_N_ior - .word do_iload_iconst_N - .word do_iload_iconst_N_ixor - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N_iadd_istore_N - .word do_iload_iconst_N_isub_istore_N - .word do_iload_iconst_N_iand_istore_N - .word do_iload_iconst_N_ior_istore_N - .word do_iload_iconst_N_ixor_istore_N - .word do_iload_iconst_N_iadd_u4store - .word do_iload_iconst_N_isub_u4store - .word do_iload_iconst_N_iand_u4store - .word do_iload_iconst_N_ior_u4store - .word do_iload_iconst_N_ixor_u4store - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .word do_iload_iconst_N - .endm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ports/hotspot/src/cpu/zero/vm/bytecodes_arm.def Fri Aug 21 13:36:15 2009 +0200 @@ -0,0 +1,7863 @@ +nop = 0x00, 1 +aconst_null = 0x01, 1 +iconst_m1 = 0x02, 1 +iconst_0 = 0x03, 1 +iconst_1 = 0x04, 1 +iconst_2 = 0x05, 1 +iconst_3 = 0x06, 1 +iconst_4 = 0x07, 1 +iconst_5 = 0x08, 1 +lconst_0 = 0x09, 1 +lconst_1 = 0x0a, 1 +fconst_0 = 0x0b, 1 +fconst_1 = 0x0c, 1 +fconst_2 = 0x0d, 1 +dconst_0 = 0x0e, 1 +dconst_1 = 0x0f, 1 +bipush = 0x10, 2 +sipush = 0x11, 3 +ldc = 0x12, 2 +ldc_w = 0x13, 3 +ldc2_w = 0x14, 3 +iload = 0x15, 2 +lload = 0x16, 2 +fload = 0x17, 2 +dload = 0x18, 2 +aload = 0x19, 2 +iload_0 = 0x1a, 1 +iload_1 = 0x1b, 1 +iload_2 = 0x1c, 1 +iload_3 = 0x1d, 1 +lload_0 = 0x1e, 1 +lload_1 = 0x1f, 1 +lload_2 = 0x20, 1 +lload_3 = 0x21, 1 +fload_0 = 0x22, 1 +fload_1 = 0x23, 1 +fload_2 = 0x24, 1 +fload_3 = 0x25, 1 +dload_0 = 0x26, 1 +dload_1 = 0x27, 1 +dload_2 = 0x28, 1 +dload_3 = 0x29, 1 +aload_0 = 0x2a, 1 +aload_1 = 0x2b, 1 +aload_2 = 0x2c, 1 +aload_3 = 0x2d, 1 +iaload = 0x2e, 1 +laload = 0x2f, 1 +faload = 0x30, 1 +daload = 0x31, 1 +aaload = 0x32, 1 +baload = 0x33, 1 +caload = 0x34, 1 +saload = 0x35, 1 +istore = 0x36, 2 +lstore = 0x37, 2 +fstore = 0x38, 2 +dstore = 0x39, 2 +astore = 0x3a, 2 +istore_0 = 0x3b, 1 +istore_1 = 0x3c, 1 +istore_2 = 0x3d, 1 +istore_3 = 0x3e, 1 +lstore_0 = 0x3f, 1 +lstore_1 = 0x40, 1 +lstore_2 = 0x41, 1 +lstore_3 = 0x42, 1 +fstore_0 = 0x43, 1 +fstore_1 = 0x44, 1 +fstore_2 = 0x45, 1 +fstore_3 = 0x46, 1 +dstore_0 = 0x47, 1 +dstore_1 = 0x48, 1 +dstore_2 = 0x49, 1 +dstore_3 = 0x4a, 1 +astore_0 = 0x4b, 1 +astore_1 = 0x4c, 1 +astore_2 = 0x4d, 1 +astore_3 = 0x4e, 1 +iastore = 0x4f, 1 +lastore = 0x50, 1 +fastore = 0x51, 1 +dastore = 0x52, 1 +aastore = 0x53, 1 +bastore = 0x54, 1 +castore = 0x55, 1 +sastore = 0x56, 1 +pop = 0x57, 1 +pop2 = 0x58, 1 +dup = 0x59, 1 +dup_x1 = 0x5a, 1 +dup_x2 = 0x5b, 1 +dup2 = 0x5c, 1 +dup2_x1 = 0x5d, 1 +dup2_x2 = 0x5e, 1 +swap = 0x5f, 1 +iadd = 0x60, 1 +ladd = 0x61, 1 +fadd = 0x62, 1 +dadd = 0x63, 1 +isub = 0x64, 1 +lsub = 0x65, 1 +fsub = 0x66, 1 +dsub = 0x67, 1 +imul = 0x68, 1 +lmul = 0x69, 1 +fmul = 0x6a, 1 +dmul = 0x6b, 1 +idiv = 0x6c, 1 +ldiv = 0x6d, 1 +fdiv = 0x6e, 1 +ddiv = 0x6f, 1 +irem = 0x70, 1 +lrem = 0x71, 1 +frem = 0x72, 1 +drem = 0x73, 1 +ineg = 0x74, 1 +lneg = 0x75, 1 +fneg = 0x76, 1 +dneg = 0x77, 1 +ishl = 0x78, 1 +lshl = 0x79, 1 +ishr = 0x7a, 1 +lshr = 0x7b, 1 +iushr = 0x7c, 1 +lushr = 0x7d, 1 +iand = 0x7e, 1 +land = 0x7f, 1 +ior = 0x80, 1 +lor = 0x81, 1 +ixor = 0x82, 1 +lxor = 0x83, 1 +iinc = 0x84, 3 +i2l = 0x85, 1 +i2f = 0x86, 1 +i2d = 0x87, 1 +l2i = 0x88, 1 +l2f = 0x89, 1 +l2d = 0x8a, 1 +f2i = 0x8b, 1 +f2l = 0x8c, 1 +f2d = 0x8d, 1 +d2i = 0x8e, 1 +d2l = 0x8f, 1 +d2f = 0x90, 1 +i2b = 0x91, 1 +i2c = 0x92, 1 +i2s = 0x93, 1 +lcmp = 0x94, 1 +fcmpl = 0x95, 1 +fcmpg = 0x96, 1 +dcmpl = 0x97, 1 +dcmpg = 0x98, 1 +ifeq = 0x99, 0 +ifne = 0x9a, 0 +iflt = 0x9b, 0 +ifge = 0x9c, 0 +ifgt = 0x9d, 0 +ifle = 0x9e, 0 +if_icmpeq = 0x9f, 0 +if_icmpne = 0xa0, 0 +if_icmplt = 0xa1, 0 +if_icmpge = 0xa2, 0 +if_icmpgt = 0xa3, 0 +if_icmple = 0xa4, 0 +if_acmpeq = 0xa5, 0 +if_acmpne = 0xa6, 0 +goto = 0xa7, 0 +jsr = 0xa8, 0 +ret = 0xa9, 0 +tableswitch = 0xaa, 0 +lookupswitch = 0xab, 0 +ireturn = 0xac, 0 +lreturn = 0xad, 0 +freturn = 0xae, 0 +dreturn = 0xaf, 0 +areturn = 0xb0, 0 +return = 0xb1, 0 +getstatic = 0xb2, 3 +putstatic = 0xb3, 3 +getfield = 0xb4, 3 +putfield = 0xb5, 3 +invokevirtual = 0xb6, 3 +invokespecial = 0xb7, 3 +invokestatic = 0xb8, 3 +invokeinterface = 0xb9, 0 +new = 0xbb, 3 +newarray = 0xbc, 2 +anewarray = 0xbd, 3 +arraylength = 0xbe, 1 +athrow = 0xbf, 0 +checkcast = 0xc0, 3 +instanceof = 0xc1, 3 +monitorenter = 0xc2, 1 +monitorexit = 0xc3, 1 +wide = 0xc4, 1 +multianewarray = 0xc5, 4 +ifnull = 0xc6, 0 +ifnonnull = 0xc7, 0 +goto_w = 0xc8, 0 +jsr_w = 0xc9, 0 +breakpoint = 0xca, 0 + +#agetfield = 0xcb, 3 +bgetfield = 0xcc, 3 +cgetfield = 0xcd, 3 +#dgetfield = 0xce, 3 +#fgetfield = 0xcf, 3 +igetfield = 0xd0, 3 +lgetfield = 0xd1, 3 +sgetfield = 0xd2, 3 + +aputfield = 0xd3, 3 +bputfield = 0xd4, 3 +cputfield = 0xd5, 3 +#dputfield = 0xd6, 3 +#fputfield = 0xd7, 3 +iputfield = 0xd8, 3 +lputfield = 0xd9, 3 +#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 + +return_register_finalizer = 229, 0 + +(nop) { + DISPATCH \seq_len +} + +(aconst_null,fconst_0) u4const_0 { + DISPATCH_START \seq_len + mov lr, #0 + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) iconst_N { + sub lr, r0, #opc_iconst_0 + DISPATCH_START \seq_len + PUSH lr + DISPATCH_FINISH +} + +(lconst_0,dconst_0) u8const_0 { + DISPATCH_START \seq_len + mov tmp1, #0 + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(lconst_1) lconst_1 { + DISPATCH_START \seq_len + mov tmp2, #1 + DISPATCH_NEXT + mov tmp1, #0 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(fconst_1) fconst_1 { + DISPATCH_START \seq_len + mov tmp1, #0x3f800000 + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(fconst_2) fconst_2 { + DISPATCH_START \seq_len + mov r2, #0x40000000 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(dconst_1) dconst_1 { + DISPATCH_START \seq_len + mov tmp1, #0x3f000000 + DISPATCH_NEXT + orr tmp1, tmp1, #0x00f00000 + DISPATCH_NEXT + mov tmp2, #0 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(bipush) bipush { + DISPATCH_START \seq_len + mov tmp1, r2, lsl #24 + DISPATCH_NEXT + mov tmp1, tmp1, asr #24 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +# r1 = [jpc, #2] +(sipush) sipush { + DISPATCH_START \seq_len + mov tmp1, r1 + DISPATCH_NEXT + mov r2, r2, lsl #24 + DISPATCH_NEXT + orr tmp1, tmp1, r2, asr #16 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload,fload,aload) u4load { + DISPATCH_START \seq_len + rsb tmp1, r2, #0 + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(lload,dload) u8load { + DISPATCH_START \seq_len + sub r3, locals, r2, lsl #2 + DISPATCH_NEXT + ldmda r3, {tmp2, tmp1} + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(aload_0,aload_1,aload_2,aload_3) { + rsb tmp1, r0, #opc_aload_0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) { + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(fload_0,fload_1,fload_2,fload_3) { + rsb tmp1, r0, #opc_fload_0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(lload_0,dload_0) u8load_0 { + DISPATCH_START \seq_len + ldmda locals, {tmp2-tmp1} + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lload_1,dload_1) u8load_1 { + DISPATCH_START \seq_len + ldmdb locals, {tmp2-tmp1} + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lload_2,dload_2) u8load_2 { + DISPATCH_START \seq_len + ldr tmp2, [locals, #-12] + DISPATCH_NEXT + ldr tmp1, [locals, #-8] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(lload_3,dload_3) u8load_3 { + DISPATCH_START \seq_len + ldr tmp2, [locals, #-16] + DISPATCH_NEXT + ldr tmp1, [locals, #-12] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(iaload,faload,aaload) u4aload { + POP2 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 +.abortentry5: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + DISPATCH_NEXT + ldr tmp1, [r3, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(laload,daload) u8aload { + POP2 r2, r3 + DISPATCH_START \seq_len +#ifndef HW_NULL_PTR_CHECK + cmp r3, #0 + beq null_ptr_exception_jpc_1 +#endif +.abortentry6: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #3 + ldr tmp2, [r3, #16] + DISPATCH_NEXT + ldr tmp1, [r3, #20] + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(baload) baload { + POP2 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 +.abortentry7: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2 + DISPATCH_NEXT + ldrsb tmp1, [r3, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(caload) caload { + POP2 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 +.abortentry8: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #1 + DISPATCH_NEXT + ldrh tmp1, [r3, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(saload) saload { + POP2 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 +.abortentry9: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #1 + DISPATCH_NEXT + ldrsh tmp1, [r3, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(astore,istore,fstore) u4store { + DISPATCH_START \seq_len + rsb tmp1, r2, #0 + DISPATCH_NEXT + POP r3 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str r3, [locals, tmp1, lsl #2] + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(lstore,dstore) u8store { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + sub r3, locals, r2, lsl #2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + stmda r3, {tmp2, tmp1} + DISPATCH_FINISH +} + +(astore_0,istore_0,fstore_0) u4store_0 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #0] + DISPATCH_FINISH +} + +(astore_1,istore_1,fstore_1) u4store_1 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #-4] + DISPATCH_FINISH +} + +(astore_2,istore_2,fstore_2) u4store_2 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #-8] + DISPATCH_FINISH +} + +(astore_3,istore_3,fstore_3) u4store_3 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #-12] + DISPATCH_FINISH +} + +(lstore_0,dstore_0) u8store_0 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP2 tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + stmda locals, {tmp2, tmp1} + DISPATCH_FINISH +} + +(lstore_1,dstore_1) u8store_1 { + DISPATCH_START \seq_len + DISPATCH_NEXT + POP2 tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + stmdb locals, {tmp2, tmp1} + DISPATCH_FINISH +} + +(lstore_2,dstore_2) u8store_2 { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + str tmp2, [locals, #-12] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #-8] + DISPATCH_FINISH +} + +(lstore_3,dstore_3) u8store_3 { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + str tmp2, [locals, #-16] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + str tmp1, [locals, #-12] + DISPATCH_FINISH +} + +(iastore,fastore) u4astore { + POP3 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 +.abortentry10: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp tmp2, lr + bcs array_bound_exception_jpc_1_tmp2 + DISPATCH_NEXT + add tmp1, tmp1, tmp2, lsl #2 + DISPATCH_NEXT + str r3, [tmp1, #12] + DISPATCH_FINISH +} + +(lastore,dastore) u8astore { + POP4 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 +.abortentry11: + ldr ip, [tmp1, #8] @ ip = limit + cmp tmp2, ip + DISPATCH_NEXT + bcs array_bound_exception_jpc_1_tmp2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2, lsl #3 + str r2, [tmp2, #16] + DISPATCH_NEXT + DISPATCH_NEXT + str r3, [tmp2, #20] + DISPATCH_FINISH +} + +(bastore) bastore { + POP3 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 +.abortentry12: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp tmp2, lr + bcs array_bound_exception_jpc_1_tmp2 + DISPATCH_NEXT + add tmp1, tmp1, tmp2 + DISPATCH_NEXT + strb r3, [tmp1, #12] + DISPATCH_FINISH +} + +(castore,sastore) u2astore { + POP3 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 +.abortentry13: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp tmp2, lr + bcs array_bound_exception_jpc_1_tmp2 + DISPATCH_NEXT + add tmp1, tmp1, tmp2, lsl #1 + DISPATCH_NEXT + strh r3, [tmp1, #12] + DISPATCH_FINISH +} + +(pop) jpop { + DISPATCH_START \seq_len + add stack, stack, #4 + DISPATCH_FINISH +} + +(pop2) jpop2 { + DISPATCH_START \seq_len + add stack, stack, #8 + DISPATCH_FINISH +} + +(dup) dup { + DISPATCH_START \seq_len + ldr lr, [stack, #4] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(dup_x1) dup_x1 { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + PUSH r2 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(dup_x2) dup_x2 { + DISPATCH_START \seq_len + POP3 r2, r3, lr + DISPATCH_NEXT + PUSH r2 + DISPATCH_NEXT + PUSH3 r2, r3, lr + DISPATCH_FINISH +} + +(dup2) dup2 { + DISPATCH_START \seq_len + ldmib stack, {r2, r3} + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(dup2_x1) dup2_x1 { + DISPATCH_START \seq_len + POP3 r2, r3, lr + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_NEXT + PUSH3 r2, r3, lr + DISPATCH_FINISH +} + +(dup2_x2) dup2_x2 { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + PUSH2 r2, r3 + PUSH4 r2, r3, tmp1, lr + DISPATCH_FINISH +} + +(swap) swap { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + PUSH r2 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + + +(iadd) iadd { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + add tmp2, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(ladd) ladd { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + adds r2, r2, tmp1 + adc r3, r3, lr + DISPATCH_NEXT + PUSH2 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 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lsub) lsub { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + subs r2, tmp1, r2 + sbc r3, lr, r3 + DISPATCH_NEXT + PUSH2 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 + DISPATCH_NEXT + mul tmp2, r2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lmul) lmul { + POP4 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 + DISPATCH_FINISH +} + +(fmul) fmul { + POP2 r0, r1 + bl __aeabi_fmul + PUSH r0 + DISPATCH \seq_len +} + +(ldiv) ldiv { + POP2 r2, r3 + POP2 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 + DISPATCH \seq_len +} + +(lrem) lrem { + POP2 r2, r3 + POP2 r0, r1 + orrs lr, r2, r3 + beq .lrem_0 + bl __aeabi_ldivmod + PUSH2 r2, r3 + DISPATCH \seq_len +} + +(frem) frem { +@ ECN: It must be possible to do better than this + POP r0 + bl __aeabi_f2d + PUSH2 r0, r1 + GET_STACK 2, r0 + bl __aeabi_f2d + POP2 r2, r3 + bl fmod + bl __aeabi_d2f + PUT_STACK 0, r0 + DISPATCH \seq_len +} + +(drem) drem { + POP2 r2, r3 + POP2 r0, r1 + bl fmod + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(ineg) ineg { + DISPATCH_START \seq_len + POP tmp1 + DISPATCH_NEXT + rsb tmp1, tmp1, #0 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(lneg) lneg { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + rsbs r2, r2, #0 + rsc r3, r3, #0 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(fneg) fneg { + DISPATCH_START \seq_len + POP r2 + DISPATCH_NEXT + eor r2, r2, #0x80000000 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(dneg) dneg { + DISPATCH_START \seq_len + GET_STACK 1, r2 + DISPATCH_NEXT + eor r2, r2, #0x80000000 + DISPATCH_NEXT + PUT_STACK 1, r2 + DISPATCH_FINISH +} + +(ishl) ishl { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + and r2, r2, #31 + mov r2, r3, lsl r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(lshl) lshl { + DISPATCH_START \seq_len + POP3 r2, r3, lr + DISPATCH_NEXT + tst r2, #32 + and r2, r2, #31 + movne tmp1, #0 + movne lr, r3, lsl r2 + moveq tmp1, r3, lsl r2 + moveq lr, lr, lsl r2 + rsbeq r2, r2, #32 + orreq lr, lr, r3, lsr r2 + PUSH2 tmp1, lr + DISPATCH_FINISH +} + +(ishr) ishr { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + and r2, r2, #31 + mov r2, r3, asr r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(lshr) lshr { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + tst r2, #32 + and r2, r2, #31 + movne lr, tmp1, asr #31 + movne r3, tmp1, asr r2 + moveq lr, tmp1, asr r2 + moveq r3, r3, lsr r2 + rsbeq r2, r2, #32 + orreq r3, r3, tmp1, lsl r2 + PUSH2 r3, lr + DISPATCH_FINISH +} + +(iushr) iushr { + DISPATCH_START \seq_len + POP2 r2, r3 + DISPATCH_NEXT + and r2, r2, #31 + mov r2, r3, lsr r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(lushr) lushr { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + tst r2, #32 + and r2, r2, #31 + movne lr, #0 + movne r3, tmp1, lsr r2 + moveq lr, tmp1, lsr r2 + moveq r3, r3, lsr r2 + rsbeq r2, r2, #32 + orreq r3, r3, tmp1, lsl r2 + PUSH2 r3, lr + DISPATCH_FINISH +} + +(iand) iand { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(land) land { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + and r2, tmp1, r2 + and r3, lr, r3 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(ior) ior { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lor) lor { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + orr r2, tmp1, r2 + orr r3, lr, r3 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(ixor) ixor { + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lxor) lxor { + DISPATCH_START \seq_len + POP4 r2, r3, tmp1, lr + DISPATCH_NEXT + eor r2, tmp1, r2 + eor r3, lr, r3 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iinc) iinc { + ldrsb lr, [jpc, #2] + DISPATCH_START \seq_len + rsb tmp1, r2, #0 + DISPATCH_NEXT + ldr r3, [locals, tmp1, lsl #2] + DISPATCH_NEXT + add r3, r3, lr + DISPATCH_NEXT + DISPATCH_NEXT + str r3, [locals, tmp1, lsl #2] + DISPATCH_FINISH +} + +(i2l) i2l { + DISPATCH_START \seq_len + POP r2 + DISPATCH_NEXT + mov r3, r2, asr #31 + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(i2f) i2f { + POP r0 + bl __aeabi_i2f + PUSH r0 + DISPATCH \seq_len +} + +(i2d) i2d { + POP r0 + bl __aeabi_i2d + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(l2i) l2i { + DISPATCH_START \seq_len + POP r3 + DISPATCH_NEXT + PUT_STACK 0, r3 + DISPATCH_FINISH +} + +(l2f) l2f { + POP2 r0, r1 + bl __aeabi_l2f + PUSH r0 + DISPATCH \seq_len +} + +(l2d) l2d { + POP2 r0, r1 + bl __aeabi_l2d + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(f2i) f2i { + POP r0 + bl _ZN13SharedRuntime3f2iEf + PUSH r0 + DISPATCH \seq_len +} + +(f2l) f2l { + POP r0 + bl _ZN13SharedRuntime3f2lEf + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(f2d) f2d { + POP r0 + bl __aeabi_f2d + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(d2i) d2i { + POP2 r0, r1 + bl _ZN13SharedRuntime3d2iEd + PUSH r0 + DISPATCH \seq_len +} + +(d2l) d2l { + POP2 r0, r1 + bl _ZN13SharedRuntime3d2lEd + PUSH2 r0, r1 + DISPATCH \seq_len +} + +(d2f) d2f { + POP2 r0, r1 + bl __aeabi_d2f + PUSH r0 + DISPATCH \seq_len +} + +(i2b) i2b { + DISPATCH_START \seq_len + POP r3 + DISPATCH_NEXT + mov r3, r3, asl #24 + mov r3, r3, asr #24 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(i2c) i2c { + DISPATCH_START \seq_len + POP r3 + DISPATCH_NEXT + mov r3, r3, asl #16 + mov r3, r3, lsr #16 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(i2s) i2s { + DISPATCH_START \seq_len + POP r3 + DISPATCH_NEXT + mov r3, r3, asl #16 + mov r3, r3, asr #16 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(lcmp) lcmp { + POP4 r2, r3, tmp1, lr + DISPATCH_START \seq_len + subs r2, tmp1, r2 + movne r2, #1 + sbcs lr, lr, r3 + DISPATCH_NEXT + movne r2, #1 + rsblt r2, r2, #0 + DISPATCH_NEXT + PUSH r2 + 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 +} + +# r2 = [jpc, #1] +# r1 = [jpc, #2] +(ifeq,ifnull) ifeq_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ifne,ifnonnull) ifne_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iflt) iflt_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ifge) ifge_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ifgt) ifgt_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ifle) ifle_unsafe { + POP r3 + mov r2, r2, lsl #24 + cmp r3, #0 + orr ip, r1, r2, asr #16 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmpeq,if_acmpeq) if_icmpeq_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmpne,if_acmpne) if_icmpne_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmplt) if_icmplt_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmpge) if_icmpge_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmpgt) if_icmpgt_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(if_icmple) if_icmple_unsafe { + POP2 r3, tmp1 + mov r2, r2, lsl #24 + cmp tmp1, r3 + orr ip, r1, r2, asr #16 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(goto) goto_unsafe { + mov r2, r2, lsl #24 + orr ip, r1, r2, asr #16 + DISPATCH_START_REG ip + DISPATCH_BYTECODE +} + +(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 +} + +# r2 = [jpc, #1] +# r1 = [jpc, #2] +(ret) ret { + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [r0, #8] + ldr r1, [locals, -r2, lsl #2] + add jpc, r3, r1 + DISPATCH 48 +} + +# ECN: We dont do safe and unsafe versions of tableswitch and lookupswitch +(tableswitch) tableswitch { + POP a2 + bic a1, jpc, #3 + ldr a4,[a1,#8] +@ BYTESEX_REVERSE a3, a4, a3 + + eor a3, a4, a4, ror #16 + bic a3, a3, #0xff0000 + mov a4, a4, ror #8 + eor a3, a4, a3, lsr #8 + + ldr a4,[a1,#12] +@ BYTESEX_REVERSE a4, a4, ip + + eor ip, a4, a4, ror #16 + bic ip, ip, #0xff0000 + mov a4, a4, ror #8 + eor a4, a4, ip, lsr #8 + + sub a2,a2,a3 + sub a4,a4,a3 + cmp a4,a2 + ldrcc a1,[a1,#4] + addcs a1,a1,a2,LSL #2 + ldrcs a1,[a1,#16] +@ BYTESEX_REVERSE a1, a1, a4 + + eor a4, a1, a1, ror #16 + bic a4, a4, #0xff0000 + mov a1, a1, ror #8 + eors ip, a1, a4, lsr #8 + + DISPATCH_START_REG ip + DISPATCH_BYTECODE +} + +(lookupswitch) lookupswitch { + POP a2 + bic a1, jpc, #3 +@ BYTESEX_REVERSE a2, a2, ip + + eor ip, a2, a2, ror #16 + bic ip, ip, #0xff0000 + mov a2, a2, ror #8 + eor a2, a2, ip, lsr #8 + + ldr a3,[a1,#8] +@ BYTESEX_REVERSE a3, a3, ip + + eor ip, a3, a3, ror #16 + bic ip, ip, #0xff0000 + mov a3, a3, ror #8 + eor a3, a3, ip, lsr #8 + + subs a4,a3,#1 + bmi 1f + add a1, a1, #4 +0: + ldr a3,[a1,#8]! + cmp a3,a2 + beq 2f + subs a4,a4,#1 + bpl 0b +1: + bic a1, jpc, #3 +2: + ldr a2,[a1,#4] +@ BYTESEX_REVERSE a2, a2, ip + + eor ip, a2, a2, ror #16 + bic ip, ip, #0xff0000 + mov a2, a2, ror #8 + eors ip, a2, ip, lsr #8 + + DISPATCH_START_REG ip + DISPATCH_BYTECODE +} + +(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] + DISPATCH_NEXT +.abortentry78: + ldr tmp2, [tmp1, tmp2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(bgetfield) bgetfield { + 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] + DISPATCH_NEXT +.abortentry79: + ldrsb tmp2, [tmp1, tmp2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(cgetfield) cgetfield { + 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] + DISPATCH_NEXT +.abortentry80: + ldrh tmp2, [tmp1, tmp2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(sgetfield) sgetfield { + 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] + DISPATCH_NEXT +.abortentry81: + ldrsh tmp2, [tmp1, tmp2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(lgetfield) lgetfield { + 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] + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT +.abortentry82: + ldmia tmp2, {tmp2, tmp1} + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(iputfield) iputfield { + DISPATCH_START 3 + add tmp2, constpool, r1, lsl #12 + POP2 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] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT +.abortentry83: + str r3, [tmp1, tmp2] + DISPATCH_FINISH +} + +(cputfield) cputfield { + DISPATCH_START 3 + add tmp2, constpool, r1, lsl #12 + POP2 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] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT +.abortentry84: + strh r3, [tmp1, tmp2] + DISPATCH_FINISH +} + +(bputfield) bputfield { + DISPATCH_START 3 + add tmp2, constpool, r1, lsl #12 + POP2 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] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT +.abortentry85: + strb r3, [tmp1, tmp2] + DISPATCH_FINISH +} + +(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 + bl oop_store + ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] + DISPATCH_START 3 + POP r2 + ldr r3, [r3, #0] + DISPATCH_NEXT + ldr r3, [r3, #12] + DISPATCH_NEXT + ldr r3, [r3, #76] + mov tmp2, #0 + strb tmp2, [r3, r2, lsr #9] + DISPATCH_FINISH +} + +(lputfield) lputfield { + DISPATCH_START 3 + add tmp2, constpool, r1, lsl #12 + POP3 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] + DISPATCH_NEXT + add tmp2, lr, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT +.abortentry86: + stm tmp2, {r3, tmp1} + DISPATCH_FINISH +} + +# 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 + and r3, r3, #0x00ff0000 + cmp r3, #178 << 16 + bne resolve_getstatic + ldr r3, [tmp2, #4] + ldr r2, [tmp2, #12] + ldr lr, [tmp2, #8] + movs r2, r2, lsr #29 + bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 + bcs getstatic_h @ C = 1 => R2 = 1 + beq getstatic_sb @ Z = 1 => R2 = 0 + tst r2, #2 + bne getstatic_dw + b getstatic_sh +} + +# 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 + 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 + movs lr, lr, lsr #29 + bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 + bcs putstatic_h @ C = 1 => R2 = 1 + beq putstatic_sb @ Z = 1 => R2 = 0 + tst lr, #2 + bne putstatic_dw + b putstatic_sh +} + +(return) return_unsafe { + + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + ldr tmp_xxx, [istate, #ISTATE_THREAD] + + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + + ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [r2, #0] + ldrh r0, [r0, #40] + add r1, r2, #4 + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + add stack, r1, r0, lsl #2 + cmp istate, #0 + beq normal_return + + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT + add r2, r2, #4 + DISPATCH_NEXT + 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] + DISPATCH_NEXT + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + bl return_check_monitors + b 2b +} + +(ireturn,areturn,freturn) ireturn_unsafe { + + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + ldr tmp_xxx, [istate, #ISTATE_THREAD] + + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + + POP r1 @ pop result before we lose stack + + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + bl return_check_monitors + b 2b +} + +(lreturn,dreturn) lreturn_unsafe { + + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + + ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [r2, #0] + ldrh r0, [r0, #40] + add r1, r2, #4 + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + + POP2 r2, r3 + + add stack, r1, r0, lsl #2 + stmdb stack!, {r2, r3} + cmp istate, #0 + beq normal_return + + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT + add r2, r2, #4 + DISPATCH_NEXT + 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] + DISPATCH_NEXT + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + bl return_check_monitors + b 2b +} + +(ldc) ldc { + ldrb lr, [jpc, #1] + ldr r3, [istate, #ISTATE_METHOD] @ method + + DISPATCH_START \seq_len + + ldr r2, [r3, #12] @ constants + ldr r3, [r2, #8] + add r3, r3, #12 + ldrb r3, [r3, lr] + + 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 + DISPATCH_FINISH +1: + cmp r3, #JVM_CONSTANT_Class + bne 2f + add r0, r2, #32 + ldr r0, [r0, lr, lsl #2] + ldr r1, [r0, #60] + PUSH r1 + DISPATCH 0 +2: + sub jpc, jpc, #\seq_len + ldr r0, [istate, #ISTATE_THREAD] + str jpc, [istate, #ISTATE_BCP] + str stack, [istate, #ISTATE_STACK] + mov r1, #0 + bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb + ldr r0, [istate, #ISTATE_THREAD] @ thread + ldr stack, [istate, #ISTATE_STACK] + ldr constpool, [istate, #ISTATE_CONSTANTS] + ldr r1, [r0, #THREAD_PENDING_EXC] + ldr jpc, [istate, #ISTATE_BCP] + add constpool, constpool, #CONST_POOL_OFFSET + cmp r1, #0 + ldr locals, [istate, #ISTATE_LOCALS] + bne handle_exception + ldr r3, [r0, #THREAD_VM_RESULT] + mov r2, #0 + PUSH r3 + str r2, [r0, #THREAD_VM_RESULT] + DISPATCH \seq_len +} + +(ldc_w) ldc_w { + ldrb lr, [jpc, #1] + + ldr r3, [istate, #ISTATE_METHOD] @ method + ldrb ip, [jpc, #2] + ldr r2, [r3, #12] @ constants + + DISPATCH_START \seq_len + + ldr r3, [r2, #8] + orr lr, ip, lr, lsl #8 + add r3, r3, #12 + ldrb r3, [r3, lr] + + 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 + DISPATCH_FINISH +1: + cmp r3, #JVM_CONSTANT_Class + bne 2f + add r0, r2, #32 + ldr r0, [r0, lr, lsl #2] + ldr r1, [r0, #60] + PUSH r1 + DISPATCH 0 +2: + sub jpc, jpc, #\seq_len + ldr r0, [istate, #ISTATE_THREAD] + str jpc, [istate, #ISTATE_BCP] + str stack, [istate, #ISTATE_STACK] + mov r1, #1 + bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb + ldr r0, [istate, #ISTATE_THREAD] @ thread + ldr stack, [istate, #ISTATE_STACK] + ldr constpool, [istate, #ISTATE_CONSTANTS] + ldr r1, [r0, #THREAD_PENDING_EXC] + ldr jpc, [istate, #ISTATE_BCP] + add constpool, constpool, #CONST_POOL_OFFSET + cmp r1, #0 + ldr locals, [istate, #ISTATE_LOCALS] + bne handle_exception + ldr r3, [r0, #THREAD_VM_RESULT] + mov r2, #0 + PUSH r3 + str r2, [r0, #THREAD_VM_RESULT] + DISPATCH \seq_len +} + +(ldc2_w) ldc2_w { + ldrb r3, [jpc, #1] + + ldr tmp1, [istate, #ISTATE_METHOD] @ method + ldrb lr, [jpc, #2] + ldr r2, [tmp1, #12] @ constants + + DISPATCH_START \seq_len + + ldr tmp1, [r2, #8] + orr r3, lr, r3, lsl #8 + add tmp1, tmp1, #12 + ldrb tmp1, [tmp1, r3] + + 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 + DISPATCH_FINISH +} + +(iadd_u4store) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(isub_u4store) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(iand_u4store) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(ior_u4store) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(ixor_u4store) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(iadd_istore_N) { + ldrb lr, [jpc, #1] + DISPATCH_START \seq_len + DISPATCH_NEXT + rsb r3, lr, #opc_istore_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(isub_istore_N) { + ldrb lr, [jpc, #1] + DISPATCH_START \seq_len + DISPATCH_NEXT + rsb r3, lr, #opc_istore_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(iand_istore_N) { + ldrb lr, [jpc, #1] + DISPATCH_START \seq_len + DISPATCH_NEXT + rsb r3, lr, #opc_istore_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(ior_istore_N) { + ldrb lr, [jpc, #1] + DISPATCH_START \seq_len + DISPATCH_NEXT + rsb r3, lr, #opc_istore_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +(ixor_istore_N) { + ldrb lr, [jpc, #1] + DISPATCH_START \seq_len + DISPATCH_NEXT + rsb r3, lr, #opc_istore_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + str tmp2, [locals, r3, lsl #2] + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +{ + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + rsb r2, r2, #0 + DISPATCH_NEXT + sub r3, r3, #opc_iconst_0 + ldr tmp1, [locals, r2, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp1 + DISPATCH_FINISH +} + +(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr tmp1, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp2, r2, #opc_iconst_0 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +# (aload_N)(getfield) +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +{ + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb r3, [jpc, #2] + add tmp2, constpool, r2, lsl #12 + DISPATCH_START 4 + 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 + DISPATCH_NEXT + ldr tmp2, [tmp2, #8] + DISPATCH_NEXT +.abortentry87: + ldr tmp2, [tmp1, tmp2] + DISPATCH_NEXT + PUSH tmp2 + 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) +{ + rsb tmp1, r0, #opc_aload_0 + DISPATCH_START \seq_len + rsb tmp2, r1, #opc_aload_0 + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(aload_0,aload_1,aload_2,aload_3) +(iload_0,iload_1,iload_2,iload_3) +{ + 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 + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(aload_0,aload_1,aload_2,aload_3) +{ + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + rsb tmp2, r1, #opc_aload_0 + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +# 7 cycles +(iload_0,iload_1,iload_2,iload_3) +(iload_0,iload_1,iload_2,iload_3) +{ + rsb tmp1, r0, #opc_iload_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 + PUSH2 tmp2, 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 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp1 + 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 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp1 + 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 + DISPATCH_NEXT + rsb tmp1, r2, #0 + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + 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 + DISPATCH_NEXT + rsb tmp1, r2, #0 + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + 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] + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 tmp2, tmp1 + DISPATCH_FINISH +} + +# --- 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 + rsb tmp2, r1, #opc_astore_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) +(istore_0,istore_1,istore_2,istore_3) +{ + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + 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 + PUSH2 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 + PUSH2 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 + PUSH2 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 + PUSH2 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 + PUSH2 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 + PUSH2 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 + PUSH2 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] +#ifndef HW_NULL_PTR_CHECK + cmp r3, #0 + beq null_ptr_exception_jpc_1 +#endif +.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 +#ifndef HW_NULL_PTR_CHECK + cmp r3, #0 + beq null_ptr_exception_jpc_1 +#endif +.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] +#ifndef HW_NULL_PTR_CHECK + cmp r3, #0 + beq null_ptr_exception_jpc_1 +#endif +.abortentry21: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2 + ldrsb lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(caload) +{ + POP r3 + 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 +.abortentry22: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2, lsl #1 + ldrh lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(saload) +{ + POP r3 + 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 +.abortentry23: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2, lsl #1 + ldrsh lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +# 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 +.abortentry24: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2 + ldrsb lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +# 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 +.abortentry25: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2, lsl #1 + ldrh lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +# 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 +.abortentry26: + ldr lr, [r3, #8] @ lr = length + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + add r3, r3, r2, lsl #1 + ldrsh lr, [r3, #12] + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +# --- ECN: load; Xastore ------------------------------------------------------- + +(iload_0,iload_1,iload_2,iload_3) +(iastore,fastore) +{ + POP2 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 +.abortentry27: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(bastore) +{ + POP2 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 +.abortentry28: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2 + strb tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(castore,sastore) +{ + POP2 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 +.abortentry29: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #1 + strh tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iload,aload,fload)(iastore,fastore) { + POP2 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 +.abortentry30: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp r3, lr + bcs array_bound_exception_jpc_1_r3 + DISPATCH_NEXT + add tmp1, tmp1, r3, lsl #2 + str r2, [tmp1, #12] + DISPATCH_FINISH +} + +(iload,aload,fload)(bastore) { + POP2 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 +.abortentry31: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp r3, lr + bcs array_bound_exception_jpc_1_r3 + DISPATCH_NEXT + add tmp1, tmp1, r3 + strb r2, [tmp1, #12] + DISPATCH_FINISH +} + +(iload,aload,fload)(castore,sastore) { + POP2 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 +.abortentry32: + ldr lr, [tmp1, #8] @ lr = limit + DISPATCH_NEXT + cmp r3, lr + bcs array_bound_exception_jpc_1_r3 + DISPATCH_NEXT + add tmp1, tmp1, r3, lsl #1 + strh r2, [tmp1, #12] + DISPATCH_FINISH +} + +# --- ECN: load; dataop ------------------------------------------------------- + +(iload_0,iload_1,iload_2,iload_3) +(iadd) +{ + POP tmp2 + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + add tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload,aload,fload)(iadd) { + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + POP tmp1 + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(isub) +{ + POP tmp2 + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + sub tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload,aload,fload)(isub) { + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + POP tmp1 + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(imul) +{ + POP r2 + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + mul r3, r2, lr + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(iload,aload,fload)(imul) { + DISPATCH_START \seq_len + POP r3 + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + mul lr, r3, r2 + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(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 + b int_div +} + +(iload,aload,fload)(idiv) { + add jpc, jpc, #2 + POP r1 + ldr r0, [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 + b int_rem +} + +(iload,aload,fload)(irem) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + POP r1 + b int_rem +} + +(iload_0,iload_1,iload_2,iload_3) +(ineg) +{ + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + rsb lr, lr, #0 + PUSH lr + DISPATCH_FINISH +} + +(iload,aload,fload)(ineg) { + DISPATCH_START \seq_len + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + rsb r2, r2, #0 + PUSH r2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(ishl) +{ + POP r2 + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + mov lr, r2, lsl lr + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iload,aload,fload)(ishl) { + DISPATCH_START \seq_len + POP r3 + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + mov r2, r3, lsl r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(ishr) +{ + POP r2 + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + mov lr, r2, asr lr + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iload,aload,fload)(ishr) { + DISPATCH_START \seq_len + POP r3 + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + mov r2, r3, asr r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(iushr) +{ + POP r2 + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + mov lr, r2, lsr lr + DISPATCH_NEXT + PUSH lr + DISPATCH_FINISH +} + +(iload,aload,fload)(iushr) { + ldrb r2, [jpc, #1] + DISPATCH_START \seq_len + POP r3 + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + mov r2, r3, lsr r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(iand) +{ + POP tmp2 + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + and tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload,aload,fload)(iand) { + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + POP tmp1 + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(ior) +{ + POP tmp2 + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + orr tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload,aload,fload)(ior) { + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + POP tmp1 + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(ixor) +{ + POP tmp2 + rsb tmp1, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr tmp1, [locals, tmp1, lsl #2] + DISPATCH_NEXT + eor tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iload,aload,fload)(ixor) { + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + POP tmp1 + DISPATCH_NEXT + ldr tmp2, [locals, tmp2, lsl #2] + DISPATCH_NEXT + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iload_0,iload_1,iload_2,iload_3) +(i2c) +{ + rsb lr, r0, #opc_iload_0 + DISPATCH_START \seq_len + ldr lr, [locals, lr, lsl #2] + DISPATCH_NEXT + mov lr, lr, asl #16 + mov lr, lr, lsr #16 + PUSH lr + DISPATCH_FINISH +} + +(iload,aload,fload)(i2c) { + DISPATCH_START \seq_len + ldr r2, [locals, -r2, lsl #2] + DISPATCH_NEXT + mov r2, r2, asl #16 + mov r2, r2, lsr #16 + PUSH r2 + DISPATCH_FINISH +} + +# --- ECN: load; branch ------------------------------------------------------- + +(iload_0,iload_1,iload_2,iload_3) +(ifeq,ifnull) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(ifeq,ifnull) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(ifne,ifnonnull) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(ifne,ifnonnull) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(iflt) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(iflt) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(ifge) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(ifge) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(ifgt) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(ifgt) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(ifle) +{ + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + rsb r3, r0, #opc_iload_0 + add jpc, jpc, #1 + ldr r3, [locals, r3, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(ifle) { + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + add jpc, jpc, #2 + ldr r3, [locals, -r2, lsl #2] + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmpeq,if_acmpeq) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmpeq,if_acmpeq) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmpne,if_acmpne) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmpne,if_acmpne) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmplt) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmplt) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmpge) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmpge) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmpgt) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmpgt) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload_0,iload_1,iload_2,iload_3) +(if_icmple) +{ + POP r3 + rsb r2, r0, #opc_iload_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + ldr r2, [locals, r2, lsl #2] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iload,aload,fload)(if_icmple) { + POP r3 + ldrsb r1, [jpc, #3] + ldrb ip, [jpc, #4] + ldr r2, [locals, -r2, lsl #2] + add jpc, jpc, #2 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +# --- ECN: load; return/invoke ------------------------------------------------- + +(iload_0,iload_1,iload_2,iload_3) +(ireturn,areturn,freturn) +{ + rsb r0, r0, #opc_iload_0 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + ldr r1, [locals, r0, lsl #2] + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(iload,aload,fload)(ireturn,areturn,freturn) { + + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + ldr r1, [locals, -r2, lsl #2] + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #2 + bl return_check_monitors + POP r1 + b 2b +} + +(iload_0,iload_1,iload_2,iload_3) +(invokeresolved) +{ + 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_invokeresolved +} + +(aload_0,aload_1,aload_2,aload_3) +(invokeresolved) +{ + 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_invokeresolved +} + +(iload,aload,fload)(invokeresolved) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokeresolved +} + +(iload_0,iload_1,iload_2,iload_3) +(invokevfinal) +{ + 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_invokevfinal +} + +(aload_0,aload_1,aload_2,aload_3) +(invokevfinal) +{ + 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_invokevfinal +} + +(iload,aload,fload)(invokevfinal) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokevfinal +} + +(iload_0,iload_1,iload_2,iload_3) +(invokespecialresolved) +{ + 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_invokespecialresolved +} + +(aload_0,aload_1,aload_2,aload_3) +(invokespecialresolved) +{ + 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_invokespecialresolved +} + +(iload,aload,fload)(invokespecialresolved) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokespecialresolved +} + +(iload_0,iload_1,iload_2,iload_3) +(invokestaticresolved) +{ + 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_invokestaticresolved +} + +(aload_0,aload_1,aload_2,aload_3) +(invokestaticresolved) +{ + 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_invokestaticresolved +} + +(iload,aload,fload)(invokestaticresolved) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokestaticresolved +} + +(iload_0,iload_1,iload_2,iload_3) +(invokeinterface) +{ + add jpc, jpc, #1 + rsb r0, r0, #opc_iload_0 + ldr r0, [locals, r0, lsl #2] + PUSH r0 + b do_invokeinterface +} + +(aload_0,aload_1,aload_2,aload_3) +(invokeinterface) +{ + add jpc, jpc, #1 + rsb r0, r0, #opc_aload_0 + ldr r0, [locals, r0, lsl #2] + PUSH r0 + b do_invokeinterface +} + +(iload,aload,fload)(invokeinterface) { + ldr r0, [locals, -r2, lsl #2] + add jpc, jpc, #2 + PUSH r0 + b do_invokeinterface +} + +(aload_0,aload_1,aload_2,aload_3) +(igetfield) +{ + add r0, r0, #opc_iaccess_0-opc_aload_0 + strb r0, [jpc] + DISPATCH_BYTECODE +} + +# 13 cycles +(iload,aload,fload)(igetfield) { + ldrb ip, [jpc, #4] + rsb tmp1, r2, #0 + ldrb r3, [jpc, #3] + add tmp2, constpool, ip, lsl #12 + DISPATCH_START 5 + 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 + DISPATCH_NEXT + ldr tmp2, [tmp2, #8] + DISPATCH_NEXT +.abortentry88: + ldr tmp2, [tmp1, tmp2] + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +# --- 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) +{ + sub r3, r0, #opc_iconst_0 + DISPATCH_START \seq_len + rsb r2, r1, #opc_istore_0 + str r3, [locals, r2, lsl #2] + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(astore,istore,fstore) { + ldrb r2, [jpc, #2] + sub r3, r0, #opc_iconst_0 + DISPATCH_START \seq_len + str r3, [locals, -r2, lsl #2] + DISPATCH_BYTECODE +} + +# --- ECN: iconst; dataop ------------------------------------------------- + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(iadd) { + sub tmp1, r0, #opc_iconst_0 + DISPATCH_START \seq_len + POP tmp2 + DISPATCH_NEXT + add tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(isub) { + sub tmp1, r0, #opc_iconst_0 + DISPATCH_START \seq_len + POP tmp2 + DISPATCH_NEXT + sub tmp1, tmp2, tmp1 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(idiv) { + subs lr, r0, #opc_iconst_2 + DISPATCH_START \seq_len + POP tmp1 + 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 .iconst_div_rem_0 + 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 +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ishl) { + sub tmp1, r0, #opc_iconst_0 + DISPATCH_START \seq_len + POP r2 + DISPATCH_NEXT + mov tmp1, r2, lsl tmp1 + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +# --- ECN: iconst; branch ------------------------------------------------- + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpeq) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpne) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmplt) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpge) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpgt) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmple) { + POP r3 + sub r2, r0, #opc_iconst_0 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ireturn) { + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + sub r1, r0, #opc_iconst_0 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(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 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokeresolved +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokevfinal) { + add jpc, jpc, #1 + sub r0, r0, #opc_iconst_0 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokevfinal +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokestaticresolved) { + add jpc, jpc, #1 + sub r0, r0, #opc_iconst_0 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokestaticresolved +} + +(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokespecialresolved) { + add jpc, jpc, #1 + sub r0, r0, #opc_iconst_0 + ldrb r2, [jpc, #1] + ldrb r1, [jpc, #2] + PUSH r0 + b do_invokespecialresolved +} + +## --- 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 + DISPATCH_START \seq_len +#ifndef HW_NULL_PTR_CHECK + cmp lr, #0 + beq null_ptr_exception_jpc_2 +#endif +.abortentry38: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(bipush) { + ldrsb r2, [jpc, #2] + POP2 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 +.abortentry39: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_3_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(sipush) { + ldrsb r2, [jpc, #2] + ldrb tmp1, [jpc, #3] + POP2 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 +.abortentry40: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_4_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(iload,fload,aload) { + ldrb r2, [jpc, #2] + POP2 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 +.abortentry41: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_3_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(iaload,faload,aaload) +(iload_0,iload_1,iload_2,iload_3) +{ + rsb r2, r1, #opc_iload_0 + POP2 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 +.abortentry42: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 r2, r3 + DISPATCH_FINISH +} + +(iaload,faload,aaload) +(aload_0,aload_1,aload_2,aload_3) +{ + rsb r2, r1, #opc_aload_0 + POP2 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 +.abortentry42_1: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + PUSH2 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 +.abortentry43: + ldr tmp1, [r3, #8] @ tmp1 = length + DISPATCH_START \seq_len + cmp r2, tmp1 + bcs array_bound_exception_jpc_2 + 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 +.abortentry44: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr r2, [lr, #12] + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(astore,istore,fstore) { + ldrb r2, [jpc, #2] + POP2 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 +.abortentry45: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_3_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + str r3, [locals, -r2, lsl #2] + DISPATCH_FINISH +} + +(iaload,faload,aaload) +(istore_0,istore_1,istore_2,istore_3) { + rsb r2, r1, #opc_istore_0 + POP2 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 +.abortentry46: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + add lr, lr, r3, lsl #2 + ldr r3, [lr, #12] + DISPATCH_NEXT + str r3, [locals, r2, lsl #2] + DISPATCH_FINISH +} + +(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 +.abortentry47: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_START \seq_len + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + 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 +.abortentry48: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(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 +.abortentry49: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_START \seq_len + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + 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 +.abortentry50: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2 + strb tmp1, [r3, #12] + DISPATCH_FINISH +} + +(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 +.abortentry51: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_START \seq_len + cmp r3, tmp1 + bcs array_bound_exception_jpc_2_r3 + 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 +.abortentry52: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #1 + strh tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iaload,faload,aaload)(iand) { + POP2 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 +.abortentry58: + ldr tmp1, [r3, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_2 + add r3, r3, r2, lsl #2 + ldr tmp1, [r3, #12] @ tmp1 = tos + POP r2 @ r2 = tosm1 + DISPATCH_NEXT + and tmp1, r2, tmp1 @ tosm1 <dop> tos + PUSH tmp1 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(ior) { + POP2 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 +.abortentry59: + ldr tmp1, [r3, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_2 + add r3, r3, r2, lsl #2 + ldr tmp1, [r3, #12] @ tmp1 = tos + POP r2 @ r2 = tosm1 + DISPATCH_NEXT + orr tmp1, r2, tmp1 @ tosm1 <dop> tos + PUSH tmp1 + DISPATCH_FINISH +} + +(iaload,faload,aaload)(ixor) { + POP2 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 +.abortentry60: + ldr tmp1, [r3, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_2 + add r3, r3, r2, lsl #2 + ldr tmp1, [r3, #12] @ tmp1 = tos + POP r2 @ r2 = tosm1 + DISPATCH_NEXT + eor tmp1, r2, tmp1 @ tosm1 <dop> tos + PUSH tmp1 + DISPATCH_FINISH +} + +(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 +.abortentry61: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry62: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry63: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry64: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry65: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry66: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r3, [r3, #12] @ r1 = tos + + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry67: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry68: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry69: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry70: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry71: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(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 +.abortentry72: + ldr r1, [r3, #8] @ r1 = length + cmp r2, r1 + bcs array_bound_exception_jpc_0 + add r3, r3, r2, lsl #2 + ldr r2, [r3, #12] @ r1 = tos + + POP r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + cmp r3, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +# ---- iadd; xxx ------------------------------------------------------------ + +(iadd)(iload,fload,aload) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iadd) +(iload_0,iload_1,iload_2,iload_3) +{ + DISPATCH_START \seq_len + rsb r3, r1, #opc_iload_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iadd)(iaload,aaload,faload) { + POP3 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 +.abortentry73: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr tmp1, [lr, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iadd)(istore) { + mov r0, #opc_iadd_u4store + strb r0, [jpc] + b do_iadd_u4store +} + +(iadd) +(istore_0,istore_1,istore_2,istore_3) { + mov r0, #opc_iadd_istore_N + strb r0, [jpc] + b do_iadd_istore_N +} + +(iadd)(iastore,fastore) { + POP2 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 +.abortentry106: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iadd)(iadd) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + add tmp2, r3, r2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iadd)(isub) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + add tmp2, r3, r2 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iadd)(ifeq,ifnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(ifne,ifnonnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(iflt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(ifge) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(ifgt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(ifle) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmpeq,if_acmpeq) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmpne,if_acmpne) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmplt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmpge) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmpgt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(if_icmple) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iadd)(goto) { + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + orr ip, ip, r1, lsl #8 + DISPATCH_START_REG ip + POP2 r2, r3 + add r2, r3, r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iadd)(ireturn) { + POP2 r2, r3 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + add r1, r3, r2 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(iadd)(iinc) { + POP2 tmp1, lr + DISPATCH_START \seq_len + add tmp1, lr, tmp1 + ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc + ldrsb r2, [jpc, #-1] + DISPATCH_NEXT + PUSH tmp1 + ldr tmp1, [locals, -r3, lsl #2] + DISPATCH_NEXT + add tmp1, tmp1, r2 + str tmp1, [locals, -r3, lsl #2] + DISPATCH_FINISH +} +# ---- sub; xxx ------------------------------------------------------------ + +(isub)(iload,fload,aload) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(isub) +(iload_0,iload_1,iload_2,iload_3) +{ + DISPATCH_START \seq_len + rsb r3, r1, #opc_iload_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(isub)(iaload,aaload,faload) { + POP3 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 +.abortentry74: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr tmp1, [lr, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(isub)(istore) { + mov r0, #opc_isub_u4store + strb r0, [jpc] + b do_isub_u4store +} + +(isub) +(istore_0,istore_1,istore_2,istore_3) { + mov r0, #opc_isub_istore_N + strb r0, [jpc] + b do_isub_istore_N +} + +(isub)(iastore,fastore) { + POP2 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 +.abortentry105: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(isub)(iadd) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + sub tmp2, r3, r2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(isub)(isub) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + sub tmp2, r3, r2 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(isub)(ifeq,ifnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(ifne,ifnonnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(iflt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(ifge) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(ifgt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(ifle) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmpeq,if_acmpeq) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmpne,if_acmpne) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmplt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmpge) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmpgt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(if_icmple) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + sub r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(isub)(goto) { + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + orr ip, ip, r1, lsl #8 + DISPATCH_START_REG ip + POP2 r2, r3 + sub r2, r3, r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(isub)(ireturn) { + POP2 r2, r3 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + sub r1, r3, r2 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(isub)(iinc) { + POP2 tmp1, lr + DISPATCH_START \seq_len + sub tmp1, lr, tmp1 + ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc + ldrsb r2, [jpc, #-1] + DISPATCH_NEXT + PUSH tmp1 + ldr tmp1, [locals, -r3, lsl #2] + DISPATCH_NEXT + add tmp1, tmp1, r2 + str tmp1, [locals, -r3, lsl #2] + DISPATCH_FINISH +} +# ---- iand; xxx ------------------------------------------------------------ + +(iand)(iload,fload,aload) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iand) +(iload_0,iload_1,iload_2,iload_3) +{ + DISPATCH_START \seq_len + rsb r3, r1, #opc_iload_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + and tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iand)(iaload,aaload,faload) { + POP3 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 +.abortentry75: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr tmp1, [lr, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iand)(istore) { + mov r0, #opc_iand_u4store + strb r0, [jpc] + b do_iand_u4store +} + +(iand) +(istore_0,istore_1,istore_2,istore_3) { + mov r0, #opc_iand_istore_N + strb r0, [jpc] + b do_iand_istore_N +} + +(iand)(iastore,fastore) { + POP2 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 +.abortentry107: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(iand)(iadd) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + and tmp2, r3, r2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iand)(isub) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + and tmp2, r3, r2 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(iand)(ifeq,ifnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(ifne,ifnonnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(iflt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(ifge) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(ifgt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(ifle) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmpeq,if_acmpeq) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmpne,if_acmpne) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmplt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmpge) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmpgt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(if_icmple) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + and r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iand)(goto) { + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + orr ip, ip, r1, lsl #8 + DISPATCH_START_REG ip + POP2 r2, r3 + and r2, r3, r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(iand)(ireturn) { + POP2 r2, r3 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + and r1, r3, r2 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(iand)(iinc) { + POP2 tmp1, lr + DISPATCH_START \seq_len + and tmp1, lr, tmp1 + ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc + ldrsb r2, [jpc, #-1] + DISPATCH_NEXT + PUSH tmp1 + ldr tmp1, [locals, -r3, lsl #2] + DISPATCH_NEXT + add tmp1, tmp1, r2 + str tmp1, [locals, -r3, lsl #2] + DISPATCH_FINISH +} +# ---- ior; xxx ------------------------------------------------------------ + +(ior)(iload,fload,aload) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(ior) +(iload_0,iload_1,iload_2,iload_3) +{ + DISPATCH_START \seq_len + rsb r3, r1, #opc_iload_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + orr tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(ior)(iaload,aaload,faload) { + POP3 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 +.abortentry76: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr tmp1, [lr, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(ior)(istore) { + mov r0, #opc_ior_u4store + strb r0, [jpc] + b do_ior_u4store +} + +(ior) +(istore_0,istore_1,istore_2,istore_3) { + mov r0, #opc_ior_istore_N + strb r0, [jpc] + b do_ior_istore_N +} + +(ior)(iastore,fastore) { + POP2 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 +.abortentry108: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(ior)(iadd) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + orr tmp2, r3, r2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(ior)(isub) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + orr tmp2, r3, r2 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(ior)(ifeq,ifnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(ifne,ifnonnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(iflt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(ifge) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(ifgt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(ifle) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmpeq,if_acmpeq) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmpne,if_acmpne) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmplt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmpge) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmpgt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(if_icmple) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + orr r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ior)(goto) { + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + orr ip, ip, r1, lsl #8 + DISPATCH_START_REG ip + POP2 r2, r3 + orr r2, r3, r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(ior)(ireturn) { + POP2 r2, r3 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + orr r1, r3, r2 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(ior)(iinc) { + POP2 tmp1, lr + DISPATCH_START \seq_len + orr tmp1, lr, tmp1 + ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc + ldrsb r2, [jpc, #-1] + DISPATCH_NEXT + PUSH tmp1 + ldr tmp1, [locals, -r3, lsl #2] + DISPATCH_NEXT + add tmp1, tmp1, r2 + str tmp1, [locals, -r3, lsl #2] + DISPATCH_FINISH +} + +# ---- ixor; xxx ------------------------------------------------------------ + +(ixor)(iload,fload,aload) { + ldrb r3, [jpc, #2] + DISPATCH_START \seq_len + POP2 tmp2, tmp1 + DISPATCH_NEXT + rsb r3, r3, #0 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(ixor) +(iload_0,iload_1,iload_2,iload_3) +{ + DISPATCH_START \seq_len + rsb r3, r1, #opc_iload_0 + POP2 tmp2, tmp1 + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + eor tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(ixor)(iaload,aaload,faload) { + POP3 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 +.abortentry77: + ldr tmp1, [lr, #8] @ tmp1 = length + DISPATCH_NEXT + cmp r2, tmp1 + bcs array_bound_exception_jpc_1 + add lr, lr, r2, lsl #2 + ldr tmp1, [lr, #12] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(ixor)(istore) { + mov r0, #opc_ixor_u4store + strb r0, [jpc] + b do_ixor_u4store +} + +(ixor) +(istore_0,istore_1,istore_2,istore_3) { + mov r0, #opc_ixor_istore_N + strb r0, [jpc] + b do_ixor_istore_N +} + +(ixor)(iastore,fastore) { + POP2 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 +.abortentry109: + ldr lr, [r3, #8] @ lr = limit + DISPATCH_NEXT + cmp r2, lr + bcs array_bound_exception_jpc_1 + DISPATCH_NEXT + add r3, r3, r2, lsl #2 + str tmp1, [r3, #12] + DISPATCH_FINISH +} + +(ixor)(iadd) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + eor tmp2, r3, r2 + DISPATCH_NEXT + add tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(ixor)(isub) { + DISPATCH_START \seq_len + POP3 r2, r3, tmp1 + DISPATCH_NEXT + eor tmp2, r3, r2 + DISPATCH_NEXT + sub tmp2, tmp1, tmp2 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH tmp2 + DISPATCH_FINISH +} + +(ixor)(ifeq,ifnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(ifne,ifnonnull) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(iflt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(ifge) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(ifgt) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(ifle) { + POP2 r2, r3 + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r3, r3, r2 + add jpc, jpc, #1 + cmp r3, #0 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmpeq,if_acmpeq) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmpne,if_acmpne) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmplt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmpge) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmpgt) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(if_icmple) { + POP3 r2, r3, lr + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + eor r2, r3, r2 + add jpc, jpc, #1 + cmp lr, r2 + orr ip, ip, r1, lsl #8 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(ixor)(goto) { + ldrsb r1, [jpc, #2] + ldrb ip, [jpc, #3] + add jpc, jpc, #1 + orr ip, ip, r1, lsl #8 + DISPATCH_START_REG ip + POP2 r2, r3 + eor r2, r3, r2 + DISPATCH_NEXT + PUSH r2 + DISPATCH_FINISH +} + +(ixor)(ireturn) { + POP2 r2, r3 + ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base + ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end + eor r1, r3, r2 + ldr tmp_xxx, [istate, #ISTATE_THREAD] + cmp tmp1, tmp2 + bcc 1f +2: + mov r3, #0 + ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] + ldr r0, [istate, #ISTATE_METHOD] + ldr r3, [stack, #0] + ldrh r0, [r0, #40] + ldr istate, [istate, #ISTATE_SAVED_ISTATE] + str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + str r1, [stack, r0, lsl #2]! + cmp istate, #0 + beq normal_return + ldr jpc, [istate, #ISTATE_BCP] + ldr r2, [istate, #ISTATE_STACK_LIMIT] + DISPATCH_START 3 @ ldrb r0, [jpc, #3]! + sub stack, stack, #4 + ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] + DISPATCH_NEXT @ ldrb r1, [jpc, #2] + add r2, r2, #4 + DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] + 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] + DISPATCH_NEXT @ ands lr, ip, lr + add constpool, constpool, #CONST_POOL_OFFSET + DISPATCH_FINISH +1: + PUSH r1 + add jpc, jpc, #1 + bl return_check_monitors + POP r1 + b 2b +} + +(ixor)(iinc) { + POP2 tmp1, lr + DISPATCH_START \seq_len + eor tmp1, lr, tmp1 + ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc + ldrsb r2, [jpc, #-1] + DISPATCH_NEXT + PUSH tmp1 + ldr tmp1, [locals, -r3, lsl #2] + DISPATCH_NEXT + add tmp1, tmp1, r2 + str tmp1, [locals, -r3, lsl #2] + DISPATCH_FINISH +} + +# --- iinc; xxx -------------------------------------------------------------- + +(iinc)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) { + ldrsb tmp1, [jpc, #2] + sub lr, r1, #opc_iconst_0 + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + ldr r3, [locals, tmp2, lsl #2] + DISPATCH_NEXT + add r3, r3, tmp1 + DISPATCH_NEXT + PUSH lr + DISPATCH_NEXT + DISPATCH_NEXT + str r3, [locals, tmp2, lsl #2] + DISPATCH_FINISH +} + +(iinc)(iload,aload,fload) { + ldrb lr, [jpc, #4] + ldrsb tmp1, [jpc, #2] + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + ldr r3, [locals, tmp2, lsl #2] + DISPATCH_NEXT + rsb lr, lr, #0 + DISPATCH_NEXT + add r3, r3, tmp1 + DISPATCH_NEXT + str r3, [locals, tmp2, lsl #2] + ldr tmp1, [locals, lr, lsl #2] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +(iinc) +(iload_0,iload_1,iload_2,iload_3) +{ + rsb lr, r1, #opc_iload_0 + ldrsb tmp1, [jpc, #2] + DISPATCH_START \seq_len + rsb tmp2, r2, #0 + ldr r3, [locals, tmp2, lsl #2] + DISPATCH_NEXT + add r3, r3, tmp1 + DISPATCH_NEXT + str r3, [locals, tmp2, lsl #2] + DISPATCH_NEXT + ldr tmp1, [locals, lr, lsl #2] + DISPATCH_NEXT + PUSH tmp1 + DISPATCH_FINISH +} + +################################################################################ +## ECN: Optimised bytecode triples +################################################################################ + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(iload,fload,aload) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb r3, [jpc, #2] + add tmp2, constpool, r2, lsl #12 + DISPATCH_START 6 + ldr tmp1, [locals, tmp1, lsl #2] + 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 + DISPATCH_NEXT + ldr tmp2, [tmp2, #8] + DISPATCH_NEXT + rsb r3, r3, #0 +.abortentry89: + ldr tmp2, [tmp1, tmp2] + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(iload_0,iload_1,iload_2,iload_3) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add tmp2, constpool, r2, lsl #12 + DISPATCH_START 5 + rsb r3, r1, #opc_iload_0 + 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 + DISPATCH_NEXT + ldr tmp2, [tmp2, #8] + DISPATCH_NEXT +.abortentry90: + ldr tmp2, [tmp1, tmp2] + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + PUSH2 r3, tmp2 + DISPATCH_FINISH +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(iadd) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add tmp2, constpool, r2, lsl #12 + DISPATCH_START 5 + 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 + DISPATCH_NEXT + ldr tmp2, [tmp2, #8] + DISPATCH_NEXT + POP r3 +.abortentry91: + ldr tmp2, [tmp1, tmp2] + DISPATCH_NEXT + add tmp2, tmp2, r3 + PUSH tmp2 + DISPATCH_FINISH +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(ifeq,ifnull) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry92: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(ifne,ifnonnull) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry93: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(iflt) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry94: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(ifge) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry95: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(ifgt) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry96: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(ifle) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + orr ip, ip, r0, lsl #8 +.abortentry97: + ldr tmp2, [tmp1, tmp2] + cmp tmp2, #0 + ble 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmpeq,if_acmpeq) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry98: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + beq 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmpne,if_acmpne) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry99: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + bne 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmplt) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry100: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + blt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmpge) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry101: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + bge 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmpgt) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry102: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + bgt 1f + mov ip, #3 +1: + ldrb r0, [jpc, ip]! + DISPATCH_BYTECODE +} + +(iaccess_0,iaccess_1,iaccess_2,iaccess_3) +(if_icmple) { + ldrb r2, [jpc, #3] + rsb tmp1, r0, #opc_iaccess_0 + ldrb ip, [jpc, #2] + add jpc, jpc, #4 + ldrsb r0, [jpc, #1] + add tmp2, constpool, r2, lsl #12 + 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] + POP r3 + orr ip, ip, r0, lsl #8 +.abortentry103: + ldr tmp2, [tmp1, tmp2] + cmp r3, tmp2 + ble 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) +(iadd) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp1, r2, #opc_iconst_0 + DISPATCH_NEXT + add r3, r3, tmp1 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) +(isub) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp1, r2, #opc_iconst_0 + DISPATCH_NEXT + sub r3, r3, tmp1 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) +(iand) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp1, r2, #opc_iconst_0 + DISPATCH_NEXT + and r3, r3, tmp1 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) +(ior) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp1, r2, #opc_iconst_0 + DISPATCH_NEXT + orr r3, r3, tmp1 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) +(ixor) +{ + rsb r3, r0, #opc_iload_0_iconst_N + DISPATCH_START \seq_len + ldrb r2, [jpc, #1-\seq_len] + DISPATCH_NEXT + ldr r3, [locals, r3, lsl #2] + DISPATCH_NEXT + sub tmp1, r2, #opc_iconst_0 + DISPATCH_NEXT + eor r3, r3, tmp1 + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +(iadd) +{ + ldrb r3, [jpc, #2] + rsb r2, r2, #0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr r2, [locals, r2, lsl #2] + sub r3, r3, #opc_iconst_0 + DISPATCH_NEXT + add r3, r2, r3 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +(isub) +{ + ldrb r3, [jpc, #2] + rsb r2, r2, #0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr r2, [locals, r2, lsl #2] + sub r3, r3, #opc_iconst_0 + DISPATCH_NEXT + sub r3, r2, r3 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +(iand) +{ + ldrb r3, [jpc, #2] + rsb r2, r2, #0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr r2, [locals, r2, lsl #2] + sub r3, r3, #opc_iconst_0 + DISPATCH_NEXT + and r3, r2, r3 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +(ior) +{ + ldrb r3, [jpc, #2] + rsb r2, r2, #0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr r2, [locals, r2, lsl #2] + sub r3, r3, #opc_iconst_0 + DISPATCH_NEXT + orr r3, r2, r3 + DISPATCH_NEXT + DISPATCH_NEXT + PUSH r3 + DISPATCH_FINISH +} + +# r2 = [jpc, #1] +(iload_iconst_N) +(ixor) +{ + ldrb r3, [jpc, #2] + rsb r2, r2, #0 + DISPATCH_START \seq_len + DISPATCH_NEXT + ldr r2, [locals, r2, lsl #2] + sub r3, r3, #opc_iconst_0 + 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) +(iadd_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 + 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 + str r3, [locals, tmp1, lsl #2] + DISPATCH_FINISH +} + +(iload_iconst_N) +(iadd_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 + 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 +}
--- a/ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S Fri Aug 21 13:35:04 2009 +0200 +++ b/ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S Fri Aug 21 13:36:15 2009 +0200 @@ -1578,7 +1578,7 @@ bne invokespecial_exception_fix DISPATCH_FINISH -#include "bytecodes.s" +#include "bytecodes_arm.s" Opcode idiv