[aarch64-port-dev ] Fix register usage in generate_verify_oop()

Andrew Haley aph at redhat.com
Thu Jun 19 14:40:28 UTC 2014


generate_verify_oop's error reporting was broken.  I don't think
it ever worked.

Andrew.


# HG changeset patch
# User aph
# Date 1403011817 14400
#      Tue Jun 17 09:30:17 2014 -0400
# Node ID f6b18d9a37d99880e982db1ec70f68d1e17fa8c3
# Parent  e1af2a22237811f065ecadbcbc2113e102fc7a29
Fix register usage in generate_verify_oop().

diff -r e1af2a222378 -r f6b18d9a37d9 src/cpu/aarch64/vm/stubGenerator_aarch64.cpp
--- a/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Mon Jun 16 07:25:03 2014 -0400
+++ b/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Tue Jun 17 09:30:17 2014 -0400
@@ -754,10 +754,10 @@
   // Stack after saving c_rarg3:
   //    [tos + 0]: saved c_rarg3
   //    [tos + 1]: saved c_rarg2
-  //    [tos + 2]: saved rscratch2
-  //    [tos + 3]: saved lr
-  //    [tos + 4]: saved rscratch1
-  //    [tos + 5]: saved r0
+  //    [tos + 2]: saved lr
+  //    [tos + 3]: saved rscratch2
+  //    [tos + 4]: saved r0
+  //    [tos + 5]: saved rscratch1
   address generate_verify_oop() {

     StubCodeMark mark(this, "StubRoutines", "verify_oop");
@@ -765,9 +765,6 @@

     Label exit, error;

-    // __ pushf();
-    // __ push(r12);
-
     // save c_rarg2 and c_rarg3
     __ stp(c_rarg3, c_rarg2, Address(__ pre(sp, -16)));

@@ -807,21 +804,15 @@

     __ push(RegSet::range(r0, r29), sp);
     // debug(char* msg, int64_t pc, int64_t regs[])
-    __ ldr(c_rarg0, Address(sp, rscratch1->encoding()));    // pass address of error message
-    __ mov(c_rarg1, Address(sp, lr));             // pass return address
-    __ mov(c_rarg2, sp);                          // pass address of regs on stack
+    __ mov(c_rarg0, rscratch1);      // pass address of error message
+    __ mov(c_rarg1, lr);             // pass return address
+    __ mov(c_rarg2, sp);             // pass address of regs on stack
 #ifndef PRODUCT
     assert(frame::arg_reg_save_area_bytes == 0, "not expecting frame reg save area");
 #endif
     BLOCK_COMMENT("call MacroAssembler::debug");
     __ mov(rscratch1, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
     __ blrt(rscratch1, 3, 0, 1);
-    __ pop(RegSet::range(r0, r29), sp);
-
-    __ ldp(rscratch2, lr, Address(__ post(sp, 2 * wordSize)));
-    __ ldp(r0, rscratch1, Address(__ post(sp, 2 * wordSize)));
-
-    __ ret(lr);

     return start;
   }


More information about the aarch64-port-dev mailing list