[aarch64-port-dev ] Use ADD after ARDP rather than LEA
Andrew Haley
aph at redhat.com
Thu Dec 19 09:32:14 PST 2013
This is an interesting one: if heap_top happens to be exactly on a page
boundary we got an internal error. Fixed thusly, explanation in comment.
Andrew.
# HG changeset patch
# User aph
# Date 1387473869 0
# Node ID 493467bb0f072be158c80cb1fd28c5e9608cf65e
# Parent 18fdef53937828aaada5f1b618c2535ea6a189de
Use ADD after ARDP rather than LEA.
diff -r 18fdef539378 -r 493467bb0f07 src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Thu Dec 19 16:29:05 2013 +0000
+++ b/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp Thu Dec 19 17:24:29 2013 +0000
@@ -2617,7 +2617,12 @@
{
unsigned long offset;
adrp(rscratch1, heap_top, offset);
- lea(rscratch1, Address(rscratch1, offset));
+ // Use add() here after ARDP, rather than lea().
+ // lea() does not generate anything if its offset is zero.
+ // However, relocs expect to find either an ADD or a load/store
+ // insn after an ADRP. add() always generates an ADD insn, even
+ // for add(Rn, Rn, 0).
+ add(rscratch1, rscratch1, offset);
ldaxr(obj, rscratch1);
}
More information about the aarch64-port-dev
mailing list