Add support for Score7 architecture.
[deliverable/binutils-gdb.git] / gas / testsuite / gas / score / branch_32.s
1 /*
2 * tests for branch instruction relaxation
3 *
4 * Author: libin
5 */
6
7 .include "relaxation_macro.h"
8
9 .macro _b_op_pattern insn insn1
10 .balign 2
11
12 /*
13 * for local label 1, assembler should NOT alter instructions before .skip;
14 * but it SHOULD alter instructions afte it.
15 */
16 1:
17 insn_16 "\insn! 1b"
18 tran_16_32 "\insn! 1b", "\insn 1b"
19 insn_16 "\insn1 1b"
20 .skip 512
21 insn_16 "\insn! 1b"
22 tran_16_32 "\insn! 1b", "\insn 1b"
23 insn_16 "\insn1 1b"
24
25 /*
26 * for local label 2, assembler SHOULD alter instructions before .skip;
27 * but it should NOT alter instructions after it.
28 */
29 insn_16 "\insn! 2f"
30 tran_16_32 "\insn! 2f", "\insn 2f"
31 insn_16 "\insn1 2f"
32 .skip 511
33 insn_16 "\insn! 2f"
34 tran_16_32 "\insn! 2f", "\insn 2f"
35 insn_16 "\insn1 2f"
36 2:
37 nop!
38
39 /* tests for boundary */
40 3:
41 .skip 512
42 insn_16 "\insn! 3b"
43 insn_16 "\insn! 3b"
44
45 insn_16 "\insn! 4f"
46 insn_16 "\insn! 4f"
47 .skip 511
48 4:
49 nop!
50 .endm
51
52 .macro _br_op_pattern insn
53 .balign 2
54 insn_32 "\insn r0"
55 insn_32 "\insn r15"
56
57 tran_16_32 "\insn! r0", "\insn r0"
58
59 /* shouldn't alter */
60 insn_32 "\insn r16"
61 insn_32 "\insn r31"
62 .endm
63
64 .macro _bcmp_op_pattern1 insn
65 .balign 2
66
67 /* as will give "Using temp register(r1)" warning if you using r1 */
68
69 /*
70 * for local label 1, assembler should NOT alter instructions before .skip;
71 * but it SHOULD alter instructions afte it.
72 */
73 1:
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"
78 .skip 512
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"
83
84 /*
85 * for local label 2, assembler SHOULD alter instructions before .skip;
86 * but it should NOT alter instructions after it.
87 */
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"
92 .skip 511
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"
97 2:
98 nop!
99
100 /* tests for boundary */
101 3:
102 .skip 512
103 insn_32 "\insn r0, r15, 3b"
104 insn_32 "\insn r16, r15, 3b"
105
106 insn_32 "\insn r0, r15, 4f"
107 insn_32 "\insn r16, r15, 4f"
108 .skip 511
109 4:
110 .endm
111
112 .macro _bcmp_op_pattern2 insn
113 .balign 2
114
115 /* as will give "Using temp register(r1)" warning if you using r1 */
116
117 /*
118 * for local label 1, assembler should NOT alter instructions before .skip;
119 * but it SHOULD alter instructions afte it.
120 */
121 1:
122 insn_32 "\insn r0, 1b"
123 insn_32 "\insn r15, 1b"
124 insn_32 "\insn r16, 1b"
125 insn_32 "\insn r31, 1b"
126 .skip 512
127 insn_32 "\insn r0, 1b"
128 insn_32 "\insn r15, 1b"
129 insn_32 "\insn r16, 1b"
130 insn_32 "\insn r31, 1b"
131
132 /*
133 * for local label 2, assembler SHOULD alter instructions before .skip;
134 * but it should NOT alter instructions after it.
135 */
136 insn_32 "\insn r0, 2f"
137 insn_32 "\insn r15, 2f"
138 insn_32 "\insn r16, 2f"
139 insn_32 "\insn r31, 2f"
140 .skip 511
141 insn_32 "\insn r0, 2f"
142 insn_32 "\insn r15, 2f"
143 insn_32 "\insn r16, 2f"
144 insn_32 "\insn r31, 2f"
145 2:
146 nop!
147
148 /* tests for boundary */
149 3:
150 .skip 512
151 insn_32 "\insn r0, 3b"
152 insn_32 "\insn r16, 3b"
153
154 insn_32 "\insn r0, 4f"
155 insn_32 "\insn r16, 4f"
156 .skip 511
157 4:
158 .endm
159
160 .text
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"
170
171 /* br rD <-> br! rD */
172 _br_op_pattern "br"
173 _br_op_pattern "brl"
174
175 /* bcmpeq/bcmpne rA,rB,Disp9 -> cmp/cmp! rA, rB; beq/bne Disp19 */
176 _bcmp_op_pattern1 "bcmpeq"
177 _bcmp_op_pattern1 "bcmpne"
178
179 /* bcmpeqz/bcmpnez rA,Disp9 -> cmpi! rA, 0; beq/bne Disp19 */
180 _bcmp_op_pattern2 "bcmpeqz"
181 _bcmp_op_pattern2 "bcmpnez"
This page took 0.032914 seconds and 4 git commands to generate.