Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(796)

Side by Side Diff: test/mjsunit/smi-ops.js

Issue 101016: Improve register allocation of left shift operation. Add tests... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ia32/codegen-ia32.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 16 matching lines...) Expand all
27 27
28 const SMI_MAX = (1 << 30) - 1; 28 const SMI_MAX = (1 << 30) - 1;
29 const SMI_MIN = -(1 << 30); 29 const SMI_MIN = -(1 << 30);
30 const ONE = 1; 30 const ONE = 1;
31 const ONE_HUNDRED = 100; 31 const ONE_HUNDRED = 100;
32 32
33 const OBJ_42 = new (function() { 33 const OBJ_42 = new (function() {
34 this.valueOf = function() { return 42; }; 34 this.valueOf = function() { return 42; };
35 })(); 35 })();
36 36
37 assertEquals(42, OBJ_42.valueOf()); 37 assertEquals(42, OBJ_42.valueOf());
38 38
39 39
40 function Add1(x) { 40 function Add1(x) {
41 return x + 1; 41 return x + 1;
42 } 42 }
43 43
44 function Add100(x) { 44 function Add100(x) {
45 return x + 100; 45 return x + 100;
46 } 46 }
47 47
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 188
189 assertEquals(0, Xor100(100)); 189 assertEquals(0, Xor100(100));
190 assertEquals(7, Xor100Reversed(99)); 190 assertEquals(7, Xor100Reversed(99));
191 assertEquals(-1073741724, Xor100(SMI_MIN)); 191 assertEquals(-1073741724, Xor100(SMI_MIN));
192 assertEquals(-1073741724, Xor100Reversed(SMI_MIN)); 192 assertEquals(-1073741724, Xor100Reversed(SMI_MIN));
193 assertEquals(78, Xor100(OBJ_42)); 193 assertEquals(78, Xor100(OBJ_42));
194 assertEquals(78, Xor100Reversed(OBJ_42)); 194 assertEquals(78, Xor100Reversed(OBJ_42));
195 195
196 var x = 0x23; var y = 0x35; 196 var x = 0x23; var y = 0x35;
197 assertEquals(0x16, x ^ y); 197 assertEquals(0x16, x ^ y);
198
199 // Test shift operators on non-smi inputs, giving smi and non-smi results.
200 function testShiftNonSmis() {
201 var pos_non_smi = 2000000000;
202 var neg_non_smi = -pos_non_smi;
203 var pos_smi = 1000000000;
204 var neg_smi = -pos_smi;
205
206 // Begin block A
207 assertEquals(pos_non_smi, (pos_non_smi) >> 0);
208 assertEquals(pos_non_smi, (pos_non_smi) >>> 0);
209 assertEquals(pos_non_smi, (pos_non_smi) << 0);
210 assertEquals(neg_non_smi, (neg_non_smi) >> 0);
211 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> 0);
212 assertEquals(neg_non_smi, (neg_non_smi) << 0);
213 assertEquals(pos_smi, (pos_smi) >> 0);
214 assertEquals(pos_smi, (pos_smi) >>> 0);
215 assertEquals(pos_smi, (pos_smi) << 0);
216 assertEquals(neg_smi, (neg_smi) >> 0);
217 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> 0);
218 assertEquals(neg_smi, (neg_smi) << 0);
219
220 assertEquals(pos_non_smi / 2, (pos_non_smi) >> 1);
221 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> 1);
222 assertEquals(-0x1194D800, (pos_non_smi) << 1);
223 assertEquals(pos_non_smi / 8, (pos_non_smi) >> 3);
224 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> 3);
225 assertEquals(-0x46536000, (pos_non_smi) << 3);
226 assertEquals(0x73594000, (pos_non_smi) << 4);
227 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> 0);
228 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> 0);
229 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << 0);
230 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> 1);
231 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> 1);
232 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << 1);
233 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> 3);
234 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> 3);
235 assertEquals(-0x46536000, (pos_non_smi + 0.5) << 3);
236 assertEquals(0x73594000, (pos_non_smi + 0.5) << 4);
237
238 assertEquals(neg_non_smi / 2, (neg_non_smi) >> 1);
239 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> 1);
240 assertEquals(0x1194D800, (neg_non_smi) << 1);
241 assertEquals(neg_non_smi / 8, (neg_non_smi) >> 3);
242 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> 3);
243 assertEquals(0x46536000, (neg_non_smi) << 3);
244 assertEquals(-0x73594000, (neg_non_smi) << 4);
245 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> 0);
246 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> 0);
247 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << 0);
248 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> 1);
249 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> 1);
250 assertEquals(0x1194D800, (neg_non_smi - 0.5) << 1);
251 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> 3);
252 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5) >>> 3);
253 assertEquals(0x46536000, (neg_non_smi - 0.5) << 3);
254 assertEquals(-0x73594000, (neg_non_smi - 0.5) << 4);
255
256 assertEquals(pos_smi / 2, (pos_smi) >> 1);
257 assertEquals(pos_smi / 2, (pos_smi) >>> 1);
258 assertEquals(pos_non_smi, (pos_smi) << 1);
259 assertEquals(pos_smi / 8, (pos_smi) >> 3);
260 assertEquals(pos_smi / 8, (pos_smi) >>> 3);
261 assertEquals(-0x2329b000, (pos_smi) << 3);
262 assertEquals(0x73594000, (pos_smi) << 5);
263 assertEquals(pos_smi, (pos_smi + 0.5) >> 0);
264 assertEquals(pos_smi, (pos_smi + 0.5) >>> 0);
265 assertEquals(pos_smi, (pos_smi + 0.5) << 0);
266 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> 1);
267 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> 1);
268 assertEquals(pos_non_smi, (pos_smi + 0.5) << 1);
269 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> 3);
270 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> 3);
271 assertEquals(-0x2329b000, (pos_smi + 0.5) << 3);
272 assertEquals(0x73594000, (pos_smi + 0.5) << 5);
273
274 assertEquals(neg_smi / 2, (neg_smi) >> 1);
275 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> 1);
276 assertEquals(neg_non_smi, (neg_smi) << 1);
277 assertEquals(neg_smi / 8, (neg_smi) >> 3);
278 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> 3);
279 assertEquals(0x46536000, (neg_smi) << 4);
280 assertEquals(-0x73594000, (neg_smi) << 5);
281 assertEquals(neg_smi, (neg_smi - 0.5) >> 0);
282 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> 0);
283 assertEquals(neg_smi, (neg_smi - 0.5) << 0);
284 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> 1);
285 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> 1);
286 assertEquals(neg_non_smi, (neg_smi - 0.5) << 1);
287 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> 3);
288 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> 3);
289 assertEquals(0x46536000, (neg_smi - 0.5) << 4);
290 assertEquals(-0x73594000, (neg_smi - 0.5) << 5);
291 // End block A
292
293 // Repeat block A with 2^32 added to positive numbers and
294 // 2^32 subtracted from negative numbers.
295 // Begin block A repeat 1
296 var two_32 = 0x100000000;
297 var neg_32 = -two_32;
298 assertEquals(pos_non_smi, (two_32 + pos_non_smi) >> 0);
299 assertEquals(pos_non_smi, (two_32 + pos_non_smi) >>> 0);
300 assertEquals(pos_non_smi, (two_32 + pos_non_smi) << 0);
301 assertEquals(neg_non_smi, (neg_32 + neg_non_smi) >> 0);
302 assertEquals(neg_non_smi + 0x100000000, (neg_32 + neg_non_smi) >>> 0);
303 assertEquals(neg_non_smi, (neg_32 + neg_non_smi) << 0);
304 assertEquals(pos_smi, (two_32 + pos_smi) >> 0);
305 assertEquals(pos_smi, (two_32 + pos_smi) >>> 0);
306 assertEquals(pos_smi, (two_32 + pos_smi) << 0);
307 assertEquals(neg_smi, (neg_32 + neg_smi) >> 0);
308 assertEquals(neg_smi + 0x100000000, (neg_32 + neg_smi) >>> 0);
309 assertEquals(neg_smi, (neg_32 + neg_smi) << 0);
310
311 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi) >> 1);
312 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi) >>> 1);
313 assertEquals(-0x1194D800, (two_32 + pos_non_smi) << 1);
314 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi) >> 3);
315 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi) >>> 3);
316 assertEquals(-0x46536000, (two_32 + pos_non_smi) << 3);
317 assertEquals(0x73594000, (two_32 + pos_non_smi) << 4);
318 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) >> 0);
319 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) >>> 0);
320 assertEquals(pos_non_smi, (two_32 + pos_non_smi + 0.5) << 0);
321 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi + 0.5) >> 1);
322 assertEquals(pos_non_smi / 2, (two_32 + pos_non_smi + 0.5) >>> 1);
323 assertEquals(-0x1194D800, (two_32 + pos_non_smi + 0.5) << 1);
324 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi + 0.5) >> 3);
325 assertEquals(pos_non_smi / 8, (two_32 + pos_non_smi + 0.5) >>> 3);
326 assertEquals(-0x46536000, (two_32 + pos_non_smi + 0.5) << 3);
327 assertEquals(0x73594000, (two_32 + pos_non_smi + 0.5) << 4);
328
329 assertEquals(neg_non_smi / 2, (neg_32 + neg_non_smi) >> 1);
330 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_32 + neg_non_smi) >>> 1);
331 assertEquals(0x1194D800, (neg_32 + neg_non_smi) << 1);
332 assertEquals(neg_non_smi / 8, (neg_32 + neg_non_smi) >> 3);
333 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_32 + neg_non_smi) >>> 3);
334 assertEquals(0x46536000, (neg_32 + neg_non_smi) << 3);
335 assertEquals(-0x73594000, (neg_32 + neg_non_smi) << 4);
336 assertEquals(neg_non_smi, (neg_32 + neg_non_smi - 0.5) >> 0);
337 assertEquals(neg_non_smi + 0x100000000, (neg_32 + neg_non_smi - 0.5) >>> 0);
338 assertEquals(neg_non_smi, (neg_32 + neg_non_smi - 0.5) << 0);
339 assertEquals(neg_non_smi / 2, (neg_32 + neg_non_smi - 0.5) >> 1);
340 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_32 + neg_non_smi - 0.5)
341 >>> 1);
342 assertEquals(0x1194D800, (neg_32 + neg_non_smi - 0.5) << 1);
343 assertEquals(neg_non_smi / 8, (neg_32 + neg_non_smi - 0.5) >> 3);
344 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_32 + neg_non_smi - 0.5)
345 >>> 3);
346 assertEquals(0x46536000, (neg_32 + neg_non_smi - 0.5) << 3);
347 assertEquals(-0x73594000, (neg_32 + neg_non_smi - 0.5) << 4);
348
349 assertEquals(pos_smi / 2, (two_32 + pos_smi) >> 1);
350 assertEquals(pos_smi / 2, (two_32 + pos_smi) >>> 1);
351 assertEquals(pos_non_smi, (two_32 + pos_smi) << 1);
352 assertEquals(pos_smi / 8, (two_32 + pos_smi) >> 3);
353 assertEquals(pos_smi / 8, (two_32 + pos_smi) >>> 3);
354 assertEquals(-0x2329b000, (two_32 + pos_smi) << 3);
355 assertEquals(0x73594000, (two_32 + pos_smi) << 5);
356 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) >> 0);
357 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) >>> 0);
358 assertEquals(pos_smi, (two_32 + pos_smi + 0.5) << 0);
359 assertEquals(pos_smi / 2, (two_32 + pos_smi + 0.5) >> 1);
360 assertEquals(pos_smi / 2, (two_32 + pos_smi + 0.5) >>> 1);
361 assertEquals(pos_non_smi, (two_32 + pos_smi + 0.5) << 1);
362 assertEquals(pos_smi / 8, (two_32 + pos_smi + 0.5) >> 3);
363 assertEquals(pos_smi / 8, (two_32 + pos_smi + 0.5) >>> 3);
364 assertEquals(-0x2329b000, (two_32 + pos_smi + 0.5) << 3);
365 assertEquals(0x73594000, (two_32 + pos_smi + 0.5) << 5);
366
367 assertEquals(neg_smi / 2, (neg_32 + neg_smi) >> 1);
368 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_32 + neg_smi) >>> 1);
369 assertEquals(neg_non_smi, (neg_32 + neg_smi) << 1);
370 assertEquals(neg_smi / 8, (neg_32 + neg_smi) >> 3);
371 assertEquals((neg_smi + 0x100000000) / 8, (neg_32 + neg_smi) >>> 3);
372 assertEquals(0x46536000, (neg_32 + neg_smi) << 4);
373 assertEquals(-0x73594000, (neg_32 + neg_smi) << 5);
374 assertEquals(neg_smi, (neg_32 + neg_smi - 0.5) >> 0);
375 assertEquals(neg_smi + 0x100000000, (neg_32 + neg_smi - 0.5) >>> 0);
376 assertEquals(neg_smi, (neg_32 + neg_smi - 0.5) << 0);
377 assertEquals(neg_smi / 2, (neg_32 + neg_smi - 0.5) >> 1);
378 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_32 + neg_smi - 0.5) >>> 1);
379 assertEquals(neg_non_smi, (neg_32 + neg_smi - 0.5) << 1);
380 assertEquals(neg_smi / 8, (neg_32 + neg_smi - 0.5) >> 3);
381 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_32 + neg_smi - 0.5) >>> 3);
382 assertEquals(0x46536000, (neg_32 + neg_smi - 0.5) << 4);
383 assertEquals(-0x73594000, (neg_32 + neg_smi - 0.5) << 5);
384 // End block A repeat 1
385 // Repeat block A with shift amounts in variables intialized with
386 // a constant.
387 var zero = 0;
388 var one = 1;
389 var three = 3;
390 var four = 4;
391 var five = 5;
392 // Begin block A repeat 2
393 assertEquals(pos_non_smi, (pos_non_smi) >> zero);
394 assertEquals(pos_non_smi, (pos_non_smi) >>> zero);
395 assertEquals(pos_non_smi, (pos_non_smi) << zero);
396 assertEquals(neg_non_smi, (neg_non_smi) >> zero);
397 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> zero);
398 assertEquals(neg_non_smi, (neg_non_smi) << zero);
399 assertEquals(pos_smi, (pos_smi) >> zero);
400 assertEquals(pos_smi, (pos_smi) >>> zero);
401 assertEquals(pos_smi, (pos_smi) << zero);
402 assertEquals(neg_smi, (neg_smi) >> zero);
403 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> zero);
404 assertEquals(neg_smi, (neg_smi) << zero);
405
406 assertEquals(pos_non_smi / 2, (pos_non_smi) >> one);
407 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> one);
408 assertEquals(-0x1194D800, (pos_non_smi) << one);
409 assertEquals(pos_non_smi / 8, (pos_non_smi) >> three);
410 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> three);
411 assertEquals(-0x46536000, (pos_non_smi) << three);
412 assertEquals(0x73594000, (pos_non_smi) << four);
413 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> zero);
414 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> zero);
415 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << zero);
416 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> one);
417 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> one);
418 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << one);
419 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> three);
420 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> three);
421 assertEquals(-0x46536000, (pos_non_smi + 0.5) << three);
422 assertEquals(0x73594000, (pos_non_smi + 0.5) << four);
423
424 assertEquals(neg_non_smi / 2, (neg_non_smi) >> one);
425 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> one);
426 assertEquals(0x1194D800, (neg_non_smi) << one);
427 assertEquals(neg_non_smi / 8, (neg_non_smi) >> three);
428 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> three);
429 assertEquals(0x46536000, (neg_non_smi) << three);
430 assertEquals(-0x73594000, (neg_non_smi) << four);
431 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> zero);
432 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> zero);
433 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << zero);
434 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> one);
435 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> one);
436 assertEquals(0x1194D800, (neg_non_smi - 0.5) << one);
437 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> three);
438 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5)
439 >>> three);
440 assertEquals(0x46536000, (neg_non_smi - 0.5) << three);
441 assertEquals(-0x73594000, (neg_non_smi - 0.5) << four);
442
443 assertEquals(pos_smi / 2, (pos_smi) >> one);
444 assertEquals(pos_smi / 2, (pos_smi) >>> one);
445 assertEquals(pos_non_smi, (pos_smi) << one);
446 assertEquals(pos_smi / 8, (pos_smi) >> three);
447 assertEquals(pos_smi / 8, (pos_smi) >>> three);
448 assertEquals(-0x2329b000, (pos_smi) << three);
449 assertEquals(0x73594000, (pos_smi) << five);
450 assertEquals(pos_smi, (pos_smi + 0.5) >> zero);
451 assertEquals(pos_smi, (pos_smi + 0.5) >>> zero);
452 assertEquals(pos_smi, (pos_smi + 0.5) << zero);
453 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> one);
454 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> one);
455 assertEquals(pos_non_smi, (pos_smi + 0.5) << one);
456 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> three);
457 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> three);
458 assertEquals(-0x2329b000, (pos_smi + 0.5) << three);
459 assertEquals(0x73594000, (pos_smi + 0.5) << five);
460
461 assertEquals(neg_smi / 2, (neg_smi) >> one);
462 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> one);
463 assertEquals(neg_non_smi, (neg_smi) << one);
464 assertEquals(neg_smi / 8, (neg_smi) >> three);
465 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> three);
466 assertEquals(0x46536000, (neg_smi) << four);
467 assertEquals(-0x73594000, (neg_smi) << five);
468 assertEquals(neg_smi, (neg_smi - 0.5) >> zero);
469 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> zero);
470 assertEquals(neg_smi, (neg_smi - 0.5) << zero);
471 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> one);
472 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> one);
473 assertEquals(neg_non_smi, (neg_smi - 0.5) << one);
474 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> three);
475 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> three);
476 assertEquals(0x46536000, (neg_smi - 0.5) << four);
477 assertEquals(-0x73594000, (neg_smi - 0.5) << five);
478 // End block A repeat 2
479
480 // Repeat previous block, with computed values in the shift variables.
481 five = 0;
482 while (five < 5 ) ++five;
483 four = five - one;
484 three = four - one;
485 one = four - three;
486 zero = one - one;
487
488 // Begin block A repeat 3
489 assertEquals(pos_non_smi, (pos_non_smi) >> zero);
490 assertEquals(pos_non_smi, (pos_non_smi) >>> zero);
491 assertEquals(pos_non_smi, (pos_non_smi) << zero);
492 assertEquals(neg_non_smi, (neg_non_smi) >> zero);
493 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi) >>> zero);
494 assertEquals(neg_non_smi, (neg_non_smi) << zero);
495 assertEquals(pos_smi, (pos_smi) >> zero);
496 assertEquals(pos_smi, (pos_smi) >>> zero);
497 assertEquals(pos_smi, (pos_smi) << zero);
498 assertEquals(neg_smi, (neg_smi) >> zero);
499 assertEquals(neg_smi + 0x100000000, (neg_smi) >>> zero);
500 assertEquals(neg_smi, (neg_smi) << zero);
501
502 assertEquals(pos_non_smi / 2, (pos_non_smi) >> one);
503 assertEquals(pos_non_smi / 2, (pos_non_smi) >>> one);
504 assertEquals(-0x1194D800, (pos_non_smi) << one);
505 assertEquals(pos_non_smi / 8, (pos_non_smi) >> three);
506 assertEquals(pos_non_smi / 8, (pos_non_smi) >>> three);
507 assertEquals(-0x46536000, (pos_non_smi) << three);
508 assertEquals(0x73594000, (pos_non_smi) << four);
509 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >> zero);
510 assertEquals(pos_non_smi, (pos_non_smi + 0.5) >>> zero);
511 assertEquals(pos_non_smi, (pos_non_smi + 0.5) << zero);
512 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >> one);
513 assertEquals(pos_non_smi / 2, (pos_non_smi + 0.5) >>> one);
514 assertEquals(-0x1194D800, (pos_non_smi + 0.5) << one);
515 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >> three);
516 assertEquals(pos_non_smi / 8, (pos_non_smi + 0.5) >>> three);
517 assertEquals(-0x46536000, (pos_non_smi + 0.5) << three);
518 assertEquals(0x73594000, (pos_non_smi + 0.5) << four);
519
520 assertEquals(neg_non_smi / 2, (neg_non_smi) >> one);
521 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi) >>> one);
522 assertEquals(0x1194D800, (neg_non_smi) << one);
523 assertEquals(neg_non_smi / 8, (neg_non_smi) >> three);
524 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi) >>> three);
525 assertEquals(0x46536000, (neg_non_smi) << three);
526 assertEquals(-0x73594000, (neg_non_smi) << four);
527 assertEquals(neg_non_smi, (neg_non_smi - 0.5) >> zero);
528 assertEquals(neg_non_smi + 0x100000000, (neg_non_smi - 0.5) >>> zero);
529 assertEquals(neg_non_smi, (neg_non_smi - 0.5) << zero);
530 assertEquals(neg_non_smi / 2, (neg_non_smi - 0.5) >> one);
531 assertEquals(neg_non_smi / 2 + 0x100000000 / 2, (neg_non_smi - 0.5) >>> one);
532 assertEquals(0x1194D800, (neg_non_smi - 0.5) << one);
533 assertEquals(neg_non_smi / 8, (neg_non_smi - 0.5) >> three);
534 assertEquals(neg_non_smi / 8 + 0x100000000 / 8, (neg_non_smi - 0.5)
535 >>> three);
536 assertEquals(0x46536000, (neg_non_smi - 0.5) << three);
537 assertEquals(-0x73594000, (neg_non_smi - 0.5) << four);
538
539 assertEquals(pos_smi / 2, (pos_smi) >> one);
540 assertEquals(pos_smi / 2, (pos_smi) >>> one);
541 assertEquals(pos_non_smi, (pos_smi) << one);
542 assertEquals(pos_smi / 8, (pos_smi) >> three);
543 assertEquals(pos_smi / 8, (pos_smi) >>> three);
544 assertEquals(-0x2329b000, (pos_smi) << three);
545 assertEquals(0x73594000, (pos_smi) << five);
546 assertEquals(pos_smi, (pos_smi + 0.5) >> zero);
547 assertEquals(pos_smi, (pos_smi + 0.5) >>> zero);
548 assertEquals(pos_smi, (pos_smi + 0.5) << zero);
549 assertEquals(pos_smi / 2, (pos_smi + 0.5) >> one);
550 assertEquals(pos_smi / 2, (pos_smi + 0.5) >>> one);
551 assertEquals(pos_non_smi, (pos_smi + 0.5) << one);
552 assertEquals(pos_smi / 8, (pos_smi + 0.5) >> three);
553 assertEquals(pos_smi / 8, (pos_smi + 0.5) >>> three);
554 assertEquals(-0x2329b000, (pos_smi + 0.5) << three);
555 assertEquals(0x73594000, (pos_smi + 0.5) << five);
556
557 assertEquals(neg_smi / 2, (neg_smi) >> one);
558 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi) >>> one);
559 assertEquals(neg_non_smi, (neg_smi) << one);
560 assertEquals(neg_smi / 8, (neg_smi) >> three);
561 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi) >>> three);
562 assertEquals(0x46536000, (neg_smi) << four);
563 assertEquals(-0x73594000, (neg_smi) << five);
564 assertEquals(neg_smi, (neg_smi - 0.5) >> zero);
565 assertEquals(neg_smi + 0x100000000, (neg_smi - 0.5) >>> zero);
566 assertEquals(neg_smi, (neg_smi - 0.5) << zero);
567 assertEquals(neg_smi / 2, (neg_smi - 0.5) >> one);
568 assertEquals(neg_smi / 2 + 0x100000000 / 2, (neg_smi - 0.5) >>> one);
569 assertEquals(neg_non_smi, (neg_smi - 0.5) << one);
570 assertEquals(neg_smi / 8, (neg_smi - 0.5) >> three);
571 assertEquals(neg_smi / 8 + 0x100000000 / 8, (neg_smi - 0.5) >>> three);
572 assertEquals(0x46536000, (neg_smi - 0.5) << four);
573 assertEquals(-0x73594000, (neg_smi - 0.5) << five);
574 // End block A repeat 3
575
576 // Test non-integer shift value
577 assertEquals(5, 20.5 >> 2.4);
578 assertEquals(5, 20.5 >> 2.7);
579 var shift = 2.4;
580 assertEquals(5, 20.5 >> shift);
581 assertEquals(5, 20.5 >> shift + 0.3);
582 shift = shift + zero;
583 assertEquals(5, 20.5 >> shift);
584 assertEquals(5, 20.5 >> shift + 0.3);
585 }
586
587 testShiftNonSmis();
OLDNEW
« no previous file with comments | « src/ia32/codegen-ia32.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698