2 * tests for branch instruction relaxation
7 .include "relaxation_macro.h"
9 .macro _b_op_pattern insn insn1
13 * for local label 1, assembler should NOT alter instructions before .skip;
14 * but it SHOULD alter instructions afte it.
18 tran_16_32 "\insn! 1b", "\insn 1b"
22 tran_16_32 "\insn! 1b", "\insn 1b"
26 * for local label 2, assembler SHOULD alter instructions before .skip;
27 * but it should NOT alter instructions after it.
30 tran_16_32 "\insn! 2f", "\insn 2f"
34 tran_16_32 "\insn! 2f", "\insn 2f"
39 /* tests for boundary */
52 .macro _br_op_pattern insn
57 tran_16_32 "\insn! r0", "\insn r0"
64 .macro _bcmp_op_pattern1 insn
67 /* as will give "Using temp register(r1)" warning if you using r1 */
70 * for local label 1, assembler should NOT alter instructions before .skip;
71 * but it SHOULD alter instructions afte it.
74 insn_32 "\insn r0, r15, 1b"
75 insn_32 "\insn r15, r16, 1b"
76 insn_32 "\insn r15, r31, 1b"
77 insn_32 "\insn r16, r31, 1b"
79 insn_32 "\insn r0, r15, 1b"
80 insn_32 "\insn r15, r16, 1b"
81 insn_32 "\insn r15, r31, 1b"
82 insn_32 "\insn r16, r31, 1b"
85 * for local label 2, assembler SHOULD alter instructions before .skip;
86 * but it should NOT alter instructions after it.
88 insn_32 "\insn r0, r15, 2f"
89 insn_32 "\insn r15, r16, 2f"
90 insn_32 "\insn r15, r31, 2f"
91 insn_32 "\insn r16, r31, 2f"
93 insn_32 "\insn r0, r15, 2f"
94 insn_32 "\insn r15, r16, 2f"
95 insn_32 "\insn r15, r31, 2f"
96 insn_32 "\insn r16, r31, 2f"
100 /* tests for boundary */
103 insn_32 "\insn r0, r15, 3b"
104 insn_32 "\insn r16, r15, 3b"
106 insn_32 "\insn r0, r15, 4f"
107 insn_32 "\insn r16, r15, 4f"
112 .macro _bcmp_op_pattern2 insn
115 /* as will give "Using temp register(r1)" warning if you using r1 */
118 * for local label 1, assembler should NOT alter instructions before .skip;
119 * but it SHOULD alter instructions afte it.
122 insn_32 "\insn r0, 1b"
123 insn_32 "\insn r15, 1b"
124 insn_32 "\insn r16, 1b"
125 insn_32 "\insn r31, 1b"
127 insn_32 "\insn r0, 1b"
128 insn_32 "\insn r15, 1b"
129 insn_32 "\insn r16, 1b"
130 insn_32 "\insn r31, 1b"
133 * for local label 2, assembler SHOULD alter instructions before .skip;
134 * but it should NOT alter instructions after it.
136 insn_32 "\insn r0, 2f"
137 insn_32 "\insn r15, 2f"
138 insn_32 "\insn r16, 2f"
139 insn_32 "\insn r31, 2f"
141 insn_32 "\insn r0, 2f"
142 insn_32 "\insn r15, 2f"
143 insn_32 "\insn r16, 2f"
144 insn_32 "\insn r31, 2f"
148 /* tests for boundary */
151 insn_32 "\insn r0, 3b"
152 insn_32 "\insn r16, 3b"
154 insn_32 "\insn r0, 4f"
155 insn_32 "\insn r16, 4f"
161 /* b Disp19 <-> b! Disp9 */
162 _b_op_pattern "bgtu", "bgtul"
163 _b_op_pattern "bleu", "bleul"
164 _b_op_pattern "beq", "beql"
165 _b_op_pattern "bne", "bnel"
166 _b_op_pattern "bgt", "bgtl"
167 _b_op_pattern "ble", "blel"
168 _b_op_pattern "bcnz", "bcnzl"
169 _b_op_pattern "b", "bl"
171 /* br rD <-> br! rD */
175 /* bcmpeq/bcmpne rA,rB,Disp9 -> cmp/cmp! rA, rB; beq/bne Disp19 */
176 _bcmp_op_pattern1 "bcmpeq"
177 _bcmp_op_pattern1 "bcmpne"
179 /* bcmpeqz/bcmpnez rA,Disp9 -> cmpi! rA, 0; beq/bne Disp19 */
180 _bcmp_op_pattern2 "bcmpeqz"
181 _bcmp_op_pattern2 "bcmpnez"