1 .syntax unified 2 .bundle_align_mode 4 3 4 # We use these macros to test each pattern at every offset from 5 # bundle alignment, i.e. [0,16) by 2 or 4. 6 7 .macro offset_insn insn_name, offset, size 8 .p2align 4 9 \insn_name\()_offset_\offset\(): 10 .rept \offset / \size 11 bkpt 12 .endr 13 \insn_name 14 .endm 15 16 .macro test_offsets_arm insn_name 17 .arm 18 offset_insn \insn_name, 0, 4 19 offset_insn \insn_name, 4, 4 20 offset_insn \insn_name, 8, 4 21 offset_insn \insn_name, 12, 4 22 .endm 23 24 .macro test_offsets_thumb insn_name 25 .thumb 26 offset_insn \insn_name, 0, 2 27 offset_insn \insn_name, 2, 2 28 offset_insn \insn_name, 4, 2 29 offset_insn \insn_name, 6, 2 30 offset_insn \insn_name, 8, 2 31 offset_insn \insn_name, 10, 2 32 offset_insn \insn_name, 12, 2 33 offset_insn \insn_name, 14, 2 34 .endm 35 36 .macro test_arm 37 add r0, r1 38 .endm 39 40 .macro test_thumb_2 41 adds r0, r1 42 .endm 43 .macro test_thumb_4 44 adds r8, r9 45 .endm 46 47 test_offsets_arm test_arm 48 test_offsets_thumb test_thumb_2 49 test_offsets_thumb test_thumb_4 50 51 # There are many relaxation cases for Thumb instructions. 52 # But we use as representative the simple branch cases. 53 54 .macro test_thumb_b_2 55 b 0f 56 bkpt 1 57 0: bkpt 2 58 .endm 59 .macro test_thumb_b_4 60 b far_target 61 .endm 62 63 test_offsets_thumb test_thumb_b_2 64 test_offsets_thumb test_thumb_b_4 65 66 # This is to set up a branch target surely too far for a short branch. 67 pad_for_far_target: 68 .rept 1025 69 bkpt 1 70 .endr 71 far_target: 72 bkpt 2 73 .p2align 4 74 bkpt 75