brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 7d32ea3 Raw
344 lines · plain
1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \2@ RUN:   | llvm-readobj -S --sd - | FileCheck %s3 4@ Check the .save directive5 6@ The .save directive records the GPR registers which are pushed to the7@ stack.  There are 4 different unwind opcodes:8@9@     0xB100: pop r[3:0]10@     0xA0:   pop r[(4+x):4]		@ r[4+x]-r[4] must be consecutive.11@     0xA8:   pop r14, r[(4+x):4]	@ r[4+x]-r[4] must be consecutive.12@     0x8000: pop r[15:4]13@14@ If register list specifed by .save directive is possible to be encoded15@ by 0xA0 or 0xA8, then the assembler should prefer them over 0x8000.16 17 18	.syntax unified19 20@-------------------------------------------------------------------------------21@ TEST122@-------------------------------------------------------------------------------23	.section	.TEST124	.globl	func1a25	.align	226	.type	func1a,%function27	.fnstart28func1a:29	.save	{r0}30	push	{r0}31	pop	{r0}32	bx	lr33	.personality __gxx_personality_v034	.handlerdata35	.fnend36 37	.globl	func1b38	.align	239	.type	func1b,%function40	.fnstart41func1b:42	.save	{r0, r1}43	push	{r0, r1}44	pop	{r0, r1}45	bx	lr46	.personality __gxx_personality_v047	.handlerdata48	.fnend49 50	.globl	func1c51	.align	252	.type	func1c,%function53	.fnstart54func1c:55	.save	{r0, r2}56	push	{r0, r2}57	pop	{r0, r2}58	bx	lr59	.personality __gxx_personality_v060	.handlerdata61	.fnend62 63	.globl	func1d64	.align	265	.type	func1d,%function66	.fnstart67func1d:68	.save	{r1, r2}69	push	{r1, r2}70	pop	{r1, r2}71	bx	lr72	.personality __gxx_personality_v073	.handlerdata74	.fnend75 76	.globl	func1e77	.align	278	.type	func1e,%function79	.fnstart80func1e:81	.save	{r0, r1, r2, r3}82	push	{r0, r1, r2, r3}83	pop	{r0, r1, r2, r3}84	bx	lr85	.personality __gxx_personality_v086	.handlerdata87	.fnend88 89@-------------------------------------------------------------------------------90@ The assembler should emit 0xB000 unwind opcode.91@-------------------------------------------------------------------------------92@ CHECK: Section {93@ CHECK:   Name: .ARM.extab.TEST194@ CHECK:   SectionData (95@ CHECK:     0000: 00000000 B001B100 00000000 B003B100  |................|96@ CHECK:     0010: 00000000 B005B100 00000000 B006B100  |................|97@ CHECK:     0020: 00000000 B00FB100                    |........|98@ CHECK:   )99@ CHECK: }100 101 102 103@-------------------------------------------------------------------------------104@ TEST2105@-------------------------------------------------------------------------------106	.section	.TEST2107	.globl	func2a108	.align	2109	.type	func2a,%function110	.fnstart111func2a:112	.save	{r4}113	push	{r4}114	pop	{r4}115	bx	lr116	.personality __gxx_personality_v0117	.handlerdata118	.fnend119 120	.globl	func2b121	.align	2122	.type	func2b,%function123	.fnstart124func2b:125	.save	{r4, r5}126	push	{r4, r5}127	pop	{r4, r5}128	bx	lr129	.personality __gxx_personality_v0130	.handlerdata131	.fnend132 133	.globl	func2c134	.align	2135	.type	func2c,%function136	.fnstart137func2c:138	.save	{r4, r5, r6, r7, r8, r9, r10, r11}139	push	{r4, r5, r6, r7, r8, r9, r10, r11}140	pop	{r4, r5, r6, r7, r8, r9, r10, r11}141	bx	lr142	.personality __gxx_personality_v0143	.handlerdata144	.fnend145 146@-------------------------------------------------------------------------------147@ The assembler should emit 0xA0 unwind opcode.148@-------------------------------------------------------------------------------149@ CHECK: Section {150@ CHECK:   Name: .ARM.extab.TEST2151@ CHECK:   SectionData (152@ CHECK:     0000: 00000000 B0B0A000 00000000 B0B0A100  |................|153@ CHECK:     0010: 00000000 B0B0A700                    |........|154@ CHECK:   )155@ CHECK: }156 157 158 159@-------------------------------------------------------------------------------160@ TEST3161@-------------------------------------------------------------------------------162	.section	.TEST3163	.globl	func3a164	.align	2165	.type	func3a,%function166	.fnstart167func3a:168	.save	{r4, r14}169	push	{r4, r14}170	pop	{r4, r14}171	bx	lr172	.personality __gxx_personality_v0173	.handlerdata174	.fnend175 176	.globl	func3b177	.align	2178	.type	func3b,%function179	.fnstart180func3b:181	.save	{r4, r5, r14}182	push	{r4, r5, r14}183	pop	{r4, r5, r14}184	bx	lr185	.personality __gxx_personality_v0186	.handlerdata187	.fnend188 189	.globl	func3c190	.align	2191	.type	func3c,%function192	.fnstart193func3c:194	.save	{r4, r5, r6, r7, r8, r9, r10, r11, r14}195	push	{r4, r5, r6, r7, r8, r9, r10, r11, r14}196	pop	{r4, r5, r6, r7, r8, r9, r10, r11, r14}197	bx	lr198	.personality __gxx_personality_v0199	.handlerdata200	.fnend201 202@-------------------------------------------------------------------------------203@ The assembler should emit 0xA8 unwind opcode.204@-------------------------------------------------------------------------------205@ CHECK: Section {206@ CHECK:   Name: .ARM.extab.TEST3207@ CHECK:   SectionData (208@ CHECK:     0000: 00000000 B0B0A800 00000000 B0B0A900  |................|209@ CHECK:     0010: 00000000 B0B0AF00                    |........|210@ CHECK:   )211@ CHECK: }212 213 214 215@-------------------------------------------------------------------------------216@ TEST4217@-------------------------------------------------------------------------------218	.section	.TEST4219	.globl	func4a220	.align	2221	.type	func4a,%function222	.fnstart223func4a:224	.save	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}225	push	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}226	pop	{r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}227	bx	lr228	.personality __gxx_personality_v0229	.handlerdata230	.fnend231 232	.globl	func4b233	.align	2234	.type	func4b,%function235	.fnstart236func4b:237	@ Note: r7 is missing intentionally.238	.save	{r4, r5, r6, r8, r9, r10, r11}239	push	{r4, r5, r6, r8, r9, r10, r11}240	pop	{r4, r5, r6, r8, r9, r10, r11}241	bx	lr242	.personality __gxx_personality_v0243	.handlerdata244	.fnend245 246	.globl	func4c247	.align	2248	.type	func4c,%function249	.fnstart250func4c:251	@ Note: r7 is missing intentionally.252	.save	{r4, r5, r6, r8, r9, r10, r11, r14}253	push	{r4, r5, r6, r8, r9, r10, r11, r14}254	pop	{r4, r5, r6, r8, r9, r10, r11, r14}255	bx	lr256	.personality __gxx_personality_v0257	.handlerdata258	.fnend259 260	.globl	func4d261	.align	2262	.type	func4d,%function263	.fnstart264func4d:265	@ Note: The register list is not start with r4.266	.save	{r5, r6, r7}267	push	{r5, r6, r7}268	pop	{r5, r6, r7}269	bx	lr270	.personality __gxx_personality_v0271	.handlerdata272	.fnend273 274	.globl	func4e275	.align	2276	.type	func4e,%function277	.fnstart278func4e:279	@ Note: The register list is not start with r4.280	.save	{r5, r6, r7, r14}281	push	{r5, r6, r7, r14}282	pop	{r5, r6, r7, r14}283	bx	lr284	.personality __gxx_personality_v0285	.handlerdata286	.fnend287 288@-------------------------------------------------------------------------------289@ The assembler should emit 0x8000 unwind opcode.290@-------------------------------------------------------------------------------291@ CHECK: Section {292@ CHECK:   Name: .ARM.extab.TEST4293@ CHECK:   SectionData (294@ CHECK:     0000: 00000000 B0FF8500 00000000 B0F78000  |................|295@ CHECK:     0010: 00000000 B0F78400 00000000 B00E8000  |................|296@ CHECK:     0020: 00000000 B00E8400                    |........|297@ CHECK:   )298@ CHECK: }299 300 301 302@-------------------------------------------------------------------------------303@ TEST5304@-------------------------------------------------------------------------------305	.section	.TEST5306	.globl	func5a307	.align	2308	.type	func5a,%function309	.fnstart310func5a:311	.save	{r0, r1, r2, r3, r4, r5, r6}312	push	{r0, r1, r2, r3, r4, r5, r6}313	pop	{r0, r1, r2, r3, r4, r5, r6}314	bx	lr315	.personality __gxx_personality_v0316	.handlerdata317	.fnend318 319	.globl	func5b320	.align	2321	.type	func5b,%function322	.fnstart323func5b:324	.save	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}325	push	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}326	pop	{r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14}327	bx	lr328	.personality __gxx_personality_v0329	.handlerdata330	.fnend331 332@-------------------------------------------------------------------------------333@ Check the order of unwind opcode to pop registers.334@ 0xB10F "pop {r0-r3}" should be emitted before 0xA2 "pop {r4-r6}".335@ 0xB10F "pop {r0-r3}" should be emitted before 0x85FF "pop {r4-r12, r14}".336@-------------------------------------------------------------------------------337@ CHECK: Section {338@ CHECK:   Name: .ARM.extab.TEST5339@ CHECK:   SectionData (340@ CHECK:     0000: 00000000 A20FB100 00000000 850FB101  |................|341@ CHECK:     0010: B0B0B0FF                             |....|342@ CHECK:   )343@ CHECK: }344