Index: src/IceInstARM32.cpp |
diff --git a/src/IceInstARM32.cpp b/src/IceInstARM32.cpp |
index 2560b7cd7850ed3dfec5b551d934ce284b7b0c3d..df49e92470c698301fb8044f8fb6564bc6097c30 100644 |
--- a/src/IceInstARM32.cpp |
+++ b/src/IceInstARM32.cpp |
@@ -1923,6 +1923,39 @@ void InstARM32Vcmp::emit(const Cfg *Func) const { |
getSrc(1)->emit(Func); |
} |
+void InstARM32Vcmp::emitIAS(const Cfg *Func) const { |
+ assert(getSrcSize() == 2); |
+ const Operand *Src0 = getSrc(0); |
+ Type Ty = Src0->getType(); |
Jim Stichnoth
2016/01/09 01:34:28
const Type
Karl
2016/01/11 16:42:20
Done.
|
+ const Operand *Src1 = getSrc(1); |
+ const CondARM32::Cond Cond = getPredicate(); |
+ auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
+ if (llvm::isa<OperandARM32FlexFpZero>(Src1)) { |
+ switch (Ty) { |
+ case IceType_f32: |
+ Asm->vcmpsz(Src0, Cond); |
+ break; |
+ case IceType_f64: |
+ Asm->vcmpdz(Src0, Cond); |
+ break; |
+ default: |
+ llvm::report_fatal_error("Vcvt on non floating value"); |
+ } |
+ } else { |
+ switch (Ty) { |
+ case IceType_f32: |
+ Asm->vcmps(Src0, Src1, Cond); |
+ break; |
+ case IceType_f64: |
+ Asm->vcmpd(Src0, Src1, Cond); |
+ break; |
+ default: |
+ llvm::report_fatal_error("Vcvt on non floating value"); |
+ } |
+ } |
+ assert(!Asm->needsTextFixup()); |
+} |
+ |
void InstARM32Vcmp::dump(const Cfg *Func) const { |
if (!BuildDefs::dump()) |
return; |