Home | History | Annotate | Download | only in arm
      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