Commit | Line | Data |
---|---|---|
fa94de6b RM |
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 |