Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 } | |
| OLD | NEW |