diff options
Diffstat (limited to 'test/MC/ARM/eh-directive-vsave.s')
-rw-r--r-- | test/MC/ARM/eh-directive-vsave.s | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-vsave.s b/test/MC/ARM/eh-directive-vsave.s new file mode 100644 index 0000000000..c9b78d7e27 --- /dev/null +++ b/test/MC/ARM/eh-directive-vsave.s @@ -0,0 +1,130 @@ +@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ +@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s + +@ Check the .vsave directive + +@ The .vsave directive records the VFP registers which are pushed to the +@ stack. There are two different opcodes: +@ +@ 0xC800: pop d[(16+x+y):(16+x)] @ d[16+x+y]-d[16+x] must be consecutive +@ 0xC900: pop d[(x+y):x] @ d[x+y]-d[x] must be consecutive + + + .syntax unified + +@------------------------------------------------------------------------------- +@ TEST1 +@------------------------------------------------------------------------------- + .section .TEST1 + .globl func1a + .align 2 + .type func1a,%function + .fnstart +func1a: + .vsave {d0} + vpush {d0} + vpop {d0} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func1b + .align 2 + .type func1b,%function + .fnstart +func1b: + .vsave {d0, d1, d2, d3} + vpush {d0, d1, d2, d3} + vpop {d0, d1, d2, d3} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func1c + .align 2 + .type func1c,%function + .fnstart +func1c: + .vsave {d0, d1, d2, d3, d4, d5, d6, d7} + vpush {d0, d1, d2, d3, d4, d5, d6, d7} + vpop {d0, d1, d2, d3, d4, d5, d6, d7} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func1d + .align 2 + .type func1d,%function + .fnstart +func1d: + .vsave {d2, d3, d4, d5, d6, d7} + vpush {d2, d3, d4, d5, d6, d7} + vpop {d2, d3, d4, d5, d6, d7} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + +@ CHECK: Section { +@ CHECK: Name: .ARM.extab.TEST1 +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 B000C900 00000000 B003C900 |................| +@ CHECK: 0010: 00000000 B007C900 00000000 B025C900 |.............%..| +@ CHECK: ) +@ CHECK: } + + + +@------------------------------------------------------------------------------- +@ TEST2 +@------------------------------------------------------------------------------- + .section .TEST2 + .globl func2a + .align 2 + .type func2a,%function + .fnstart +func2a: + .vsave {d16} + vpush {d16} + vpop {d16} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func2b + .align 2 + .type func2b,%function + .fnstart +func2b: + .vsave {d16, d17, d18, d19} + vpush {d16, d17, d18, d19} + vpop {d16, d17, d18, d19} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func2c + .align 2 + .type func2c,%function + .fnstart +func2c: + .vsave {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} + vpush {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} + vpop {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + +@ CHECK: Section { +@ CHECK: Name: .ARM.extab.TEST2 +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 B000C800 00000000 B003C800 |................| +@ CHECK: 0010: 00000000 B00FC800 |........| +@ CHECK: ) +@ CHECK: } |