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

Side by Side Diff: runtime/vm/assembler_dbc_test.cc

Issue 1927203002: Start to add assembler tests for DBC (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Add -NonSmi tests Created 4 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
« no previous file with comments | « no previous file | runtime/vm/unit_test.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_DBC)
7
8 #include "vm/assembler.h"
9 #include "vm/unit_test.h"
10
11 namespace dart {
12
13 #define __ assembler->
14
15 ASSEMBLER_TEST_GENERATE(Simple, assembler) {
16 __ PushConstant(Smi::Handle(Smi::New(42)));
17 __ ReturnTOS();
18 }
19
20
21 ASSEMBLER_TEST_RUN(Simple, test) {
22 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
23 }
24
25
26 // - AddTOS; SubTOS; MulTOS; BitOrTOS; BitAndTOS; EqualTOS; LessThanTOS;
27 // GreaterThanTOS;
28 //
29 // Smi fast-path for a corresponding method. Checks if SP[0] and SP[-1] are
30 // both smis and result of SP[0] <op> SP[-1] is a smi - if this is true
31 // then pops operands and pushes result on the stack and skips the next
32 // instruction (which implements a slow path fallback).
33 ASSEMBLER_TEST_GENERATE(AddTOS, assembler) {
34 __ PushConstant(Smi::Handle(Smi::New(-42)));
35 __ PushConstant(Smi::Handle(Smi::New(84)));
36 __ AddTOS();
37 __ PushConstant(Smi::Handle(Smi::New(0))); // Should be skipped.
38 __ ReturnTOS();
39 }
40
41
42 ASSEMBLER_TEST_RUN(AddTOS, test) {
43 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
44 }
45
46
47 ASSEMBLER_TEST_GENERATE(AddTOSOverflow, assembler) {
48 __ PushConstant(Smi::Handle(Smi::New(Smi::kMaxValue)));
49 __ PushConstant(Smi::Handle(Smi::New(1)));
50 __ AddTOS();
51 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
52 __ ReturnTOS();
53 }
54
55
56 ASSEMBLER_TEST_RUN(AddTOSOverflow, test) {
57 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
58 }
59
60
61 ASSEMBLER_TEST_GENERATE(AddTOSNonSmi, assembler) {
62 const String& numstr =
63 String::Handle(String::New("98765432198765432100", Heap::kOld));
64 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
65 __ PushConstant(Smi::Handle(Smi::New(1)));
66 __ AddTOS();
67 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
68 __ ReturnTOS();
69 }
70
71
72 ASSEMBLER_TEST_RUN(AddTOSNonSmi, test) {
73 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
74 }
75
76
77 ASSEMBLER_TEST_GENERATE(SubTOS, assembler) {
78 __ PushConstant(Smi::Handle(Smi::New(30)));
79 __ PushConstant(Smi::Handle(Smi::New(-12)));
80 __ SubTOS();
81 __ PushConstant(Smi::Handle(Smi::New(0))); // Should be skipped.
82 __ ReturnTOS();
83 }
84
85
86 ASSEMBLER_TEST_RUN(SubTOS, test) {
87 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
88 }
89
90
91 ASSEMBLER_TEST_GENERATE(SubTOSOverflow, assembler) {
92 __ PushConstant(Smi::Handle(Smi::New(Smi::kMinValue)));
93 __ PushConstant(Smi::Handle(Smi::New(1)));
94 __ SubTOS();
95 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
96 __ ReturnTOS();
97 }
98
99
100 ASSEMBLER_TEST_RUN(SubTOSOverflow, test) {
101 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
102 }
103
104
105 ASSEMBLER_TEST_GENERATE(SubTOSNonSmi, assembler) {
106 const String& numstr =
107 String::Handle(String::New("98765432198765432100", Heap::kOld));
108 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
109 __ PushConstant(Smi::Handle(Smi::New(1)));
110 __ SubTOS();
111 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
112 __ ReturnTOS();
113 }
114
115
116 ASSEMBLER_TEST_RUN(SubTOSNonSmi, test) {
117 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
118 }
119
120
121 ASSEMBLER_TEST_GENERATE(MulTOS, assembler) {
122 __ PushConstant(Smi::Handle(Smi::New(-6)));
123 __ PushConstant(Smi::Handle(Smi::New(-7)));
124 __ MulTOS();
125 __ PushConstant(Smi::Handle(Smi::New(0))); // Should be skipped.
126 __ ReturnTOS();
127 }
128
129
130 ASSEMBLER_TEST_RUN(MulTOS, test) {
131 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
132 }
133
134
135 ASSEMBLER_TEST_GENERATE(MulTOSOverflow, assembler) {
136 __ PushConstant(Smi::Handle(Smi::New(Smi::kMaxValue)));
137 __ PushConstant(Smi::Handle(Smi::New(-8)));
138 __ MulTOS();
139 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
140 __ ReturnTOS();
141 }
142
143
144 ASSEMBLER_TEST_RUN(MulTOSOverflow, test) {
145 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
146 }
147
148
149 ASSEMBLER_TEST_GENERATE(MulTOSNonSmi, assembler) {
150 const String& numstr =
151 String::Handle(String::New("98765432198765432100", Heap::kOld));
152 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
153 __ PushConstant(Smi::Handle(Smi::New(1)));
154 __ MulTOS();
155 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
156 __ ReturnTOS();
157 }
158
159
160 ASSEMBLER_TEST_RUN(MulTOSNonSmi, test) {
161 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
162 }
163
164
165 ASSEMBLER_TEST_GENERATE(BitOrTOS, assembler) {
166 __ PushConstant(Smi::Handle(Smi::New(0x22)));
167 __ PushConstant(Smi::Handle(Smi::New(0x08)));
168 __ BitOrTOS();
169 __ PushConstant(Smi::Handle(Smi::New(0))); // Should be skipped.
170 __ ReturnTOS();
171 }
172
173
174 ASSEMBLER_TEST_RUN(BitOrTOS, test) {
175 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
176 }
177
178
179 ASSEMBLER_TEST_GENERATE(BitOrTOSNonSmi, assembler) {
180 const String& numstr =
181 String::Handle(String::New("98765432198765432100", Heap::kOld));
182 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
183 __ PushConstant(Smi::Handle(Smi::New(0x08)));
184 __ BitOrTOS();
185 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
186 __ ReturnTOS();
187 }
188
189
190 ASSEMBLER_TEST_RUN(BitOrTOSNonSmi, test) {
191 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
192 }
193
194
195 ASSEMBLER_TEST_GENERATE(BitAndTOS, assembler) {
196 __ PushConstant(Smi::Handle(Smi::New(0x2a)));
197 __ PushConstant(Smi::Handle(Smi::New(0xaa)));
198 __ BitAndTOS();
199 __ PushConstant(Smi::Handle(Smi::New(0))); // Should be skipped.
200 __ ReturnTOS();
201 }
202
203
204 ASSEMBLER_TEST_RUN(BitAndTOS, test) {
205 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
206 }
207
208
209 ASSEMBLER_TEST_GENERATE(BitAndTOSNonSmi, assembler) {
210 const String& numstr =
211 String::Handle(String::New("98765432198765432100", Heap::kOld));
212 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
213 __ PushConstant(Smi::Handle(Smi::New(0x08)));
214 __ BitAndTOS();
215 __ PushConstant(Smi::Handle(Smi::New(42))); // Shouldn't be skipped.
216 __ ReturnTOS();
217 }
218
219
220 ASSEMBLER_TEST_RUN(BitAndTOSNonSmi, test) {
221 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
222 }
223
224
225 ASSEMBLER_TEST_GENERATE(EqualTOSTrue, assembler) {
226 __ PushConstant(Smi::Handle(Smi::New(42)));
227 __ PushConstant(Smi::Handle(Smi::New(42)));
228 __ EqualTOS();
229 __ PushConstant(Bool::False()); // Should be skipped.
230 __ ReturnTOS();
231 }
232
233
234 ASSEMBLER_TEST_RUN(EqualTOSTrue, test) {
235 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
236 }
237
238
239 ASSEMBLER_TEST_GENERATE(EqualTOSFalse, assembler) {
240 __ PushConstant(Smi::Handle(Smi::New(42)));
241 __ PushConstant(Smi::Handle(Smi::New(-42)));
242 __ EqualTOS();
243 __ PushConstant(Bool::True()); // Should be skipped.
244 __ ReturnTOS();
245 }
246
247
248 ASSEMBLER_TEST_RUN(EqualTOSFalse, test) {
249 EXPECT(!EXECUTE_TEST_CODE_BOOL(test->code()));
250 }
251
252
253 ASSEMBLER_TEST_GENERATE(EqualTOSNonSmi, assembler) {
254 const String& numstr =
255 String::Handle(String::New("98765432198765432100", Heap::kOld));
256 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
257 __ PushConstant(Smi::Handle(Smi::New(-42)));
258 __ EqualTOS();
259 __ PushConstant(Bool::True()); // Shouldn't be skipped.
260 __ ReturnTOS();
261 }
262
263
264 ASSEMBLER_TEST_RUN(EqualTOSNonSmi, test) {
265 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
266 }
267
268
269 ASSEMBLER_TEST_GENERATE(LessThanTOSTrue, assembler) {
270 __ PushConstant(Smi::Handle(Smi::New(-42)));
271 __ PushConstant(Smi::Handle(Smi::New(42)));
272 __ LessThanTOS();
273 __ PushConstant(Bool::False()); // Should be skipped.
274 __ ReturnTOS();
275 }
276
277
278 ASSEMBLER_TEST_RUN(LessThanTOSTrue, test) {
279 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
280 }
281
282
283 ASSEMBLER_TEST_GENERATE(LessThanTOSFalse, assembler) {
284 __ PushConstant(Smi::Handle(Smi::New(42)));
285 __ PushConstant(Smi::Handle(Smi::New(-42)));
286 __ LessThanTOS();
287 __ PushConstant(Bool::False()); // Should be skipped.
288 __ ReturnTOS();
289 }
290
291
292 ASSEMBLER_TEST_RUN(LessThanTOSFalse, test) {
293 EXPECT(!EXECUTE_TEST_CODE_BOOL(test->code()));
294 }
295
296
297 ASSEMBLER_TEST_GENERATE(LessThanTOSNonSmi, assembler) {
298 const String& numstr =
299 String::Handle(String::New("98765432198765432100", Heap::kOld));
300 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
301 __ PushConstant(Smi::Handle(Smi::New(-42)));
302 __ LessThanTOS();
303 __ PushConstant(Bool::True()); // Shouldn't be skipped.
304 __ ReturnTOS();
305 }
306
307
308 ASSEMBLER_TEST_RUN(LessThanTOSNonSmi, test) {
309 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
310 }
311
312
313 ASSEMBLER_TEST_GENERATE(GreaterThanTOSTrue, assembler) {
314 __ PushConstant(Smi::Handle(Smi::New(42)));
315 __ PushConstant(Smi::Handle(Smi::New(-42)));
316 __ GreaterThanTOS();
317 __ PushConstant(Bool::False()); // Should be skipped.
318 __ ReturnTOS();
319 }
320
321
322 ASSEMBLER_TEST_RUN(GreaterThanTOSTrue, test) {
323 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
324 }
325
326
327 ASSEMBLER_TEST_GENERATE(GreaterThanTOSFalse, assembler) {
328 __ PushConstant(Smi::Handle(Smi::New(-42)));
329 __ PushConstant(Smi::Handle(Smi::New(42)));
330 __ GreaterThanTOS();
331 __ PushConstant(Bool::False()); // Should be skipped.
332 __ ReturnTOS();
333 }
334
335
336 ASSEMBLER_TEST_RUN(GreaterThanTOSFalse, test) {
337 EXPECT(!EXECUTE_TEST_CODE_BOOL(test->code()));
338 }
339
340
341 ASSEMBLER_TEST_GENERATE(GreaterThanTOSNonSmi, assembler) {
342 const String& numstr =
343 String::Handle(String::New("98765432198765432100", Heap::kOld));
344 __ PushConstant(Integer::Handle(Integer::New(numstr, Heap::kOld)));
345 __ PushConstant(Smi::Handle(Smi::New(-42)));
346 __ GreaterThanTOS();
347 __ PushConstant(Bool::True()); // Shouldn't be skipped.
348 __ ReturnTOS();
349 }
350
351
352 ASSEMBLER_TEST_RUN(GreaterThanTOSNonSmi, test) {
353 EXPECT(EXECUTE_TEST_CODE_BOOL(test->code()));
354 }
355
356
357 // - IfNeStrictTOS; IfEqStrictTOS; IfNeStrictNumTOS; IfEqStrictNumTOS
358 //
359 // Skips the next instruction unless the given condition holds. 'Num'
360 // variants perform number check while non-Num variants just compare
361 // RawObject pointers.
362 //
363 // Used to implement conditional jump:
364 //
365 // IfNeStrictTOS
366 // Jump T ;; jump if not equal
367 ASSEMBLER_TEST_GENERATE(IfNeStrictTOSTaken, assembler) {
368 Label branch_taken;
369 const Array& array1 = Array::Handle(Array::New(1, Heap::kOld));
370 const Array& array2 = Array::Handle(Array::New(2, Heap::kOld));
371 __ PushConstant(array1);
372 __ PushConstant(array2);
373 __ IfNeStrictTOS();
374 __ Jump(&branch_taken);
375 __ PushConstant(Smi::Handle(Smi::New(0)));
376 __ ReturnTOS();
377 __ Bind(&branch_taken);
378 __ PushConstant(Smi::Handle(Smi::New(42)));
379 __ ReturnTOS();
380 }
381
382
383 ASSEMBLER_TEST_RUN(IfNeStrictTOSTaken, test) {
384 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
385 }
386
387
388 ASSEMBLER_TEST_GENERATE(IfNeStrictTOSNotTaken, assembler) {
389 Label branch_taken;
390 const Array& array1 = Array::Handle(Array::New(1, Heap::kOld));
391 __ PushConstant(array1);
392 __ PushConstant(array1);
393 __ IfNeStrictTOS();
394 __ Jump(&branch_taken);
395 __ PushConstant(Smi::Handle(Smi::New(42)));
396 __ ReturnTOS();
397 __ Bind(&branch_taken);
398 __ PushConstant(Smi::Handle(Smi::New(0)));
399 __ ReturnTOS();
400 }
401
402 ASSEMBLER_TEST_RUN(IfNeStrictTOSNotTaken, test) {
403 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
404 }
405
406
407 // TODO(zra): Also add tests that use Mint, Bignum.
408 ASSEMBLER_TEST_GENERATE(IfNeStrictNumTOSTaken, assembler) {
409 Label branch_taken;
410 __ PushConstant(Smi::Handle(Smi::New(-1)));
411 __ PushConstant(Smi::Handle(Smi::New(1)));
412 __ IfNeStrictNumTOS();
413 __ Jump(&branch_taken);
414 __ PushConstant(Smi::Handle(Smi::New(0)));
415 __ ReturnTOS();
416 __ Bind(&branch_taken);
417 __ PushConstant(Smi::Handle(Smi::New(42)));
418 __ ReturnTOS();
419 }
420
421
422 ASSEMBLER_TEST_RUN(IfNeStrictNumTOSTaken, test) {
423 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
424 }
425
426
427 ASSEMBLER_TEST_GENERATE(IfNeStrictNumTOSNotTaken, assembler) {
428 Label branch_taken;
429 __ PushConstant(Smi::Handle(Smi::New(1)));
430 __ PushConstant(Smi::Handle(Smi::New(1)));
431 __ IfNeStrictNumTOS();
432 __ Jump(&branch_taken);
433 __ PushConstant(Smi::Handle(Smi::New(42)));
434 __ ReturnTOS();
435 __ Bind(&branch_taken);
436 __ PushConstant(Smi::Handle(Smi::New(0)));
437 __ ReturnTOS();
438 }
439
440 ASSEMBLER_TEST_RUN(IfNeStrictNumTOSNotTaken, test) {
441 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
442 }
443
444
445 ASSEMBLER_TEST_GENERATE(IfNeStrictNumTOSTakenDouble, assembler) {
446 Label branch_taken;
447 __ PushConstant(Double::Handle(Double::New(-1.0, Heap::kOld)));
448 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
449 __ IfNeStrictNumTOS();
450 __ Jump(&branch_taken);
451 __ PushConstant(Smi::Handle(Smi::New(0)));
452 __ ReturnTOS();
453 __ Bind(&branch_taken);
454 __ PushConstant(Smi::Handle(Smi::New(42)));
455 __ ReturnTOS();
456 }
457
458
459 ASSEMBLER_TEST_RUN(IfNeStrictNumTOSTakenDouble, test) {
460 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
461 }
462
463
464 ASSEMBLER_TEST_GENERATE(IfNeStrictNumTOSNotTakenDouble, assembler) {
465 Label branch_taken;
466 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
467 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
468 __ IfNeStrictNumTOS();
469 __ Jump(&branch_taken);
470 __ PushConstant(Smi::Handle(Smi::New(42)));
471 __ ReturnTOS();
472 __ Bind(&branch_taken);
473 __ PushConstant(Smi::Handle(Smi::New(0)));
474 __ ReturnTOS();
475 }
476
477 ASSEMBLER_TEST_RUN(IfNeStrictNumTOSNotTakenDouble, test) {
478 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
479 }
480
481
482 ASSEMBLER_TEST_GENERATE(IfEqStrictTOSTaken, assembler) {
483 Label branch_taken;
484 const Array& array1 = Array::Handle(Array::New(1, Heap::kOld));
485 __ PushConstant(array1);
486 __ PushConstant(array1);
487 __ IfEqStrictTOS();
488 __ Jump(&branch_taken);
489 __ PushConstant(Smi::Handle(Smi::New(0)));
490 __ ReturnTOS();
491 __ Bind(&branch_taken);
492 __ PushConstant(Smi::Handle(Smi::New(42)));
493 __ ReturnTOS();
494 }
495
496
497 ASSEMBLER_TEST_RUN(IfEqStrictTOSTaken, test) {
498 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
499 }
500
501
502 ASSEMBLER_TEST_GENERATE(IfEqStrictTOSNotTaken, assembler) {
503 Label branch_taken;
504 const Array& array1 = Array::Handle(Array::New(1, Heap::kOld));
505 const Array& array2 = Array::Handle(Array::New(2, Heap::kOld));
506 __ PushConstant(array1);
507 __ PushConstant(array2);
508 __ IfEqStrictTOS();
509 __ Jump(&branch_taken);
510 __ PushConstant(Smi::Handle(Smi::New(42)));
511 __ ReturnTOS();
512 __ Bind(&branch_taken);
513 __ PushConstant(Smi::Handle(Smi::New(0)));
514 __ ReturnTOS();
515 }
516
517 ASSEMBLER_TEST_RUN(IfEqStrictTOSNotTaken, test) {
518 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
519 }
520
521
522 // TODO(zra): Also add tests that use Mint, Bignum.
523 ASSEMBLER_TEST_GENERATE(IfEqStrictNumTOSTaken, assembler) {
524 Label branch_taken;
525 __ PushConstant(Smi::Handle(Smi::New(1)));
526 __ PushConstant(Smi::Handle(Smi::New(1)));
527 __ IfEqStrictNumTOS();
528 __ Jump(&branch_taken);
529 __ PushConstant(Smi::Handle(Smi::New(0)));
530 __ ReturnTOS();
531 __ Bind(&branch_taken);
532 __ PushConstant(Smi::Handle(Smi::New(42)));
533 __ ReturnTOS();
534 }
535
536
537 ASSEMBLER_TEST_RUN(IfEqStrictNumTOSTaken, test) {
538 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
539 }
540
541
542 ASSEMBLER_TEST_GENERATE(IfEqStrictNumTOSNotTaken, assembler) {
543 Label branch_taken;
544 __ PushConstant(Smi::Handle(Smi::New(-1)));
545 __ PushConstant(Smi::Handle(Smi::New(1)));
546 __ IfEqStrictNumTOS();
547 __ Jump(&branch_taken);
548 __ PushConstant(Smi::Handle(Smi::New(42)));
549 __ ReturnTOS();
550 __ Bind(&branch_taken);
551 __ PushConstant(Smi::Handle(Smi::New(0)));
552 __ ReturnTOS();
553 }
554
555
556 ASSEMBLER_TEST_RUN(IfEqStrictNumTOSNotTaken, test) {
557 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
558 }
559
560
561 ASSEMBLER_TEST_GENERATE(IfEqStrictNumTOSTakenDouble, assembler) {
562 Label branch_taken;
563 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
564 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
565 __ IfEqStrictNumTOS();
566 __ Jump(&branch_taken);
567 __ PushConstant(Smi::Handle(Smi::New(0)));
568 __ ReturnTOS();
569 __ Bind(&branch_taken);
570 __ PushConstant(Smi::Handle(Smi::New(42)));
571 __ ReturnTOS();
572 }
573
574
575 ASSEMBLER_TEST_RUN(IfEqStrictNumTOSTakenDouble, test) {
576 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
577 }
578
579
580 ASSEMBLER_TEST_GENERATE(IfEqStrictNumTOSNotTakenDouble, assembler) {
581 Label branch_taken;
582 __ PushConstant(Double::Handle(Double::New(-1.0, Heap::kOld)));
583 __ PushConstant(Double::Handle(Double::New(1.0, Heap::kOld)));
584 __ IfEqStrictNumTOS();
585 __ Jump(&branch_taken);
586 __ PushConstant(Smi::Handle(Smi::New(42)));
587 __ ReturnTOS();
588 __ Bind(&branch_taken);
589 __ PushConstant(Smi::Handle(Smi::New(0)));
590 __ ReturnTOS();
591 }
592
593
594 ASSEMBLER_TEST_RUN(IfEqStrictNumTOSNotTakenDouble, test) {
595 EXPECT_EQ(42, EXECUTE_TEST_CODE_INTPTR(test->code()));
596 }
597
598 } // namespace dart
599
600 #endif // defined(TARGET_ARCH_DBC)
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/unit_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698