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