Chromium Code Reviews| Index: src/IceInstARM32.cpp |
| diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp |
| index 5f4991f001d2cabb7cbabb9963d0204a22b999f3..3d1d87f9bee97efb396894f3c0f9233433eabb26 100644 |
| --- a/src/IceInstARM32.cpp |
| +++ b/src/IceInstARM32.cpp |
| @@ -641,6 +641,27 @@ template <> void InstARM32Veor::emitIAS(const Cfg *Func) const { |
| assert(!Asm->needsTextFixup()); |
| } |
| +template <> void InstARM32Vmla::emitIAS(const Cfg *Func) const { |
| + // Note: Dest == getSrc(0) for four address FP instructions. |
| + assert(getSrcSize() == 3); |
| + auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
| + const Variable *Dest = getDest(); |
| + switch (Dest->getType()) { |
| + default: |
| + // TODO(kschimpf) Figure out how vector operations apply. |
| + Asm->setNeedsTextFixup(); |
| + break; |
| + case IceType_f32: |
| + Asm->vmlas(getDest(), getSrc(1), getSrc(2), CondARM32::AL); |
|
John
2016/01/26 19:13:15
perhaps
assert(!Asm->needsTextFixup());
here (an
Karl
2016/01/26 20:38:39
Done.
|
| + break; |
| + case IceType_f64: |
| + Asm->vmlad(getDest(), getSrc(1), getSrc(2), CondARM32::AL); |
| + break; |
| + } |
| + if (Asm->needsTextFixup()) |
| + emitUsingTextFixup(Func); |
| +} |
| + |
| template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const { |
| auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
| const Variable *Dest = getDest(); |