Index: src/IceAssemblerARM32.cpp |
diff --git a/src/IceAssemblerARM32.cpp b/src/IceAssemblerARM32.cpp |
index 13b82cdd261d9120701337c9dd17cf6be24e214d..9077325a0acbf05838bc11da4c789a4bb74803f5 100644 |
--- a/src/IceAssemblerARM32.cpp |
+++ b/src/IceAssemblerARM32.cpp |
@@ -1041,6 +1041,24 @@ void AssemblerARM32::bx(RegARM32::GPRRegister Rm, CondARM32::Cond Cond) { |
emitInst(Encoding); |
} |
+void AssemblerARM32::cmn(const Operand *OpRn, const Operand *OpSrc1, |
+ CondARM32::Cond Cond) { |
+ // CMN (immediate) - ARM section A8.8.34, encoding A1: |
+ // cmn<c> <Rn>, #<RotatedImm8> |
+ // |
+ // cccc00110111nnnn0000iiiiiiiiiiii where cccc=Cond, dddd=Rd, nnnn=Rn, |
+ // s=SetFlags and iiiiiiiiiiii=Src1Value defining RotatedImm8. |
+ // |
+ // CMN (register) - ARM section A8.8.35, encodeing A1: |
+ // cmn<c> <Rn>, <Rm>{, <shift>} |
+ // |
+ // cccc00010111nnnn0000iiiiitt0mmmm where cccc=Cond, nnnn=Rn, mmmm=Rm, |
+ // iiiii=Shift, and tt=ShiftKind. |
+ constexpr const char *CmnName = "cmn"; |
+ constexpr IValueT CmnOpcode = B3 | B1 | B0; // ie. 1011 |
+ emitCompareOp(Cond, CmnOpcode, OpRn, OpSrc1, CmnName); |
+} |
+ |
void AssemblerARM32::cmp(const Operand *OpRn, const Operand *OpSrc1, |
CondARM32::Cond Cond) { |
// CMP (register) - ARM section A8.8.38, encoding A1: |