mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
183 lines
3.9 KiB
ArmAsm
183 lines
3.9 KiB
ArmAsm
/* Thumb-2 IT blocks test program.
|
|
|
|
Copyright 2010-2022 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
.syntax unified
|
|
.text
|
|
.p2align 2
|
|
.code 16
|
|
|
|
#ifndef __thumb2__
|
|
|
|
.type main,%function
|
|
.thumb_func
|
|
.globl main
|
|
main:
|
|
mov r0, #0
|
|
bx lr @ No Thumb-2
|
|
|
|
#else
|
|
|
|
.type main,%function
|
|
.thumb_func
|
|
.globl main
|
|
main:
|
|
mov r0, #0
|
|
bx lr @ Thumb-2 OK
|
|
|
|
@ One conditional instruction, executed.
|
|
.type it_1,%function
|
|
.thumb_func
|
|
it_1:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
it eq @ IT instruction, Expected == 1
|
|
addeq r0, #1 @ Reached
|
|
bx lr @ Done
|
|
|
|
@ One conditional instruction, skipped.
|
|
.type it_2,%function
|
|
.thumb_func
|
|
it_2:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
it ne @ IT instruction, Expected == 0
|
|
addne r0, #1 @ Not reached
|
|
bx lr @ Done, Check $r0 == 0
|
|
|
|
@ Block of four, alternating, starting with executed.
|
|
.type it_3,%function
|
|
.thumb_func
|
|
it_3:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
itete ge @ IT instruction, Expected == 2
|
|
addge r0, #1 @ Reached
|
|
addlt r0, #2 @ Not reached
|
|
addge r0, #4 @ Reached
|
|
addlt r0, #8 @ Not reached
|
|
bx lr @ Done, Check $r0 == 5
|
|
|
|
@ Block of four, changing flags.
|
|
.type it_4,%function
|
|
.thumb_func
|
|
it_4:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
itttt ge @ IT instruction, Expected == 2
|
|
addge r0, #1 @ Reached
|
|
cmpge r0, #10 @ Reached
|
|
addge r0, #4 @ Not reached
|
|
addge r0, #8 @ Not reached
|
|
bx lr @ Done, Check $r0 == 1
|
|
|
|
@ Block of two, ending with taken branch.
|
|
.type it_5,%function
|
|
.thumb_func
|
|
it_5:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
itt ge @ IT instruction, Expected == 2
|
|
addge r0, #1 @ Reached
|
|
bge .L5 @ Reached
|
|
add r0, #2 @ Never reached
|
|
.L5: bx lr @ Done, Check $r0 == 1
|
|
|
|
@ Block of two, ending with untaken branch.
|
|
.type it_6,%function
|
|
.thumb_func
|
|
it_6:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
ite ge @ IT instruction, Expected == 2
|
|
addge r0, #1 @ Reached
|
|
blt .L6 @ Not reached
|
|
add r0, #2 @ Reached
|
|
.L6: bx lr @ Done, Check $r0 == 3
|
|
|
|
@ Block of four, taken, of different sizes
|
|
.type it_7,%function
|
|
.thumb_func
|
|
it_7:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
itttt ge @ IT instruction, Expected == 4
|
|
addge.n r0, #1 @ Reached
|
|
addge.w r0, #2 @ Reached
|
|
addge.n r0, #4 @ Reached
|
|
addge.w r0, #8 @ Reached
|
|
bx lr @ Done, Check $r0 == 15
|
|
|
|
@ Block of four, only first executed.
|
|
.type it_8,%function
|
|
.thumb_func
|
|
it_8:
|
|
mov r0, #0 @ Setup
|
|
cmp r0, #0 @ Setup
|
|
iteee ge @ IT instruction, Expected == 1
|
|
addge r0, #1 @ Reached
|
|
addlt r0, #2 @ Not reached
|
|
addlt r0, #4 @ Not reached
|
|
addlt r0, #8 @ Not reached
|
|
bx lr @ Done, Check $r0 == 1
|
|
|
|
.type it_breakpoints,%function
|
|
.thumb_func
|
|
it_breakpoints:
|
|
mov r0, #0
|
|
cmp r0, #0
|
|
it eq @ Location 1 @ Break 1
|
|
moveq r0, #0
|
|
|
|
it eq @ Location 2
|
|
moveq r0, #0 @ Break 2
|
|
|
|
it ne @ Location 3
|
|
movne r0, #0 @ Break 3
|
|
|
|
@ An IT block of maximum size.
|
|
itttt eq @ Location 4
|
|
moveq.w r0, #0
|
|
moveq.w r0, #0
|
|
moveq.w r0, #0
|
|
moveq.w r0, #0 @ Break 4
|
|
|
|
@ Just outside an IT block.
|
|
it eq
|
|
moveq r0, #0
|
|
mov r0, #0 @ Location 5 @ Break 5
|
|
|
|
@ After something that looks like an IT block, but
|
|
@ is the second half of an instruction.
|
|
.p2align 6
|
|
cmp r0, r0
|
|
b 1f
|
|
b.w .+0xe14 @ 0xf000 0xbf08 -> second half is IT EQ
|
|
1: mov r0, #0 @ Location 6 @ Break 6
|
|
|
|
@ After something that looks like an IT block, but
|
|
@ is data.
|
|
.p2align 6
|
|
b 1f
|
|
.short 0xbf08
|
|
1: mov r0, #0 @ Location 7 @ Break 7
|
|
|
|
bx lr
|
|
|
|
#endif /* __thumb2__ */
|