Chromium Code Reviews| Index: src/IceInstARM32.cpp |
| diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp |
| index aa6f00f7ca3efdae6be9aa60bb0f2759c1c31143..922fe731eaea13687afb3ae8f4fe2c1b8f6b2eb1 100644 |
| --- a/src/IceInstARM32.cpp |
| +++ b/src/IceInstARM32.cpp |
| @@ -1283,13 +1283,17 @@ void InstARM32Mov::emit(const Cfg *Func) const { |
| } |
| void InstARM32Mov::emitIAS(const Cfg *Func) const { |
| - assert(!(isMultiDest() && isMultiSource()) && "Invalid vmov type."); |
| + // TODO(kschimpf) Flatten this to a switch statement of dest type. That is, |
| + // Combine code of emitIASSingleDestSingleSource, emitIASCoreVFPMove, |
|
Jim Stichnoth
2016/01/29 00:54:39
s/Combine/combine/
Karl
2016/01/29 15:28:20
Done.
|
| + // emitIASScalarVFPMove, emitDoubleToI64Move, and emitI64ToDoubleMove. |
| auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
| - if (!(isMultiDest() || isMultiSource())) |
| - // Must be single source/dest. |
| - emitIASSingleDestSingleSource(Func); |
| + assert(!(isMultiDest() && isMultiSource()) && "Invalid vmov type."); |
| + if (isMultiDest()) |
| + Asm->vmovrrd(getDest(), getDestHi(), getSrc(0), getPredicate()); |
| + else if (isMultiSource()) |
| + Asm->vmovdrr(getDest(), getSrc(0), getSrc(1), getPredicate()); |
| else |
| - Asm->setNeedsTextFixup(); |
| + emitIASSingleDestSingleSource(Func); |
| if (Asm->needsTextFixup()) |
| emitUsingTextFixup(Func); |
| } |