x86-64: also optimize ANDQ with immediate fitting in 7 bits
[deliverable/binutils-gdb.git] / gas / testsuite / gas / score / branch_32.s
CommitLineData
c3b7224a
NC
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 */
161:
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"
362:
37 nop!
38
39/* tests for boundary */
403:
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
484:
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 */
731:
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"
972:
98 nop!
99
100/* tests for boundary */
1013:
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
1094:
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 */
1211:
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"
1452:
146 nop!
147
148/* tests for boundary */
1493:
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
1574:
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.501049 seconds and 4 git commands to generate.