tagged release 0.6.4
[parrot.git] / t / op / jitn.t
blob794e33bc3ccd71e4da06a14aa7695f14efccbeda
1 #!perl
2 # Copyright (C) 2001-2005, The Perl 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;
11 =head1 NAME
13 t/op/jitn.t - JIT register allocation
15 =head1 SYNOPSIS
17         % prove t/op/jitn.t
19 =head1 DESCRIPTION
21 Tests JIT register allocation. These tests are written for four mappable
22 registers.
24 =cut
26 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,2,3 mapped" );
27 set N0,0
28 set N1,1
29 set N2,2
30 sub N0,N1,N2
31 print N0
32 print "\n"
33 print N1
34 print "\n"
35 print N2
36 print "\n"
37 end
38 CODE
39 -1.000000
40 1.000000
41 2.000000
42 OUTPUT
44 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 1,2,3 mapped" );
45 set N0,0
46 set N1,1
47 set I2,2
48 sub N0,N1,I2
49 print N0
50 print "\n"
51 print N1
52 print "\n"
53 end
54 CODE
55 -1.000000
56 1.000000
57 OUTPUT
59 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,2 mapped" );
60 set N0,0
61 set N1,1
62 set N2,2
63 set N3,3
64 set N4,4
65 set N0,N1
66 set N2,N3
67 set N0,N1
68 set N2,N3
69 sub N0,N1,N4
70 print N0
71 print "\n"
72 print N1
73 print "\n"
74 print N4
75 print "\n"
76 end
77 CODE
78 -3.000000
79 1.000000
80 4.000000
81 OUTPUT
83 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1,3 mapped" );
84 set N0,0
85 set N1,1
86 set N2,2
87 set N3,3
88 set N4,4
89 set N0,N1
90 set N2,N3
91 set N0,N1
92 set N2,N3
93 sub N0,N4,N1
94 print N0
95 print "\n"
96 print N4
97 print "\n"
98 print N1
99 print "\n"
101 CODE
102 3.000000
103 4.000000
104 1.000000
105 OUTPUT
107 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 1,3 mapped" );
108 set N0,0
109 set I1,1
110 set N1,1
111 set N2,2
112 set N3,3
113 set N4,4
114 set N0,N1
115 set N2,N3
116 set N0,N1
117 set N2,N3
118 sub N0,N4,I1
119 print N0
120 print "\n"
121 print N4
122 print "\n"
124 CODE
125 3.000000
126 4.000000
127 OUTPUT
129 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 2,3 mapped" );
130 set N0,0
131 set N1,1
132 set N2,2
133 set N3,3
134 set N4,4
135 set N0,N1
136 set N2,N3
137 set N0,N1
138 set N2,N3
139 sub N4,N0,N1
140 print N4
141 print "\n"
142 print N0
143 print "\n"
144 print N1
145 print "\n"
147 CODE
148 0.000000
149 1.000000
150 1.000000
151 OUTPUT
153 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_i 2,3 mapped" );
154 set N0,0
155 set N1,1
156 set I1,1
157 set N2,2
158 set N3,3
159 set N4,4
160 set N0,N1
161 set N2,N3
162 set N0,N1
163 set N2,N3
164 sub N4,N0,I1
165 print N4
166 print "\n"
167 print N0
168 print "\n"
169 print N1
170 print "\n"
172 CODE
173 0.000000
174 1.000000
175 1.000000
176 OUTPUT
178 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 1 mapped" );
179 set N0,0
180 set N1,1
181 set N2,2
182 set N3,3
183 set N4,4
184 set N5,0
185 set N0,N1
186 set N2,N3
187 set N0,N1
188 set N2,N3
189 sub N1,N5,N4
190 print N1
191 print "\n"
192 print N5
193 print "\n"
194 print N4
195 print "\n"
197 CODE
198 -4.000000
199 0.000000
200 4.000000
201 OUTPUT
203 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 2 mapped" );
204 set N0,0
205 set N1,1
206 set N2,2
207 set N3,3
208 set N4,4
209 set N0,N1
210 set N2,N3
211 set N0,N1
212 set N2,N3
213 sub N5,N1,N4
214 print N5
215 print "\n"
216 print N1
217 print "\n"
218 print N4
219 print "\n"
221 CODE
222 -3.000000
223 1.000000
224 4.000000
225 OUTPUT
227 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 3 mapped" );
228 set N0,0
229 set N1,1
230 set N2,2
231 set N3,3
232 set N4,4
233 set N0,N1
234 set N2,N3
235 set N0,N1
236 set N2,N3
237 sub N5,N4,N1
238 print N5
239 print "\n"
240 print N1
241 print "\n"
242 print N4
243 print "\n"
245 CODE
246 3.000000
247 1.000000
248 4.000000
249 OUTPUT
251 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n 0 mapped" );
252 set N0,0
253 set N1,1
254 set N2,2
255 set N3,3
256 set N4,4
257 set N6,0
258 set N0,N1
259 set N2,N3
260 set N0,N1
261 set N2,N3
262 sub N5,N6,N4
263 print N5
264 print "\n"
265 print N6
266 print "\n"
267 print N4
268 print "\n"
270 CODE
271 -4.000000
272 0.000000
273 4.000000
274 OUTPUT
276 pasm_output_is( <<'CODE', <<'OUTPUT', "sub_n_n_n mapped same" );
277 set N2, 1
278 add N2, N2, N2  # reserve first reg
279 add N2, N2, N2
280 set N0, 10.0
281 set N1, 20.0
282 sub N0, N0, N1
283 sub N1, N1
284 print N2
285 print "\n"
286 print N1
287 print "\n"
288 print N0
289 print "\n"
291 CODE
292 4.000000
293 0.000000
294 -10.000000
295 OUTPUT
297 # rounding behavior
298 pir_output_is( <<'CODE', <<'OUT', "set_i_n testing" );
300 .sub _main
301     .local num n
302     .local int i
304     n = 1.4
305     i = n
306     print i
308     n = 2.5
309     i = n
310     print i
312     n = 3.6
313     i = n
314     print i
316     print "\n"
317     end
318 .end
319 CODE
323 pasm_output_is( <<'CODE', <<'OUTPUT', "rounding due to mapped" );
324     set N0, 15
325     mul N0, N0, 0.1
326     sub N0, 1.5
327     unless N0, z
328     print "not "
330     print "zero\n"
331     end
332 CODE
333 zero
334 OUTPUT
336 # Local Variables:
337 #   mode: cperl
338 #   cperl-indent-level: 4
339 #   fill-column: 100
340 # End:
341 # vim: expandtab shiftwidth=4: