1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ 2@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s 3 4@ Check the .vsave directive 5 6@ The .vsave directive records the VFP registers which are pushed to the 7@ stack. There are two different opcodes: 8@ 9@ 0xC800: pop d[(16+x+y):(16+x)] @ d[16+x+y]-d[16+x] must be consecutive 10@ 0xC900: pop d[(x+y):x] @ d[x+y]-d[x] must be consecutive 11 12 13 .syntax unified 14 15@------------------------------------------------------------------------------- 16@ TEST1 17@------------------------------------------------------------------------------- 18 .section .TEST1 19 .globl func1a 20 .align 2 21 .type func1a,%function 22 .fnstart 23func1a: 24 .vsave {d0} 25 vpush {d0} 26 vpop {d0} 27 bx lr 28 .personality __gxx_personality_v0 29 .handlerdata 30 .fnend 31 32 .globl func1b 33 .align 2 34 .type func1b,%function 35 .fnstart 36func1b: 37 .vsave {d0, d1, d2, d3} 38 vpush {d0, d1, d2, d3} 39 vpop {d0, d1, d2, d3} 40 bx lr 41 .personality __gxx_personality_v0 42 .handlerdata 43 .fnend 44 45 .globl func1c 46 .align 2 47 .type func1c,%function 48 .fnstart 49func1c: 50 .vsave {d0, d1, d2, d3, d4, d5, d6, d7} 51 vpush {d0, d1, d2, d3, d4, d5, d6, d7} 52 vpop {d0, d1, d2, d3, d4, d5, d6, d7} 53 bx lr 54 .personality __gxx_personality_v0 55 .handlerdata 56 .fnend 57 58 .globl func1d 59 .align 2 60 .type func1d,%function 61 .fnstart 62func1d: 63 .vsave {d2, d3, d4, d5, d6, d7} 64 vpush {d2, d3, d4, d5, d6, d7} 65 vpop {d2, d3, d4, d5, d6, d7} 66 bx lr 67 .personality __gxx_personality_v0 68 .handlerdata 69 .fnend 70 71@ CHECK: Section { 72@ CHECK: Name: .ARM.extab.TEST1 73@ CHECK: SectionData ( 74@ CHECK: 0000: 00000000 B000C900 00000000 B003C900 |................| 75@ CHECK: 0010: 00000000 B007C900 00000000 B025C900 |.............%..| 76@ CHECK: ) 77@ CHECK: } 78 79 80 81@------------------------------------------------------------------------------- 82@ TEST2 83@------------------------------------------------------------------------------- 84 .section .TEST2 85 .globl func2a 86 .align 2 87 .type func2a,%function 88 .fnstart 89func2a: 90 .vsave {d16} 91 vpush {d16} 92 vpop {d16} 93 bx lr 94 .personality __gxx_personality_v0 95 .handlerdata 96 .fnend 97 98 .globl func2b 99 .align 2 100 .type func2b,%function 101 .fnstart 102func2b: 103 .vsave {d16, d17, d18, d19} 104 vpush {d16, d17, d18, d19} 105 vpop {d16, d17, d18, d19} 106 bx lr 107 .personality __gxx_personality_v0 108 .handlerdata 109 .fnend 110 111 .globl func2c 112 .align 2 113 .type func2c,%function 114 .fnstart 115func2c: 116 .vsave {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} 117 vpush {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} 118 vpop {d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31} 119 bx lr 120 .personality __gxx_personality_v0 121 .handlerdata 122 .fnend 123 124@ CHECK: Section { 125@ CHECK: Name: .ARM.extab.TEST2 126@ CHECK: SectionData ( 127@ CHECK: 0000: 00000000 B000C800 00000000 B003C800 |................| 128@ CHECK: 0010: 00000000 B00FC800 |........| 129@ CHECK: ) 130@ CHECK: } 131