1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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: }
|