diff options
author | Jim Grosbach <grosbach@apple.com> | 2011-08-23 18:15:37 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2011-08-23 18:15:37 +0000 |
commit | 1e84f19337d44c04e74af4fb005550b525ef60e5 (patch) | |
tree | b4ebb5c00ab7bc6f3cb01ff0b34c434ec1dbc111 | |
parent | aa875f8c6fdf3a7a26ccc381cf8ecd2b69678dad (diff) |
Thumb parsing and encoding for STM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138345 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 7 | ||||
-rw-r--r-- | test/MC/ARM/basic-thumb-instructions.s | 10 | ||||
-rw-r--r-- | test/MC/ARM/thumb-diagnostics.s | 9 |
3 files changed, 26 insertions, 0 deletions
diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 931bd36524..40efea7454 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -3149,6 +3149,13 @@ validateInstruction(MCInst &Inst, "registers must be in range r0-r7 or lr"); break; } + case ARM::tSTMIA_UPD: { + bool listContainsBase; + if (checkLowRegisterList(Inst, 3, 0, 0, listContainsBase)) + return Error(Operands[4]->getStartLoc(), + "registers must be in range r0-r7"); + break; + } } return false; diff --git a/test/MC/ARM/basic-thumb-instructions.s b/test/MC/ARM/basic-thumb-instructions.s index 020bc935d1..741fe85f10 100644 --- a/test/MC/ARM/basic-thumb-instructions.s +++ b/test/MC/ARM/basic-thumb-instructions.s @@ -425,3 +425,13 @@ _func: @ CHECK: setend be @ encoding: [0x58,0xb6] @ CHECK: setend le @ encoding: [0x50,0xb6] + + +@------------------------------------------------------------------------------ +@ STM +@------------------------------------------------------------------------------ + stm r1!, {r2, r6} + stm r1!, {r1, r2, r3, r7} + +@ CHECK: stm r1!, {r2, r6} @ encoding: [0x44,0xc1] +@ CHECK: stm r1!, {r1, r2, r3, r7} @ encoding: [0x8e,0xc1] diff --git a/test/MC/ARM/thumb-diagnostics.s b/test/MC/ARM/thumb-diagnostics.s index 55b062e399..604127a642 100644 --- a/test/MC/ARM/thumb-diagnostics.s +++ b/test/MC/ARM/thumb-diagnostics.s @@ -68,6 +68,15 @@ error: invalid operand for instruction @ CHECK-ERRORS: ^ +@ Invalid writeback and register lists for STM + stm r1, {r2, r6} + stm r1!, {r2, r9} +@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled +@ CHECK-ERRORS: stm r1, {r2, r6} +@ CHECK-ERRORS: ^ +@ CHECK-ERRORS: error: registers must be in range r0-r7 +@ CHECK-ERRORS: stm r1!, {r2, r9} +@ CHECK-ERRORS: ^ @ Out of range immediates for LSL instruction. lsls r4, r5, #-1 |