/hg/release/icedtea7-forest-2.1/hotspot: 10 new changesets

andrew at icedtea.classpath.org andrew at icedtea.classpath.org
Tue Jun 12 15:50:34 PDT 2012


changeset 39068668f2c1 in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=39068668f2c1
author: kamg
date: Thu Mar 29 13:22:24 2012 -0400

	7110720: Issue with vm config file loadingIssue with vm config file loading
	Summary: disabling default config files if -XX:-ReadDefaultConfigFiles
	Reviewed-by: phh, jrose, dcubed, dholmes


changeset 253e7c32def9 in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=253e7c32def9
author: never
date: Wed Apr 04 20:44:37 2012 -0700

	7152811: Issues in client compiler
	Reviewed-by: kvn, jrose


changeset 8f86ad60699b in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=8f86ad60699b
author: never
date: Wed Apr 11 17:38:20 2012 -0700

	7160677: missing else in fix for 7152811
	Reviewed-by: kvn


changeset 058d6563e93a in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=058d6563e93a
author: kamg
date: Thu May 03 15:57:16 2012 -0400

	7160757: Problem with hotspot/runtime_classfile
	Summary: Allow only current and super invokespecials of <init>
	Reviewed-by: never, coleenp, dcubed


changeset 6a67d57915ba in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=6a67d57915ba
author: andrew
date: Wed Jun 06 16:18:59 2012 +0100

	Merge


changeset 8101ee1cb493 in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=8101ee1cb493
author: andrew
date: Thu Jun 07 15:21:53 2012 +0100

	Added tag icedtea-2.1.1 for changeset 6a67d57915ba


changeset 5141cdd9bfbf in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=5141cdd9bfbf
author: andrew
date: Thu Jun 07 19:21:04 2012 +0100

	Merge


changeset 8b7c4c5f6ba9 in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=8b7c4c5f6ba9
author: andrew
date: Thu Jun 07 19:21:17 2012 +0100

	Removed tag icedtea-2.1.1


changeset 01a83786a9f6 in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=01a83786a9f6
author: andrew
date: Thu Jun 07 19:21:20 2012 +0100

	Added tag icedtea-2.1.1 for changeset 8b7c4c5f6ba9


changeset 2eed594c7cdb in /hg/release/icedtea7-forest-2.1/hotspot
details: http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/hotspot?cmd=changeset;node=2eed594c7cdb
author: andrew
date: Tue Jun 12 23:50:11 2012 +0100

	Merge


diffstat:

 .hgtags                                    |     5 +
 src/cpu/zero/vm/asm_helper.cpp             |   116 +-
 src/cpu/zero/vm/bytecodes_arm.def          |  1564 ++++++++---------
 src/cpu/zero/vm/cppInterpreter_arm.S       |  2061 ++++++++++++-----------
 src/cpu/zero/vm/cppInterpreter_zero.cpp    |    19 +
 src/cpu/zero/vm/thumb2.cpp                 |  2432 ++++++++++++---------------
 src/os_cpu/linux_zero/vm/os_linux_zero.cpp |    17 +-
 src/os_cpu/linux_zero/vm/os_linux_zero.hpp |     6 +
 src/share/vm/ci/ciField.cpp                |    37 +-
 src/share/vm/ci/ciField.hpp                |     5 +-
 src/share/vm/classfile/verifier.cpp        |     6 +-
 src/share/vm/compiler/compilerOracle.cpp   |    19 +-
 src/share/vm/compiler/compilerOracle.hpp   |     6 +-
 src/share/vm/opto/runtime.cpp              |     5 +-
 src/share/vm/prims/jvmtiExport.cpp         |    41 +
 src/share/vm/prims/jvmtiExport.hpp         |     6 +
 src/share/vm/runtime/arguments.cpp         |     2 +
 17 files changed, 3224 insertions(+), 3123 deletions(-)

diffs (truncated from 11687 to 500 lines):

diff -r a5d04cb60a5c -r 2eed594c7cdb .hgtags
--- a/.hgtags	Wed Apr 11 09:24:03 2012 -0400
+++ b/.hgtags	Tue Jun 12 23:50:11 2012 +0100
@@ -214,3 +214,8 @@
 0744602f85c6fe62255326df595785eb2b32166d jdk7u2-b21
 f8f4d3f9b16567b91bcef4caaa8417c8de8015f0 icedtea-2.1-branchpoint
 1a96220bdaa82c21f60caaee433e693a2f598337 icedtea-2.1
