diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index b89f453d27d..59461e8f553 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -4424,11 +4424,6 @@ ARMAsmParser::parseModImm(OperandVector &Operands) { if (CE) { // Immediate must fit within 32-bits Imm1 = CE->getValue(); - if (Imm1 < INT32_MIN || Imm1 > UINT32_MAX) { - Error(Sx1, "immediate operand must be representable with 32 bits"); - return MatchOperand_ParseFail; - } - int Enc = ARM_AM::getSOImmVal(Imm1); if (Enc != -1 && Parser.getTok().is(AsmToken::EndOfStatement)) { // We have a match! diff --git a/test/MC/ARM/basic-arm-instructions.s b/test/MC/ARM/basic-arm-instructions.s index 616674e5635..a1f13b76dda 100644 --- a/test/MC/ARM/basic-arm-instructions.s +++ b/test/MC/ARM/basic-arm-instructions.s @@ -1509,6 +1509,7 @@ Lforward: mvn r3, $7 mvn r3, 7 mvn r3, -7 + mvn r7, #~0xffffff00 mvn r4, #0xff0 mvn r5, #0xff0000 mvn r7, #(0xff << 16) @@ -1526,6 +1527,7 @@ Lforward: @ CHECK: mvn r3, #7 @ encoding: [0x07,0x30,0xe0,0xe3] @ CHECK: mvn r3, #7 @ encoding: [0x07,0x30,0xe0,0xe3] @ CHECK: mov r3, #6 @ encoding: [0x06,0x30,0xa0,0xe3] +@ CHECK: mvn r7, #255 @ encoding: [0xff,0x70,0xe0,0xe3] @ CHECK: mvn r4, #4080 @ encoding: [0xff,0x4e,0xe0,0xe3] @ CHECK: mvn r5, #16711680 @ encoding: [0xff,0x58,0xe0,0xe3] @ CHECK: mvn r7, #16711680 @ encoding: [0xff,0x78,0xe0,0xe3]