Initial revision
[binutils.git] / gas / testsuite / gas / d30v / opt.s
blob573330027ec1ec1e3bc2721169642f5d1c0f4e06
1 # D30V parallel optimization test
2 # assemble with "-O"
4 .text
5 start:
6 abs r1,r2
7 abs r3,r4
9 notfg f0,f4
10 notfg f1,f2
12 abs r1,r2
13 notfg f1,f2
15 # both change C flag
16 add r1,r2,r3
17 notfg C,f0
19 # one uses and one changes C flag
20 add r1,r2,r3
21 notfg f0,C
23 bra .
24 abs r1,r2
26 abs r1,r2
27 bra .
29 bsr .
30 abs r1,r2
32 abs r1,r2
33 abs r1,r2
34 bsr .
36 ldb r1,@(r2,r3)
37 stb r7,@(r8,r9)
39 stb r7,@(r8,r9)
40 ldb r1,@(r2,r3)
42 ldb r7,@(r8,r9)
43 ldb r1,@(r2,r3)
45 stb r7,@(r8,r9)
46 stb r1,@(r2,r3)
48 add r3, r3, r6
49 stw r2, @(r3, 0)
51 # should be serial because of conditional execution
52 cmple f0,r4,r5
53 jmp/tx 0x0
55 cmple f0,r4,r5
56 jmp/fx 0x0
58 cmple f0,r4,r5
59 jmp/xt 0x0
61 cmple f0,r4,r5
62 jmp/xf 0x0
64 cmple f0,r4,r5
65 jmp/tt 0x0
67 cmple f0,r4,r5
68 jmp/tf 0x0
70 cmple f1,r4,r5
71 jmp/tx 0x0
73 cmple f1,r4,r5
74 jmp/xt 0x0
76 # serial because of the r4 dependency
77 add r4, r0, 1
78 cmple f0, r4, r5
80 # parallel
81 add r4, r0, 1
82 cmple f0, r3, r5
84 # serial because ld2w loads r5
85 ld2w r4,@(r0,r6)
86 adds r5,r19,r20
88 # serial because ld2w loads r5
89 ld2w r4,@(r0,r6)
90 adds r3,r5,r20
92 # parallel even though ld2w uses r6 and adds changes it
93 ld2w r4,@(r0,r6)
94 adds r6,r19,r20
96 # parallel
97 ld2w r4,@(r0,r6)
98 adds r7,r19,r20
100 # parallel
101 ld2w r4,@(r0,r6)
102 adds r7,r0,r20
104 # parallel even though st2w uses r5 and adds modifies it
105 st2w r4,@(r0,r6)
106 adds r5,r19,r20
108 # parallel, both use but don't modify r5
109 st2w r4,@(r0,r6)
110 adds r3,r5,r20
112 # parallel even though st2w uses r6 and adds changes it
113 st2w r4,@(r0,r6)
114 adds r6,r19,r20
116 # parallel
117 st2w r4,@(r0,r6)
118 adds r7,r19,r20
120 # parallel
121 st2w r4,@(r0,r6)
122 adds r7,r0,r20
124 # test memory dependencies
126 # always serial because one could overwrite the other
127 st2w r10,@(r3,r4)
128 st2w r40,@(r43,r44)
130 # always serial
131 stw r1,@(r2,r3)
132 ldw r41,@(r42,r43)
134 # reads can happen in parallel but the current architecture
135 # doesn't support it
136 ldw r1,@(r2,r3)
137 ldb r41,@(r42,r43)
139 # test post increment and decrement dependencies
141 # serial
142 ldw r4,@(r6+,r11)
143 adds r9,r6,2
145 # parallel, modification to r6 happens last
146 adds r9,r6,2
147 ldw r4,@(r6-,r11)
149 # serial
150 stw r4,@(r6-,r11)
151 adds r9,r6,2
153 # parallel
154 ldw r4,@(r6,r11)
155 adds r9,r6,2
157 # parallel
158 adds r9,r6,2
159 ldw r4,@(r6,r11)
161 # if the first instruction is a jmp, don't parallelize
162 jmp 0
163 abs r1,r2
165 jsr 0
166 abs r1,r2
168 .align 3
170 bra 0
171 abs r1,r2
173 bsr 0
174 abs r1,r2
176 # Explicitly prohibited from parallel execution.
177 # The labels are here to prevent instruction pairs
178 # from being merged with following pairs.
180 label1:
181 st2w r2, @(r2, r3)
182 addhlll r4, r5, r6
183 label2:
184 st4hb r8, @(r8, r9)
185 subhllh r10, r11, r12
186 label3:
187 ld2w r14, @(r14, r15)
188 mulhxhl r16, r17, r18
189 label4:
190 ldw r19, @(r20, r21)
191 mulx2h r22, r23, r24
192 label5:
193 ldh r25, @(r26, r27)
194 mul2h r28, r29, r30
196 # Insertion of NOPs required to prevent pipeline clashes.
198 label6:
199 mul r1,r2,r3
200 mulhxll r4,r5,r6
201 add r7, r8, r9
202 label7:
204 mul r2,r3,r4
205 ldw r5, @(r6,r0)
207 ldw r10, @(r11, r0) <- mul r7,r8,r9
209 mul r12,r13,r14 -> ldw r15, @(r16, r0)
211 mac1 r2,r3,r4
212 ldw r5, @(r6,r0)
214 ldw r10, @(r11, r0) <- mac0 r7,r8,r9
215 ldw r10, @(r11, r0)