+6a67d57915ba48e3a04c3daa8787d662794dad81 icedtea-2.1.1
+6a67d57915ba48e3a04c3daa8787d662794dad81 icedtea-2.1.1
+0000000000000000000000000000000000000000 icedtea-2.1.1
+0000000000000000000000000000000000000000 icedtea-2.1.1
+8b7c4c5f6ba9a0a7e8114d886a574d99827934a1 icedtea-2.1.1
diff -r a5d04cb60a5c -r 2eed594c7cdb src/cpu/zero/vm/asm_helper.cpp
--- a/src/cpu/zero/vm/asm_helper.cpp	Wed Apr 11 09:24:03 2012 -0400
+++ b/src/cpu/zero/vm/asm_helper.cpp	Tue Jun 12 23:50:11 2012 +0100
@@ -19,7 +19,7 @@
 
 #ifdef __arm__
 
-#define	ARCH_THUMBEE	(1<<16)
+#define	ARCH_THUMB2	(1<<16)
 #define ARCH_VFP	(1<<17)
 #define ARCH_CLZ	(1<<18)
 
@@ -50,6 +50,31 @@
 
 #define VECBUFF_SIZE 64
 
+static char valuebuf[128];
+
+// Return the name of the current method.  Not multi-thread safe.
+extern "C" char*
+meth(interpreterState istate) {
+  istate->method()->name_and_sig_as_C_string(valuebuf, sizeof valuebuf);
+  char *p = valuebuf + strlen(valuebuf);
+  sprintf(p, ": " PTR_FORMAT " (bci %d)",
+	  (intptr_t) istate->bcp(),
+	  istate->method()->bci_from(istate->bcp()));
+  return valuebuf;
+}
+
+// Used for debugging the interpreter.  The macro TRACE in
+// cppInterpreter_arm.S calls this routine, and you can trap on a
+// particular method.
+#define NAME1 "sun.nio.ch.FileChannelImpl$Unmapper.run()V"
+#define EQ(S1, S2) (S1 && (strncmp(S1, S2, strlen(S2)) == 0))
+extern "C" void my_trace(void *jpc, void *istate)
+{
+  char *name = meth((interpreterState)istate);
+  if (EQ(name, NAME1));
+    asm volatile("nop");  // Somewhere to put a breakpoint
+}
+
 extern "C" unsigned hwcap(void)
 {
   int fd;
@@ -70,7 +95,7 @@
       unsigned value = *p++;
       if (tag == 0) goto fini;
       if (tag == AT_HWCAP) {
-	if (value & HWCAP_THUMBEE) rc |= ARCH_THUMBEE;
+	if (value & HWCAP_THUMBEE) rc |= ARCH_THUMB2;
 	if (value & HWCAP_VFP) rc |= ARCH_VFP;
       } else if (tag == AT_PLATFORM) {
 	const char *s = (const char *)value;
@@ -87,7 +112,7 @@
   close(fd);
 //  printf("arch = %d, rc = 0x%08x\n", arch, rc);
   if (arch >= 5) rc |= ARCH_CLZ;
-  if (arch >= 7) rc |= ARCH_THUMBEE;
+  if (arch >= 7) rc |= ARCH_THUMB2;
   return rc | (1<<arch);
 }
 
@@ -229,6 +254,89 @@
     return istate->thread()->pending_exception();
 }
 
