Upload Tizen:Base source
[external/binutils.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"