fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / op / jitn.t
blob57d5c90714c33077f3b4a51fca82404901ba2cda
1 #!perl
2 # Copyright (C) 2001-2008, Parrot Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test tests => 14;
10 use Parrot::Config;
12 =head1 NAME
14 t/op/jitn.t - JIT register allocation
16 =head1 SYNOPSIS
18     % prove t/op/jitn.t
20 =head1 DESCRIPTION
22 Tests JIT register allocation. These tests are written for four mappable
23 registers.
25 =cut
27 my $output;
29 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,2,3 mapped" );
30 set N0,0
31 set N1,1
32 set N2,2
33 sub N0,N1,N2
34 print N0
35 print "\n"
36 print N1
37 print "\n"
38 print N2
39 print "\n"
40 end
41 CODE
45 OUTPUT
47 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 1,2,3 mapped" );
48 set N0,0
49 set N1,1
50 set I2,2
51 sub N0,N1,I2
52 print N0
53 print "\n"
54 print N1
55 print "\n"
56 end
57 CODE
60 OUTPUT
62 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,2 mapped" );
63 set N0,0
64 set N1,1
65 set N2,2
66 set N3,3
67 set N4,4
68 set N0,N1
69 set N2,N3
70 set N0,N1
71 set N2,N3
72 sub N0,N1,N4
73 print N0
74 print "\n"
75 print N1
76 print "\n"
77 print N4
78 print "\n"
79 end
80 CODE
84 OUTPUT
86 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,3 mapped" );
87 set N0,0
88 set N1,1
89 set N2,2
90 set N3,3
91 set N4,4
92 set N0,N1
93 set N2,N3
94 set N0,N1
95 set N2,N3
96 sub N0,N4,N1
97 print N0
98 print "\n"
99 print N4
100 print "\n"
101 print N1
102 print "\n"
104 CODE
108 OUTPUT
110 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 1,3 mapped" );
111 set N0,0
112 set I1,1
113 set N1,1
114 set N2,2
115 set N3,3
116 set N4,4
117 set N0,N1
118 set N2,N3
119 set N0,N1
120 set N2,N3
121 sub N0,N4,I1
122 print N0
123 print "\n"
124 print N4
125 print "\n"
127 CODE
130 OUTPUT
132 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 2,3 mapped" );
133 set N0,0
134 set N1,1
135 set N2,2
136 set N3,3
137 set N4,4
138 set N0,N1
139 set N2,N3
140 set N0,N1
141 set N2,N3
142 sub N4,N0,N1
143 print N4
144 print "\n"
145 print N0
146 print "\n"
147 print N1
148 print "\n"
150 CODE
154 OUTPUT
156 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 2,3 mapped" );
157 set N0,0
158 set N1,1
159 set I1,1
160 set N2,2
161 set N3,3
162 set N4,4
163 set N0,N1
164 set N2,N3
165 set N0,N1
166 set N2,N3
167 sub N4,N0,I1
168 print N4
169 print "\n"
170 print N0
171 print "\n"
172 print N1
173 print "\n"
175 CODE
179 OUTPUT
181 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1 mapped" );
182 set N0,0
183 set N1,1
184 set N2,2
185 set N3,3
186 set N4,4
187 set N5,0
188 set N0,N1
189 set N2,N3
190 set N0,N1
191 set N2,N3
192 sub N1,N5,N4
193 print N1
194 print "\n"
195 print N5
196 print "\n"
197 print N4
198 print "\n"
200 CODE
204 OUTPUT
206 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 2 mapped" );
207 set N0,0
208 set N1,1
209 set N2,2
210 set N3,3
211 set N4,4
212 set N0,N1
213 set N2,N3
214 set N0,N1
215 set N2,N3
216 sub N5,N1,N4
217 print N5
218 print "\n"
219 print N1
220 print "\n"
221 print N4
222 print "\n"
224 CODE
228 OUTPUT
230 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 3 mapped" );
231 set N0,0
232 set N1,1
233 set N2,2
234 set N3,3
235 set N4,4
236 set N0,N1
237 set N2,N3
238 set N0,N1
239 set N2,N3
240 sub N5,N4,N1
241 print N5
242 print "\n"
243 print N1
244 print "\n"
245 print N4
246 print "\n"
248 CODE
252 OUTPUT
254 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 0 mapped" );
255 set N0,0
256 set N1,1
257 set N2,2
258 set N3,3
259 set N4,4
260 set N6,0
261 set N0,N1
262 set N2,N3
263 set N0,N1
264 set N2,N3
265 sub N5,N6,N4
266 print N5
267 print "\n"
268 print N6
269 print "\n"
270 print N4
271 print "\n"
273 CODE
277 OUTPUT
279 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n mapped same" );
280 set N2, 1
281 add N2, N2, N2  # reserve first reg
282 add N2, N2, N2
283 set N0, 10.0
284 set N1, 20.0
285 sub N0, N0, N1
286 sub N1, N1
287 print N2
288 print "\n"
289 print N1
290 print "\n"
291 print N0
292 print "\n"
294 CODE
298 OUTPUT
300 # rounding behavior
301 pir_output_is( <<'CODE', <<'OUT', "set_i_n testing" );
303 .sub _main
304     .local num n
305     .local int i
307     n = 1.4
308     i = n
309     print i
311     n = 2.5
312     i = n
313     print i
315     n = 3.6
316     i = n
317     print i
319     print "\n"
320     end
321 .end
322 CODE
326 $output = $PConfig{numvalsize} < 16 ? "zero\n" : "not zero\n";
327 pasm_output_is( <<'CODE', $output, "rounding due to mapped" );
328     set N0, 15
329     mul N0, N0, 0.1
330     sub N0, 1.5
331     unless N0, z
332     print "not "
334     print "zero\n"
335     end
336 CODE
338 # Local Variables:
339 #   mode: cperl
340 #   cperl-indent-level: 4
341 #   fill-column: 100
342 # End:
343 # vim: expandtab shiftwidth=4: