diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-01-30 04:46:24 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-01-30 04:46:24 +0000 |
commit | 7a38b33decb80eff92060b7ad95ff1b877f685c3 (patch) | |
tree | 38e81c5521ec7a49f8cae28f2658171f49bd3026 /test/MC | |
parent | 2c9ed5d050b5c57bfed35bd82c23f46c714d10c0 (diff) | |
download | llvm-7a38b33decb80eff92060b7ad95ff1b877f685c3.tar.gz llvm-7a38b33decb80eff92060b7ad95ff1b877f685c3.tar.bz2 llvm-7a38b33decb80eff92060b7ad95ff1b877f685c3.tar.xz |
ARM IAS: support .movsp
.movsp is an ARM unwinding directive that indicates to the unwinder that a
register contains an offset from the current stack pointer. If the offset is
unspecified, it defaults to zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200449 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r-- | test/MC/ARM/eh-directive-movsp-diagnostics.s | 102 | ||||
-rw-r--r-- | test/MC/ARM/eh-directive-movsp.s | 44 |
2 files changed, 146 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-movsp-diagnostics.s b/test/MC/ARM/eh-directive-movsp-diagnostics.s new file mode 100644 index 0000000000..519e7d742f --- /dev/null +++ b/test/MC/ARM/eh-directive-movsp-diagnostics.s @@ -0,0 +1,102 @@ +@ RUN: not llvm-mc -triple armv7-eabi -filetype asm -o /dev/null 2>&1 %s \ +@ RUN: | FileCheck %s + + .syntax unified + .thumb + + .global false_start + .type false_start,%function + .thumb_func +false_start: + .movsp r7 + +@ CHECK: error: .fnstart must precede .movsp directive +@ CHECK: .movsp r7 +@ CHECK: ^ + + .global beyond_saving + .type beyond_saving,%function + .thumb_func +beyond_saving: + .fnstart + .setfp r11, sp, #8 + add r11, sp, #8 + .movsp r7 + mov r7, r11 + .fnend + +@ CHECK: error: unexpected .movsp directive +@ CHECK: .movsp r7 +@ CHECK: ^ + + + .global sp_invalid + .type sp_invalid,%function + .thumb_func +sp_invalid: + .fnstart + .movsp r13 + mov sp, sp + .fnend + +@ CHECK: error: sp and pc are not permitted in .movsp directive +@ CHECK: .movsp r13 +@ CHECK: ^ + + + .global pc_invalid + .type pc_invalid,%function + .thumb_func +pc_invalid: + .fnstart + .movsp r15 + mov sp, pc + .fnend + +@ CHECK: error: sp and pc are not permitted in .movsp directive +@ CHECK: .movsp r15 +@ CHECK: ^ + + + .global constant_required + .type constant_required,%function + .thumb_func +constant_required: + .fnstart + .movsp r11, + mov sp, r11 + .fnend + +@ CHECK: error: expected #constant +@ CHECK: .movsp r11, +@ CHECK: ^ + + + .global constant_constant + .type constant_constant,%function + .thumb_func +constant_constant: + .fnstart + .movsp r11, #constant + mov sp, r11 + .fnend + +@ CHECK: error: offset must be an immediate constant +@ CHECK: .movsp r11, #constant +@ CHECK: ^ + + + .arm + + .global register_required + .type register_required,%function +register_required: + .fnstart + .movsp #42 + mov sp, #42 + .fnend + +@ CHECK: error: register expected +@ CHECK: .movsp #42 +@ CHECK: ^ + diff --git a/test/MC/ARM/eh-directive-movsp.s b/test/MC/ARM/eh-directive-movsp.s new file mode 100644 index 0000000000..620f5b769d --- /dev/null +++ b/test/MC/ARM/eh-directive-movsp.s @@ -0,0 +1,44 @@ +@ RUN: llvm-mc -triple armv7-eabi -filetype obj -o - %s | llvm-readobj -s -sd \ +@ RUN: | FileCheck %s + + .syntax unified + .thumb + + .section .duplicate + + .global duplicate + .type duplicate,%function +duplicate: + .fnstart + .setfp sp, sp, #8 + add sp, sp, #8 + .movsp r11 + mov r11, sp + .fnend + +@ CHECK: Section { +@ CHECK: Name: .ARM.exidx.duplicate +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 B09B9B80 +@ CHECK: ) +@ CHECK: } + + + .section .squash + + .global squash + .type squash,%function +squash: + .fnstart + .movsp ip + mov ip, sp + .save {fp, ip, lr} + stmfd sp!, {fp, ip, lr} + .fnend + +@ CHECK: Section { +@ CHECK: Name: .ARM.exidx.squash +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 9C808580 +@ CHECK: ) +@ CHECK: } |