+extern "C" oop Helper_monitorenter(interpreterState istate, oop lockee)
+{
+    BasicObjectLock* limit = istate->monitor_base();
+    BasicObjectLock* most_recent = (BasicObjectLock*) istate->stack_base();
+    BasicObjectLock* entry = NULL;
+    markOop displaced;
+    JavaThread *thread = istate->thread();
+
+    if (lockee == NULL) {
+      HELPER_THROW(istate->thread(), vmSymbols::java_lang_NullPointerException(), "");
+      goto handle_exception;
+    }
+    while (most_recent != limit ) {
+      if (most_recent->obj() == NULL) entry = most_recent;
+      else if (most_recent->obj() == lockee) break;
+      most_recent++;
+    }
+    if (entry == NULL) {
+      int monitor_words = frame::interpreter_frame_monitor_size();
+      ZeroStack *stack = thread->zero_stack();
+
+      if (monitor_words > stack->available_words()) {
+        InterpreterRuntime::throw_StackOverflowError(thread);
+	goto handle_exception;
+      } else {
+	stack->alloc(monitor_words * wordSize);
+
+	for (intptr_t *p = istate->stack() + 1; p < istate->stack_base(); p++)
+	  *(p - monitor_words) = *p;
+
+	istate->set_stack_limit(istate->stack_limit() - monitor_words);
+	istate->set_stack(istate->stack() - monitor_words);
+	istate->set_stack_base(istate->stack_base() - monitor_words);
+
+	entry = (BasicObjectLock *) istate->stack_base();
+      }
+    }
+    entry->set_obj(lockee);
+    displaced = lockee->mark()->set_unlocked();
+    entry->lock()->set_displaced_header(displaced);
+    if (Atomic::cmpxchg_ptr(entry, lockee->mark_addr(), displaced) != displaced) {
+      // Is it simple recursive case?
+      if (thread->is_lock_owned((address) displaced->clear_lock_bits())) {
+	entry->lock()->set_displaced_header(NULL);
+      } else {
+	InterpreterRuntime::monitorenter(thread, entry);
+      }
+    }
+handle_exception:
+    return thread->pending_exception();
+}
+
+extern "C" oop Helper_monitorexit(interpreterState istate, oop lockee)
+{
+    BasicObjectLock* limit = istate->monitor_base();
+    BasicObjectLock* most_recent = (BasicObjectLock*) istate->stack_base();
+    JavaThread *thread = istate->thread();
+
+    if (lockee == NULL) {
+      HELPER_THROW(istate->thread(), vmSymbols::java_lang_NullPointerException(), "");
+      goto handle_exception;
+    }
+    while (most_recent != limit ) {
+      if ((most_recent)->obj() == lockee) {
+	BasicLock* lock = most_recent->lock();
+	markOop header = lock->displaced_header();
+	most_recent->set_obj(NULL);
+	if (header != NULL) {
+	  if (Atomic::cmpxchg_ptr(header, lockee->mark_addr(), lock) != lock) {
+	    // restore object for the slow case
+	    most_recent->set_obj(lockee);
+	    InterpreterRuntime::monitorexit(thread, most_recent);
+	  }
+	}
+	return thread->pending_exception();
+      }
+      most_recent++;
+    }
+    InterpreterRuntime::throw_illegal_monitor_state_exception(thread);
+handle_exception:
+    return thread->pending_exception();
+}
+
 extern "C" oop Helper_aastore(interpreterState istate, oop value, int index, arrayOop arrayref)
 {
     if (arrayref == NULL) {
@@ -512,7 +620,7 @@
 int main(void)
 {
 	print_def("ARCH_VFP",			ARCH_VFP);
-	print_def("ARCH_THUMBEE",		ARCH_THUMBEE);
+	print_def("ARCH_THUMB2",		ARCH_THUMB2);
 	print_def("ARCH_CLZ",			ARCH_CLZ);
 	nl();
 	print_def("JVM_CONSTANT_Utf8",		JVM_CONSTANT_Utf8);
diff -r a5d04cb60a5c -r 2eed594c7cdb src/cpu/zero/vm/bytecodes_arm.def
--- a/src/cpu/zero/vm/bytecodes_arm.def	Wed Apr 11 09:24:03 2012 -0400
+++ b/src/cpu/zero/vm/bytecodes_arm.def	Tue Jun 12 23:50:11 2012 +0100
@@ -335,13 +335,13 @@
 
 (lconst_1) lconst_1 {
 	DISPATCH_START_R2
-        mov     tmp2, #1
+        mov     r3, #1
 	DISPATCH_NEXT
         mov     tmp1, #0
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	PUSH	tmp2, tmp1
+	PUSH	r3, tmp1
 	DISPATCH_FINISH
 }
 
@@ -367,10 +367,10 @@
 	DISPATCH_NEXT
         orr     tmp1, tmp1, #0x00f00000
 	DISPATCH_NEXT
-        mov     tmp2, #0
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	PUSH	tmp2, tmp1
+        mov     r3, #0
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	PUSH	r3, tmp1
 	DISPATCH_FINISH
 }
 
@@ -419,11 +419,11 @@
 	DISPATCH_START	\seq_len
 	sub	r3, locals, r2, lsl #2
 	DISPATCH_NEXT
-	ldmda	r3, {tmp2, tmp1}
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	PUSH	tmp2, tmp1
+	ldmda	r3, {r3, tmp1}
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	PUSH	r3, tmp1
 	DISPATCH_FINISH
 }
 
@@ -465,49 +465,49 @@
 
 (lload_0,dload_0) u8load_0 {
 	DISPATCH_START_R2
-        ldmda   locals, {tmp2-tmp1}
+        ldmda   locals, {r3, tmp1}
 	DISPATCH_NEXT
 	PUSH	tmp1
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	PUSH	tmp2
+	PUSH	r3
 	DISPATCH_FINISH
 }
 
 (lload_1,dload_1) u8load_1 {
 	DISPATCH_START_R2
-        ldmdb   locals, {tmp2-tmp1}
+        ldmdb   locals, {r3, tmp1}
 	DISPATCH_NEXT
 	PUSH	tmp1
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	PUSH	tmp2
+	PUSH	r3
 	DISPATCH_FINISH
 }
 
 (lload_2,dload_2) u8load_2 {
 	DISPATCH_START_R2
-	ldr	tmp2, [locals, #-12]
+	ldr	r3, [locals, #-12]
 	DISPATCH_NEXT
 	ldr	tmp1, [locals, #-8]
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	PUSH	tmp2, tmp1
+	PUSH	r3, tmp1
 	DISPATCH_FINISH
 }
 
 (lload_3,dload_3) u8load_3 {
 	DISPATCH_START_R2
-	ldr	tmp2, [locals, #-16]
+	ldr	r3, [locals, #-16]
 	DISPATCH_NEXT
 	ldr	tmp1, [locals, #-12]
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	PUSH	tmp2, tmp1
+	PUSH	r3, tmp1
 	DISPATCH_FINISH
 }
 
@@ -546,12 +546,12 @@
 	bcs	array_bound_exception_jpc_1
 	DISPATCH_NEXT
 	add	r3, r3, r2, lsl #3
-	ldr	tmp2, [r3, #BASE_OFFSET_LONG]
+	ldr	r1, [r3, #BASE_OFFSET_LONG]
 	DISPATCH_NEXT
 	ldr	tmp1, [r3, #20]
 	DISPATCH_NEXT
 	PUT_STACK	1, tmp1
-	PUT_STACK	0, tmp2
+	PUT_STACK	0, r1
 	DISPATCH_FINISH
 }
 
@@ -634,13 +634,13 @@
 @ r2 = [jpc, #1]
 (lstore,dstore) u8store {
 	DISPATCH_START	\seq_len
-	POP	tmp2, tmp1
+	POP	r1, tmp1
 	DISPATCH_NEXT
 	sub	r3, locals, r2, lsl #2
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
-	stmda	r3, {tmp2, tmp1}
+	stmda	r3, {r1, tmp1}
 	DISPATCH_FINISH
 }
 
@@ -691,30 +691,30 @@
 (lstore_0,dstore_0) u8store_0 {
 	DISPATCH_START_R2
 	DISPATCH_NEXT
-	POP	tmp2, tmp1
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-        stmda   locals, {tmp2, tmp1}
+	POP	r1, tmp1
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+        stmda   locals, {r1, tmp1}
 	DISPATCH_FINISH
 }
 
 (lstore_1,dstore_1) u8store_1 {
 	DISPATCH_START_R2
 	DISPATCH_NEXT
-	POP	tmp2, tmp1
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-        stmdb   locals, {tmp2, tmp1}
+	POP	r1, tmp1
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+        stmdb   locals, {r1, tmp1}
 	DISPATCH_FINISH
 }
 
 (lstore_2,dstore_2) u8store_2 {
 	DISPATCH_START_R2
-	POP	tmp2, tmp1
-	DISPATCH_NEXT
-        str     tmp2, [locals, #-12]
+	POP	r1, tmp1
+	DISPATCH_NEXT
+        str     r1, [locals, #-12]
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
@@ -724,9 +724,9 @@
 
 (lstore_3,dstore_3) u8store_3 {
 	DISPATCH_START_R2
-	POP	tmp2, tmp1
-	DISPATCH_NEXT
-        str     tmp2, [locals, #-16]
+	POP	r1, tmp1
+	DISPATCH_NEXT
+        str     r1, [locals, #-16]
 	DISPATCH_NEXT
 	DISPATCH_NEXT
 	DISPATCH_NEXT
@@ -735,72 +735,72 @@
 }
 
 (iastore,fastore) u4astore {
-	POP	r3, tmp2, tmp1		@ r3 = value, tmp2 = index, tmp1 = arrayref
+	POP	r1, tmp1, lr		@ r1 = value, tmp1 = index, lr = arrayref
 	DISPATCH_START_R2
-	SW_NPC	cmp	tmp1, #0
+	SW_NPC	cmp	lr, #0
 	SW_NPC	beq	null_ptr_exception_jpc_1
 .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, #BASE_OFFSET_WORD]
+	ldr	ip, [lr, #8]		@ lr = limit
+	DISPATCH_NEXT
+	cmp	tmp1, ip
+	bcs	array_bound_exception_jpc_1_tmp1
+	DISPATCH_NEXT
+	add	lr, lr, tmp1, lsl #2
+	DISPATCH_NEXT
+	str	r1, [lr, #BASE_OFFSET_WORD]
 	DISPATCH_FINISH
 }
 
 (lastore,dastore) u8astore {
-	POP	r1, r3, tmp2, tmp1		@ r1,r3 = value, tmp2 = index, tmp1 = arrayref
+	POP	r1, r3, tmp1, lr		@ r1,r3 = value, tmp1 = index, lr = arrayref
 	DISPATCH_START_R2
-	SW_NPC	cmp	tmp1, #0
+	SW_NPC	cmp	lr, #0
 	SW_NPC	beq	null_ptr_exception_jpc_1
 .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	r1, [tmp2, #BASE_OFFSET_LONG]
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	str	r3, [tmp2, #20]
+	ldr	ip, [lr, #8]		@ ip = limit
+	cmp	tmp1, ip
+	DISPATCH_NEXT
+	bcs	array_bound_exception_jpc_1_tmp1
+	DISPATCH_NEXT
+	add	tmp1, lr, tmp1, lsl #3
+	str	r1, [tmp1, #BASE_OFFSET_LONG]
+	DISPATCH_NEXT
+	DISPATCH_NEXT
+	str	r3, [tmp1, #BASE_OFFSET_LONG+4]
 	DISPATCH_FINISH
 }
 
 (bastore) bastore {
-	POP	r3, tmp2, tmp1		@ r3 = value, tmp2 = index, tmp1 = arrayref
+	POP	r3, tmp1, lr		@ r3 = value, tmp1 = index, lr = arrayref
 	DISPATCH_START_R2
-	SW_NPC	cmp	tmp1, #0
+	SW_NPC	cmp	lr, #0
 	SW_NPC	beq	null_ptr_exception_jpc_1
 .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, #BASE_OFFSET_BYTE]
+	ldr	ip, [lr, #8]		@ ip = limit
+	DISPATCH_NEXT
+	cmp	tmp1, ip
+	bcs	array_bound_exception_jpc_1_tmp1
+	DISPATCH_NEXT
+	add	lr, lr, tmp1
+	DISPATCH_NEXT
+	strb	r3, [lr, #BASE_OFFSET_BYTE]
 	DISPATCH_FINISH
 }
 
 (castore,sastore) u2astore {
-	POP	r3, tmp2, tmp1		@ r3 = value, tmp2 = index, tmp1 = arrayref
+	POP	r3, tmp1, lr		@ r3 = value, tmp1 = index, lr = arrayref
 	DISPATCH_START_R2
-	SW_NPC	cmp	tmp1, #0
+	SW_NPC	cmp	lr, #0
 	SW_NPC	beq	null_ptr_exception_jpc_1
 .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, #BASE_OFFSET_SHORT]
+	ldr	ip, [lr, #8]		@ ip = limit
+	DISPATCH_NEXT
+	cmp	tmp1, ip
+	bcs	array_bound_exception_jpc_1_tmp1
+	DISPATCH_NEXT
+	add	lr, lr, tmp1, lsl #1
+	DISPATCH_NEXT
+	strh	r3, [lr, #BASE_OFFSET_SHORT]
 	DISPATCH_FINISH
 }
 
@@ -884,13 +884,13 @@
 
 (iadd) iadd {
 	DISPATCH_START_R2
-	POP	tmp2, tmp1
-	DISPATCH_NEXT
-	add	tmp2, tmp2, tmp1
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	DISPATCH_NEXT
-	PUSH	tmp2
+	POP	r1, tmp1
+	DISPATCH_NEXT
+	add	r1, r1, tmp1
+	DISPATCH_NEXT



More information about the distro-pkg-dev mailing list