Chromium Code Reviews| 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; |