Chromium Code Reviews| Index: src/IceInstARM32.cpp |
| diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp |
| index 86edd1d76be55c327f7cf4ee7ec1b7a3b44ecac5..0b66b95d779b0b32021aaf1abea50c5008ee6a4c 100644 |
| --- a/src/IceInstARM32.cpp |
| +++ b/src/IceInstARM32.cpp |
| @@ -1158,19 +1158,29 @@ void InstARM32Mov::emitIASScalarVFPMove(const Cfg *Func) const { |
| switch (Dest->getType()) { |
| default: |
| assert(false && "Do not know how to emit scalar FP move for type."); |
| - return; |
| + break; |
| case IceType_f32: |
| - if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { |
| + if (llvm::isa<Variable>(Src0)) { |
|
Jim Stichnoth
2016/01/27 22:10:49
Are vmovss and vmovdd always going to have a Varia
Karl
2016/01/27 22:58:09
Done.
|
| + Asm->vmovss(Dest, Src0, getPredicate()); |
| + return; |
| + } else if (const auto *FpImm = |
| + llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { |
| Asm->vmovs(Dest, FpImm, getPredicate()); |
| return; |
| } |
| - break; |
| + assert(!Asm->needsTextFixup()); |
| + return; |
| case IceType_f64: |
| - if (const auto *FpImm = llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { |
| + if (llvm::isa<Variable>(Src0)) { |
| + Asm->vmovdd(Dest, Src0, getPredicate()); |
| + return; |
| + } else if (const auto *FpImm = |
| + llvm::dyn_cast<OperandARM32FlexFpImm>(Src0)) { |
| Asm->vmovd(Dest, FpImm, getPredicate()); |
| return; |
| } |
| - break; |
| + assert(!Asm->needsTextFixup()); |
| + return; |
| } |
| // TODO(kschimpf) Handle register to register move. |
| Asm->setNeedsTextFixup(); |