MIPS64: Sign-extend results in art_quick_get32_static/instance
Return types of artGet32StaticFromCode and artGet32InstanceFromCode
are unsigned (size_t). On the other hand, managed code expects signed
32-bit values. This is problematic on MIPS64 which expects that all
integer type variables are properly sign-extended in registers.
This fixes test 529-checker-unresolved.
Test: mma -j2 test-art-target in QEMU
Change-Id: I70f53ded9bfa1cfd53bcc639fb4841192ee71b2b
diff --git a/runtime/arch/mips64/quick_entrypoints_mips64.S b/runtime/arch/mips64/quick_entrypoints_mips64.S
index 0bf2a35..26717ad 100644
--- a/runtime/arch/mips64/quick_entrypoints_mips64.S
+++ b/runtime/arch/mips64/quick_entrypoints_mips64.S
@@ -1487,6 +1487,7 @@
ld $a1, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method*
jal artGet32StaticFromCode # (uint32_t field_idx, const Method* referrer, Thread*)
move $a2, rSELF # pass Thread::Current
+ sll $v0, $v0, 0 # sign-extend result
RETURN_IF_NO_EXCEPTION
END art_quick_get32_static
@@ -1571,6 +1572,7 @@
ld $a2, FRAME_SIZE_SAVE_REFS_ONLY($sp) # pass referrer's Method*
jal artGet32InstanceFromCode # (field_idx, Object*, referrer, Thread*)
move $a3, rSELF # pass Thread::Current
+ sll $v0, $v0, 0 # sign-extend result
RETURN_IF_NO_EXCEPTION
END art_quick_get32_instance