1*9880d681SAndroid Build Coastguard Worker@ RUN: not llvm-mc -triple=armv7-unknown-linux-gnueabi < %s 2> %t 2*9880d681SAndroid Build Coastguard Worker@ RUN: FileCheck < %t %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@ Check the diagnostics for .setfp directive. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker .syntax unified 8*9880d681SAndroid Build Coastguard Worker .text 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 11*9880d681SAndroid Build Coastguard Worker@ TEST1: .setfp before .fnstart 12*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 13*9880d681SAndroid Build Coastguard Worker .globl func1 14*9880d681SAndroid Build Coastguard Worker .align 2 15*9880d681SAndroid Build Coastguard Worker .type func1,%function 16*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #0 17*9880d681SAndroid Build Coastguard Worker@ CHECK: error: .fnstart must precede .setfp directive 18*9880d681SAndroid Build Coastguard Worker@ CHECK: .setfp fp, sp, #0 19*9880d681SAndroid Build Coastguard Worker@ CHECK: ^ 20*9880d681SAndroid Build Coastguard Worker .fnstart 21*9880d681SAndroid Build Coastguard Workerfunc1: 22*9880d681SAndroid Build Coastguard Worker .fnend 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 27*9880d681SAndroid Build Coastguard Worker@ TEST2: .setfp after .handlerdata 28*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 29*9880d681SAndroid Build Coastguard Worker .globl func2 30*9880d681SAndroid Build Coastguard Worker .align 2 31*9880d681SAndroid Build Coastguard Worker .type func2,%function 32*9880d681SAndroid Build Coastguard Worker .fnstart 33*9880d681SAndroid Build Coastguard Workerfunc2: 34*9880d681SAndroid Build Coastguard Worker .handlerdata 35*9880d681SAndroid Build Coastguard Worker .setfp fp, sp, #0 36*9880d681SAndroid Build Coastguard Worker@ CHECK: error: .setfp must precede .handlerdata directive 37*9880d681SAndroid Build Coastguard Worker@ CHECK: .setfp fp, sp, #0 38*9880d681SAndroid Build Coastguard Worker@ CHECK: ^ 39*9880d681SAndroid Build Coastguard Worker .fnend 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 44*9880d681SAndroid Build Coastguard Worker@ TEST3: .setfp with bad fp register 45*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 46*9880d681SAndroid Build Coastguard Worker .globl func3 47*9880d681SAndroid Build Coastguard Worker .align 2 48*9880d681SAndroid Build Coastguard Worker .type func3,%function 49*9880d681SAndroid Build Coastguard Worker .fnstart 50*9880d681SAndroid Build Coastguard Workerfunc3: 51*9880d681SAndroid Build Coastguard Worker .setfp 0, r0, #0 52*9880d681SAndroid Build Coastguard Worker@ CHECK: error: frame pointer register expected 53*9880d681SAndroid Build Coastguard Worker@ CHECK: .setfp 0, r0, #0 54*9880d681SAndroid Build Coastguard Worker@ CHECK: ^ 55*9880d681SAndroid Build Coastguard Worker .fnend 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 60*9880d681SAndroid Build Coastguard Worker@ TEST4: .setfp with bad sp register 61*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 62*9880d681SAndroid Build Coastguard Worker .globl func4 63*9880d681SAndroid Build Coastguard Worker .align 2 64*9880d681SAndroid Build Coastguard Worker .type func4,%function 65*9880d681SAndroid Build Coastguard Worker .fnstart 66*9880d681SAndroid Build Coastguard Workerfunc4: 67*9880d681SAndroid Build Coastguard Worker .setfp fp, 0, #0 68*9880d681SAndroid Build Coastguard Worker@ CHECK: error: stack pointer register expected 69*9880d681SAndroid Build Coastguard Worker@ CHECK: .setfp fp, 0, #0 70*9880d681SAndroid Build Coastguard Worker@ CHECK: ^ 71*9880d681SAndroid Build Coastguard Worker .fnend 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 76*9880d681SAndroid Build Coastguard Worker@ TEST5: .setfp with non-sp register as second operand 77*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 78*9880d681SAndroid Build Coastguard Worker .globl func5 79*9880d681SAndroid Build Coastguard Worker .align 2 80*9880d681SAndroid Build Coastguard Worker .type func5,%function 81*9880d681SAndroid Build Coastguard Worker .fnstart 82*9880d681SAndroid Build Coastguard Workerfunc5: 83*9880d681SAndroid Build Coastguard Worker .setfp fp, r0, #0 84*9880d681SAndroid Build Coastguard Worker@ CHECK: error: register should be either $sp or the latest fp register 85*9880d681SAndroid Build Coastguard Worker@ CHECK: .setfp fp, r0, #0 86*9880d681SAndroid Build Coastguard Worker@ CHECK: ^ 87*9880d681SAndroid Build Coastguard Worker .fnend 88