Mercurial > hg > graal-jvmci-8
diff src/cpu/sparc/vm/assembler_sparc.inline.hpp @ 6795:7eca5de9e0b6
7023898: Intrinsify AtomicLongFieldUpdater.getAndIncrement()
Summary: use shorter instruction sequences for atomic add and atomic exchange when possible.
Reviewed-by: kvn, jrose
author | roland |
---|---|
date | Thu, 20 Sep 2012 16:49:17 +0200 |
parents | da91efe96a93 |
children | f0c2369fda5a |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/assembler_sparc.inline.hpp Wed Sep 19 16:50:26 2012 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.inline.hpp Thu Sep 20 16:49:17 2012 +0200 @@ -347,7 +347,11 @@ inline void Assembler::swap( Register s1, Register s2, Register d) { v9_dep(); emit_long( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | rs2(s2) ); } inline void Assembler::swap( Register s1, int simm13a, Register d) { v9_dep(); emit_data( op(ldst_op) | rd(d) | op3(swap_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); } -inline void Assembler::swap( Address& a, Register d, int offset ) { relocate(a.rspec(offset)); swap( a.base(), a.disp() + offset, d ); } +inline void Assembler::swap( Address& a, Register d, int offset ) { + relocate(a.rspec(offset)); + if (a.has_index()) { assert(offset == 0, ""); swap( a.base(), a.index(), d ); } + else { swap( a.base(), a.disp() + offset, d ); } +} // Use the right loads/stores for the platform