mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
ccb96c68e1
In Thumb2, instructions which write to the PC are UNPREDICTABLE if they are in an IT block but not the last instruction in the block. Previously, we only diagnosed this for LDM instructions, this patch extends the diagnostic to cover all of the relevant instructions. Differential Revision: https://reviews.llvm.org/D30398 llvm-svn: 296459
58 lines
2.9 KiB
ArmAsm
58 lines
2.9 KiB
ArmAsm
@ RUN: not llvm-mc -triple=thumbv7m--none-eabi < %s 2>&1 | FileCheck %s
|
|
|
|
@ These instructions all write to the PC, so are UNPREDICTABLE if they are in
|
|
@ an IT block, but not the last instruction in the block.
|
|
|
|
itttt eq
|
|
addeq pc, r0
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
addeq pc, sp, pc
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
beq.n #.+0x20
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itttt eq
|
|
beq.w #.+0x20
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
bleq sym
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
blxeq r0
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itttt eq
|
|
bxeq r0
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
ldmeq r0, {r8, pc}
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
ldmdbeq r0, {r8, pc}
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itttt eq
|
|
ldreq pc, [r0, #4]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
ldreq pc, [r0, #-4]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
ldreq pc, [pc, #4]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itttt eq
|
|
ldreq pc, [r0, r1, LSL #1]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
moveq pc, r0
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
popeq {r0, pc}
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itttt eq
|
|
popeq {r8, pc}
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
popeq {pc}
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
tbbeq [r0, r1]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|
|
itt eq
|
|
tbheq [r0, r1, LSL #1]
|
|
@ CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must be outside of IT block or the last instruction in an IT block
|
|
nopeq
|