Index: src/IceInstARM32.cpp |
diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp |
index a09c5fcd576b772a6f78be2bebdf23ebaa7b23af..d35e04feb8d87b23794ceb0b223f262e1a2d5a94 100644 |
--- a/src/IceInstARM32.cpp |
+++ b/src/IceInstARM32.cpp |
@@ -225,6 +225,11 @@ void InstARM32FourAddrGPR<K>::emitIAS(const Cfg *Func) const { |
emitUsingTextFixup(Func); |
} |
+template <InstARM32::InstKindARM32 K> |
+void InstARM32ThreeAddrFP<K>::emitIAS(const Cfg *Func) const { |
+ emitUsingTextFixup(Func); |
+} |
+ |
template <> void InstARM32Mla::emitIAS(const Cfg *Func) const { |
assert(getSrcSize() == 3); |
auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
@@ -591,6 +596,25 @@ template <> void InstARM32Udiv::emitIAS(const Cfg *Func) const { |
emitUsingTextFixup(Func); |
} |
+template <> void InstARM32Vadd::emitIAS(const Cfg *Func) const { |
+ auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
+ const Variable *Dest = getDest(); |
+ switch (Dest->getType()) { |
+ default: |
+ // TODO(kschimpf) Figure if more cases are needed. |
+ Asm->setNeedsTextFixup(); |
+ break; |
+ case IceType_f32: |
+ Asm->vadds(getDest(), getSrc(0), getSrc(1), CondARM32::AL); |
+ break; |
+ case IceType_f64: |
+ Asm->vaddd(getDest(), getSrc(0), getSrc(1), CondARM32::AL); |
+ break; |
+ } |
+ if (Asm->needsTextFixup()) |
+ emitUsingTextFixup(Func); |
+} |
+ |
InstARM32Call::InstARM32Call(Cfg *Func, Variable *Dest, Operand *CallTarget) |
: InstARM32(Func, InstARM32::Call, 1, Dest) { |
HasSideEffects = true; |