blob: 9ec833752f67393c8603c22cada37a7923f82d86 [file] [log] [blame]
.syntax unified
.bundle_align_mode 4
# We use these macros to test each pattern at every offset from
# bundle alignment, i.e. [0,16) by 2 or 4.
.macro offset_insn insn_name, offset, size
.p2align 4
\insn_name\()_offset_\offset\():
.rept \offset / \size
bkpt
.endr
\insn_name
.endm
.macro test_offsets_arm insn_name
.arm
offset_insn \insn_name, 0, 4
offset_insn \insn_name, 4, 4
offset_insn \insn_name, 8, 4
offset_insn \insn_name, 12, 4
.endm
.macro test_offsets_thumb insn_name
.thumb
offset_insn \insn_name, 0, 2
offset_insn \insn_name, 2, 2
offset_insn \insn_name, 4, 2
offset_insn \insn_name, 6, 2
offset_insn \insn_name, 8, 2
offset_insn \insn_name, 10, 2
offset_insn \insn_name, 12, 2
offset_insn \insn_name, 14, 2
.endm
.macro test_arm
add r0, r1
.endm
.macro test_thumb_2
adds r0, r1
.endm
.macro test_thumb_4
adds r8, r9
.endm
test_offsets_arm test_arm
test_offsets_thumb test_thumb_2
test_offsets_thumb test_thumb_4
# There are many relaxation cases for Thumb instructions.
# But we use as representative the simple branch cases.
.macro test_thumb_b_2
b 0f
bkpt 1
0: bkpt 2
.endm
.macro test_thumb_b_4
b far_target
.endm
test_offsets_thumb test_thumb_b_2
test_offsets_thumb test_thumb_b_4
# This is to set up a branch target surely too far for a short branch.
pad_for_far_target:
.rept 1025
bkpt 1
.endr
far_target:
bkpt 2
.p2align 4
bkpt