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

Side by Side Diff: runtime/tests/vm/dart/truncating_ints_test.dart

Issue 2974633003: Option to truncate integers to 64 bits, part 1 (core VM changes) (Closed)
Patch Set: Created 3 years, 5 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
OLDNEW
(Empty)
1 // Copyright (c) 2017, 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 // Test for truncating (wrap-around) integer arithmetic in --truncate-ints-to-64 -bits mode.
6
7 // VMOptions=--truncate-ints-to-64-bits --enable-inlining-annotations --optimiza tion_counter_threshold=10 --no-use-osr --no-background-compilation
regis 2017/07/07 20:10:30 We usually write VMOptions just after the copyrigh
alexmarkov 2017/07/07 20:46:38 Done.
8
9 import "package:expect/expect.dart";
10
11 const alwaysInline = "AlwaysInline";
12 const neverInline = "NeverInline";
13
14 @neverInline
15 add_smi(var a, var b) => a + b;
16
17 @neverInline
18 add_mint(var a, var b) => a + b;
19
20 @neverInline
21 add_mint_consts() => 0x5000000000000000 + 0x6000000000000000;
22
23 @neverInline
24 test_add(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
25 for (var i = 0; i < 20; i++) {
26 Expect.equals(5, add_smi(v2, v3));
27 }
28
29 // Trigger deoptimization and re-compilation
30 for (var i = 0; i < 20; i++) {
31 Expect.equals(0x4000000000000001, add_smi(v2, v3fxx));
32 }
33
34 for (var i = 0; i < 20; i++) {
35 Expect.equals(-1, add_mint(v5fxx, n60xx));
36 }
37
38 // Wrap-around
39 for (var i = 0; i < 20; i++) {
40 Expect.equals(-0x2000000000000002, add_mint(v5fxx, v7fxx));
41 }
42
43 // Constant folding
44 for (var i = 0; i < 20; i++) {
45 Expect.equals(-0x5000000000000000, add_mint_consts());
46 }
47 }
48
49 @neverInline
50 sub_smi(var a, var b) => a - b;
51
52 @neverInline
53 sub_mint(var a, var b) => a - b;
54
55 @neverInline
56 sub_mint_consts() => (-0x5000000000000000) - 0x6000000000000000;
57
58 @neverInline
59 test_sub(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
60 for (var i = 0; i < 20; i++) {
61 Expect.equals(1, sub_smi(v3, v2));
62 }
63
64 // Trigger deoptimization and re-compilation
65 for (var i = 0; i < 20; i++) {
66 Expect.equals(-0x7ffffffffffffffe, sub_smi(-v3fxx, v3fxx));
67 }
68
69 for (var i = 0; i < 20; i++) {
70 Expect.equals(0x2000000000000000, sub_mint(v7fxx, v5fxx));
71 }
72
73 // Wrap-around
74 for (var i = 0; i < 20; i++) {
75 Expect.equals(0x4000000000000001, sub_mint(n60xx, v5fxx));
76 }
77
78 // Constant folding
79 for (var i = 0; i < 20; i++) {
80 Expect.equals(0x5000000000000000, sub_mint_consts());
81 }
82 }
83
84 @neverInline
85 mul_smi(var a, var b) => a * b;
86
87 @neverInline
88 mul_mint(var a, var b) => a * b;
89
90 @neverInline
91 mul_mint_consts() => 0x5000000000000001 * 0x6000000000000001;
92
93 @neverInline
94 test_mul(var v2, var v3, var v3fxx, var v5fxx, var v7fxx, var n60xx) {
95 for (var i = 0; i < 20; i++) {
96 Expect.equals(6, mul_smi(v2, v3));
97 }
98
99 // Trigger deoptimization and re-compilation
100 for (var i = 0; i < 20; i++) {
101 Expect.equals(0x7ffffffffffffffe, mul_smi(v2, v3fxx));
102 }
103
104 // Wrap around
105 for (var i = 0; i < 20; i++) {
106 Expect.equals(0x1ffffffffffffffd, mul_mint(v5fxx, 3));
107 }
108
109 // Constant folding
110 for (var i = 0; i < 20; i++) {
111 Expect.equals(-0x4fffffffffffffff, mul_mint_consts());
112 }
113 }
114
115 @neverInline
116 shl_smi(var a, var b) => a << b;
117
118 @neverInline
119 shl_mint(var a, var b) => a << b;
120
121 @neverInline
122 shl_mint_by_const16(var a) => a << 16;
123
124 @neverInline
125 shl_smi_by_const96(var a) => a << 96;
126
127 @neverInline
128 shl_mint_by_const96(var a) => a << 96;
129
130 @neverInline
131 shl_mint_consts() => 0x77665544aabbccdd << 48;
132
133 @neverInline
134 test_shl(var v2, var v3, var v8, var v40) {
135 for (var i = 0; i < 20; i++) {
136 Expect.equals(16, shl_smi(v2, v3));
137 }
138
139 // Trigger deoptimization and re-compilation, wrap-around
140 for (var i = 0; i < 20; i++) {
141 Expect.equals(0x5566770000000000, shl_smi(0x0011223344556677, v40));
142 }
143
144 // Wrap around
145 for (var i = 0; i < 20; i++) {
146 Expect.equals(-0x554433ffeeddcd00, shl_mint(0x7faabbcc00112233, v8));
147 }
148
149 // Shift mint by small constant
150 for (var i = 0; i < 20; i++) {
151 Expect.equals(0x5544332211aa0000, shl_mint_by_const16(0x77665544332211aa));
152 }
153
154 // Shift smi by large constant
155 for (var i = 0; i < 20; i++) {
156 Expect.equals(0, shl_smi_by_const96(0x77665544332211));
157 }
158
159 // Shift mint by large constant
160 for (var i = 0; i < 20; i++) {
161 Expect.equals(0, shl_mint_by_const96(0x77665544332211aa));
162 }
163
164 // Constant folding
165 for (var i = 0; i < 20; i++) {
166 Expect.equals(-0x3323000000000000, shl_mint_consts());
167 }
168 }
169
170 main() {
171 var v2 = 2; // smi
172 var v3 = 3; // smi
173 var v8 = 8; // smi
174 var v40 = 40; // smi
175 var v3fxx = 0x3fffffffffffffff; // max smi
176 var v5fxx = 0x5fffffffffffffff; // mint
177 var v7fxx = 0x7fffffffffffffff; // max mint
178 var n60xx = -0x6000000000000000; // negative mint
179
180 test_add(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
181 test_sub(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
182 test_mul(v2, v3, v3fxx, v5fxx, v7fxx, n60xx);
183 test_shl(v2, v3, v8, v40);
184 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698