forked from OSchip/llvm-project
131 lines
2.9 KiB
ArmAsm
131 lines
2.9 KiB
ArmAsm
|
@ 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: }
|