changeset 8565:f50e867292b6

8138575: Improve generated code for profile counters Reviewed-by: kvn
author aph
date Tue, 29 Sep 2015 17:01:37 +0000
parents be6204a5856d
children 5b75aaed29fc
files src/cpu/aarch64/vm/macroAssembler_aarch64.cpp src/cpu/aarch64/vm/macroAssembler_aarch64.hpp
diffstat 2 files changed, 19 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Wed Sep 30 13:23:46 2015 +0000
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Tue Sep 29 17:01:37 2015 +0000
@@ -2887,6 +2887,24 @@
   _masm->bind(_label);
 }
 
+void MacroAssembler::addptr(const Address &dst, int32_t src) {
+  Address adr;
+  switch(dst.getMode()) {
+  case Address::base_plus_offset:
+    // This is the expected mode, although we allow all the other
+    // forms below.
+    adr = form_address(rscratch2, dst.base(), dst.offset(), LogBytesPerWord);
+    break;
+  default:
+    lea(rscratch2, dst);
+    adr = Address(rscratch2);
+    break;
+  }
+  ldr(rscratch1, adr);
+  add(rscratch1, rscratch1, src);
+  str(rscratch1, adr);
+}
+
 void MacroAssembler::cmpptr(Register src1, Address src2) {
   unsigned long offset;
   adrp(rscratch1, src2, offset);
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Wed Sep 30 13:23:46 2015 +0000
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Tue Sep 29 17:01:37 2015 +0000
@@ -899,13 +899,7 @@
 
   // Arithmetics
 
-  void addptr(Address dst, int32_t src) {
-    lea(rscratch2, dst);
-    ldr(rscratch1, Address(rscratch2));
-    add(rscratch1, rscratch1, src);
-    str(rscratch1, Address(rscratch2));
-  }
-
+  void addptr(const Address &dst, int32_t src);
   void cmpptr(Register src1, Address src2);
 
   void cmpxchgptr(Register oldv, Register newv, Register addr, Register tmp,