diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp index 01a271327049f..e1af3150a8403 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp @@ -77,8 +77,8 @@ static bool getMCRDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, static bool getMRCDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI, std::string &Info) { if (STI.hasFeature(llvm::ARM::HasV7Ops) && - ((MI.getOperand(0).isImm() && MI.getOperand(0).getImm() == 10) || - (MI.getOperand(0).isImm() && MI.getOperand(0).getImm() == 11))) { + ((MI.getOperand(1).isImm() && MI.getOperand(1).getImm() == 10) || + (MI.getOperand(1).isImm() && MI.getOperand(1).getImm() == 11))) { Info = "since v7, cp10 and cp11 are reserved for advanced SIMD or floating " "point instructions"; return true; diff --git a/llvm/test/MC/ARM/diagnostics.s b/llvm/test/MC/ARM/diagnostics.s index fa23a7da1e404..29feee99cf351 100644 --- a/llvm/test/MC/ARM/diagnostics.s +++ b/llvm/test/MC/ARM/diagnostics.s @@ -172,9 +172,13 @@ @ p10 and p11 are reserved for NEON mcr p10, #2, r5, c1, c1, #4 - mcrr p11, #8, r5, r4, c1 -@ CHECK-WARN: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions -@ CHECK-WARN: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions + mcr p11, #2, r5, c1, c1, #4 + mrc p10, #7, r5, c1, c1, #0 + mrc p11, #7, r5, c1, c1, #0 +@ CHECK-ERROR-V7: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions +@ CHECK-ERROR-V7: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions +@ CHECK-ERROR-V7: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions +@ CHECK-ERROR-V7: warning: since v7, cp10 and cp11 are reserved for advanced SIMD or floating point instructions @ Out of range immediate for MOV movw r9, 0x10000