diff options
| author | 2016-03-30 10:08:25 +0000 | |
|---|---|---|
| committer | 2016-03-30 10:08:25 +0000 | |
| commit | 01098af7a530ca65dcf5a40b3799c5147e49bd64 (patch) | |
| tree | 3d5e5cc12abcc7165371d617c0d2769075348873 | |
| parent | 9049d072d9d815c8056d80d700cffa4b97971ecd (diff) | |
| parent | a1eff4f279253bbc90d2697d7c15390bcab65d1e (diff) | |
Merge "X86_64: Replace x86_64 xchg instruction use"
am: a1eff4f
* commit 'a1eff4f279253bbc90d2697d7c15390bcab65d1e':
X86_64: Replace x86_64 xchg instruction use
Change-Id: I3a95d8b662a424f0f218acf31894fdf86b4bbca2
| -rw-r--r-- | compiler/optimizing/code_generator_x86_64.cc | 8 | ||||
| -rw-r--r-- | compiler/optimizing/code_generator_x86_64.h | 1 |
2 files changed, 8 insertions, 1 deletions
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index d24b5bbd56..b20043c545 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -5249,6 +5249,12 @@ void ParallelMoveResolverX86_64::Exchange32(int mem1, int mem2) { CpuRegister(ensure_scratch.GetRegister())); } +void ParallelMoveResolverX86_64::Exchange64(CpuRegister reg1, CpuRegister reg2) { + __ movq(CpuRegister(TMP), reg1); + __ movq(reg1, reg2); + __ movq(reg2, CpuRegister(TMP)); +} + void ParallelMoveResolverX86_64::Exchange64(CpuRegister reg, int mem) { __ movq(CpuRegister(TMP), Address(CpuRegister(RSP), mem)); __ movq(Address(CpuRegister(RSP), mem), reg); @@ -5286,7 +5292,7 @@ void ParallelMoveResolverX86_64::EmitSwap(size_t index) { Location destination = move->GetDestination(); if (source.IsRegister() && destination.IsRegister()) { - __ xchgq(destination.AsRegister<CpuRegister>(), source.AsRegister<CpuRegister>()); + Exchange64(source.AsRegister<CpuRegister>(), destination.AsRegister<CpuRegister>()); } else if (source.IsRegister() && destination.IsStackSlot()) { Exchange32(source.AsRegister<CpuRegister>(), destination.GetStackIndex()); } else if (source.IsStackSlot() && destination.IsRegister()) { diff --git a/compiler/optimizing/code_generator_x86_64.h b/compiler/optimizing/code_generator_x86_64.h index c3fce6e824..396ddf2889 100644 --- a/compiler/optimizing/code_generator_x86_64.h +++ b/compiler/optimizing/code_generator_x86_64.h @@ -142,6 +142,7 @@ class ParallelMoveResolverX86_64 : public ParallelMoveResolverWithSwap { void Exchange32(CpuRegister reg, int mem); void Exchange32(XmmRegister reg, int mem); void Exchange32(int mem1, int mem2); + void Exchange64(CpuRegister reg1, CpuRegister reg2); void Exchange64(CpuRegister reg, int mem); void Exchange64(XmmRegister reg, int mem); void Exchange64(int mem1, int mem2); |