changeset 1666:6bec6d168a87

Bug fixes to ARM interpreter
author enevill@E101646
date Tue, 25 Aug 2009 09:27:59 +0100
parents b8d4584ef200
children da9eb62e065f
files ChangeLog ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S
diffstat 2 files changed, 24 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Aug 20 20:42:36 2009 +0100
+++ b/ChangeLog	Tue Aug 25 09:27:59 2009 +0100
@@ -1,3 +1,12 @@
+2009-08-25  Edward Nevill <ed@camswl.com>
+
+	* cppInterpreter_arm.s
+	- 4 X bug fixes
+	- Java PC incorrect at safepoint branch
+	- constpool pointer not restored at safepoint branch
+	- wide astore nor popping stack
+	- native entry does not save r6
+
 2009-08-20  Andrew John Hughes  <ahughes@redhat.com>
 
 	* Makefile.am:
--- a/ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S	Thu Aug 20 20:42:36 2009 +0100
+++ b/ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S	Tue Aug 25 09:27:59 2009 +0100
@@ -1744,6 +1744,9 @@
 	cmp	r1, #1
 	bne	branch_no_check
 
+	sub	jpc, jpc, ip		@ Point jpc back at the branch
+	mov	tmp1, ip		@ Save offset in tmp1
+
 	ldr	r3, [istate, #ISTATE_THREAD]
 	mov	r0, sp
 	str	r3, [sp]
@@ -1752,14 +1755,16 @@
 	str	jpc, [istate, #ISTATE_BCP]
 	str	stack, [istate, #ISTATE_STACK]
 	bl	_ZN20SafepointSynchronize5blockEP10JavaThread
+	ldr	constpool, [istate, #ISTATE_CONSTANTS]
 	ldr	r0, [istate, #ISTATE_THREAD]
 	ldr	stack, [istate, #ISTATE_STACK]
+	add	constpool, constpool, #CONST_POOL_OFFSET
 	ldr	r3, [r0, #THREAD_PENDING_EXC]
 	ldr	jpc, [istate, #ISTATE_BCP]
 	cmp	r3, #0
 	ldr	locals, [istate, #ISTATE_LOCALS]
 	bne	handle_exception
-	DISPATCH_START	0
+	DISPATCH_START_REG	tmp1	@ Refetch opcode and update jpc again
 branch_no_check:
 	DISPATCH_BYTECODE
 
@@ -3061,6 +3066,7 @@
 	DISPATCH	4
 case_wide_istore:
 case_wide_fstore:
+case_wide_astore:
 	POP	r2
 	str	r2, [locals, -r1, lsl #2]
 	DISPATCH	4
@@ -3076,13 +3082,6 @@
 	sub	r1, locals, r1, lsl #2
 	stmda	r1, {r2, r3}
 	DISPATCH	4
-case_wide_astore:
-	mov	r3, r1
-	mov	r0, stack
-	mvn	r1, #0
-	mov	r2, locals
-	bl	_ZN19BytecodeInterpreter6astoreEPiiS0_i
-	DISPATCH	4
 do_wide_ret:
 	ldr	r2, [istate, #ISTATE_METHOD]
 	ldr	r2, [r2, #8]
@@ -3709,7 +3708,7 @@
 	ALIGN_CODE
 native_entry:
 	adrl	ip, dispatch_init_adcon
-	stmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, lr}
+	stmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, lr}
 @---
 	ldmia	ip, {dispatch, r7}
 	mov	r11, r0
@@ -3925,7 +3924,7 @@
 	ldr	r2, [r9, #THREAD_ACTIVE_HANDLES]
 	mov	r3, #0			@ ECN: Now that the object is safe on the Java stack
 	str	r3, [r2, #128]		@ stack, with the Thread SP updated, clear the active_handles.
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_return_short:
 	mov	r0, r0, lsl #16
 	mov	r0, r0, asr #16
@@ -3933,29 +3932,29 @@
 	str	r0, [r5, #-4]!
 .native_return_void:
 	str	r5, [r9, #THREAD_JAVA_SP]
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_return_dw:
 	stmdb	r5!, {r0, r1}
 	str	r5, [r9, #THREAD_JAVA_SP]
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_return_byte:
 	mov	r0, r0, lsl #24
 	mov	r0, r0, asr #24
 	str	r0, [r5, #-4]!
 	str	r5, [r9, #THREAD_JAVA_SP]
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_return_char:
 	mov	r0, r0, lsl #16
 	mov	r0, r0, lsr #16
 	str	r0, [r5, #-4]!
 	str	r5, [r9, #THREAD_JAVA_SP]
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_return_bool:
 	ands	r0, r0, #255
 	movne	r0, #1
 	str	r0, [r5, #-4]!
 	str	r5, [r9, #THREAD_JAVA_SP]
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 
 .native_entry_throw_stack_overflow:
 	str	r0, [r9, #THREAD_LAST_JAVA_SP]
@@ -3973,7 +3972,7 @@
 	add	r5, r5, r3, lsl #2
 	str	r5, [r9, #THREAD_JAVA_SP]
 
-	ldmfd	sp!, {r3, r4, r5, r7, r9, r10, r11, pc}
+	ldmfd	sp!, {r4, r5, r6, r7, r9, r10, r11, pc}
 .native_entry_do_special:
 	stmdb	sp!, {r0, r1}
 	mov	r0, r9