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 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@ Check for different combination of .setfp, .pad, .save and .vsave. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker .syntax unified 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 9*9880d681SAndroid Build Coastguard Worker@ TEST1: Check .pad before .setfp directive. 10*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 11*9880d681SAndroid Build Coastguard Worker .section .TEST1 12*9880d681SAndroid Build Coastguard Worker .globl func1 13*9880d681SAndroid Build Coastguard Worker .type func1,%function 14*9880d681SAndroid Build Coastguard Worker .align 2 15*9880d681SAndroid Build Coastguard Worker .fnstart 16*9880d681SAndroid Build Coastguard Workerfunc1: 17*9880d681SAndroid Build Coastguard Worker .pad #12 18*9880d681SAndroid Build Coastguard Worker sub sp, sp, #12 19*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #8 20*9880d681SAndroid Build Coastguard Worker add fp, sp, #8 21*9880d681SAndroid Build Coastguard Worker sub sp, fp, #8 22*9880d681SAndroid Build Coastguard Worker add sp, sp, #12 23*9880d681SAndroid Build Coastguard Worker bx lr 24*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 25*9880d681SAndroid Build Coastguard Worker .handlerdata 26*9880d681SAndroid Build Coastguard Worker .fnend 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 29*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST1 30*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 31*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0009B00 |........| 32*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 33*9880d681SAndroid Build Coastguard Worker@ CHECK: } 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 38*9880d681SAndroid Build Coastguard Worker@ TEST2: Check .pad after .setfp directive. 39*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 40*9880d681SAndroid Build Coastguard Worker .section .TEST2 41*9880d681SAndroid Build Coastguard Worker .globl func2 42*9880d681SAndroid Build Coastguard Worker .type func2,%function 43*9880d681SAndroid Build Coastguard Worker .align 2 44*9880d681SAndroid Build Coastguard Worker .fnstart 45*9880d681SAndroid Build Coastguard Workerfunc2: 46*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #8 47*9880d681SAndroid Build Coastguard Worker add fp, sp, #8 48*9880d681SAndroid Build Coastguard Worker .pad #12 49*9880d681SAndroid Build Coastguard Worker sub sp, sp, #12 50*9880d681SAndroid Build Coastguard Worker add sp, sp, #12 51*9880d681SAndroid Build Coastguard Worker sub sp, fp, #8 52*9880d681SAndroid Build Coastguard Worker bx lr 53*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 54*9880d681SAndroid Build Coastguard Worker .handlerdata 55*9880d681SAndroid Build Coastguard Worker .fnend 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 58*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST2 59*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 60*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0419B00 |.....A..| 61*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 62*9880d681SAndroid Build Coastguard Worker@ CHECK: } 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 67*9880d681SAndroid Build Coastguard Worker@ TEST3: Check .setfp, .pad, .setfp directive. 68*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 69*9880d681SAndroid Build Coastguard Worker .section .TEST3 70*9880d681SAndroid Build Coastguard Worker .globl func3 71*9880d681SAndroid Build Coastguard Worker .type func3,%function 72*9880d681SAndroid Build Coastguard Worker .align 2 73*9880d681SAndroid Build Coastguard Worker .fnstart 74*9880d681SAndroid Build Coastguard Workerfunc3: 75*9880d681SAndroid Build Coastguard Worker @ prologue: 76*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #4 77*9880d681SAndroid Build Coastguard Worker add fp, sp, #4 78*9880d681SAndroid Build Coastguard Worker .pad #8 79*9880d681SAndroid Build Coastguard Worker sub sp, sp, #8 80*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #4 81*9880d681SAndroid Build Coastguard Worker add fp, sp, #4 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker @ epilogue: 84*9880d681SAndroid Build Coastguard Worker add sp, fp, #4 85*9880d681SAndroid Build Coastguard Worker bx lr 86*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 87*9880d681SAndroid Build Coastguard Worker .handlerdata 88*9880d681SAndroid Build Coastguard Worker .fnend 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 91*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST3 92*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 93*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0009B00 |........| 94*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 95*9880d681SAndroid Build Coastguard Worker@ CHECK: } 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 100*9880d681SAndroid Build Coastguard Worker@ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive. 101*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 102*9880d681SAndroid Build Coastguard Worker .section .TEST4 103*9880d681SAndroid Build Coastguard Worker .globl func4 104*9880d681SAndroid Build Coastguard Worker .type func4,%function 105*9880d681SAndroid Build Coastguard Worker .align 2 106*9880d681SAndroid Build Coastguard Worker .fnstart 107*9880d681SAndroid Build Coastguard Workerfunc4: 108*9880d681SAndroid Build Coastguard Worker @ prologue: 109*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #8 110*9880d681SAndroid Build Coastguard Worker add fp, sp, #8 111*9880d681SAndroid Build Coastguard Worker .setfp fp, fp, #8 112*9880d681SAndroid Build Coastguard Worker add fp, fp, #8 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker @ epilogue: 115*9880d681SAndroid Build Coastguard Worker sub sp, fp, #16 116*9880d681SAndroid Build Coastguard Worker bx lr 117*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 118*9880d681SAndroid Build Coastguard Worker .handlerdata 119*9880d681SAndroid Build Coastguard Worker .fnend 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 122*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST4 123*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 124*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0439B00 |.....C..| 125*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 126*9880d681SAndroid Build Coastguard Worker@ CHECK: } 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 131*9880d681SAndroid Build Coastguard Worker@ TEST5: Check .setfp, .save, .setfp directive. 132*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 133*9880d681SAndroid Build Coastguard Worker .section .TEST5 134*9880d681SAndroid Build Coastguard Worker .globl func5 135*9880d681SAndroid Build Coastguard Worker .type func5,%function 136*9880d681SAndroid Build Coastguard Worker .align 2 137*9880d681SAndroid Build Coastguard Worker .fnstart 138*9880d681SAndroid Build Coastguard Workerfunc5: 139*9880d681SAndroid Build Coastguard Worker @ prologue: 140*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #16 141*9880d681SAndroid Build Coastguard Worker add fp, sp, #16 142*9880d681SAndroid Build Coastguard Worker .save {r4, r5, r6, r7, r8} 143*9880d681SAndroid Build Coastguard Worker push {r4, r5, r6, r7, r8} 144*9880d681SAndroid Build Coastguard Worker .pad #8 145*9880d681SAndroid Build Coastguard Worker add sp, sp, #8 146*9880d681SAndroid Build Coastguard Worker .pad #8 147*9880d681SAndroid Build Coastguard Worker sub sp, sp, #8 148*9880d681SAndroid Build Coastguard Worker .save {r9, r10} 149*9880d681SAndroid Build Coastguard Worker push {r9, r10} 150*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #24 151*9880d681SAndroid Build Coastguard Worker add fp, sp, #24 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker @ epilogue: 154*9880d681SAndroid Build Coastguard Worker sub sp, fp, #24 155*9880d681SAndroid Build Coastguard Worker pop {r9, r10} 156*9880d681SAndroid Build Coastguard Worker add sp, sp, #16 157*9880d681SAndroid Build Coastguard Worker pop {r4, r5, r6, r7, r8} 158*9880d681SAndroid Build Coastguard Worker bx lr 159*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 160*9880d681SAndroid Build Coastguard Worker .handlerdata 161*9880d681SAndroid Build Coastguard Worker .fnend 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 164*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST5 165*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 166*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 80459B01 B0A40360 |.....E.....`| 167*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 168*9880d681SAndroid Build Coastguard Worker@ CHECK: } 169