Home | History | Annotate | Download | only in ARM
      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
     23 func1a:
     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
     36 func1b:
     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
     49 func1c:
     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
     62 func1d:
     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
     89 func2a:
     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
    102 func2b:
    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
    115 func2c:
    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