932a05420a
Introduce InvokeMathCFunction that can be used to directly invoke mathematical function provided by runtime. Use it to unconditionally inline _Double.pow. Use it to inline floor, ceil, round, truncate, round when SSE4.1 is not available. Perform representation selection phase after constant propagation to minimize boxing. Add support for enter instruction in the x64 disassembler. Add test for optimized pow and fix compilation on windows. R=fschneider@google.com BUG=dart:8002 Review URL: https://codereview.chromium.org//12038013 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@17393 260f80e4-7a28-3924-810f-c04153c831b5
52 lines
1.0 KiB
Dart
52 lines
1.0 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
// Tests that the VM does not crash on weird corner cases of class Math.
|
|
// VMOptions=--optimization_counter_threshold=100
|
|
|
|
library math_vm_test;
|
|
|
|
import 'dart:math';
|
|
|
|
class FakeNumber {
|
|
const FakeNumber();
|
|
void toDouble() {}
|
|
}
|
|
|
|
class MathTest {
|
|
static bool testParseInt(x) {
|
|
try {
|
|
int.parse(x); // Expects string.
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
static bool testSqrt(x) {
|
|
try {
|
|
sqrt(x); // Expects number.
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
static void testMain() {
|
|
Expect.equals(false, testParseInt(5));
|
|
Expect.equals(false, testSqrt(const FakeNumber()));
|
|
}
|
|
}
|
|
|
|
testDoublePow() {
|
|
Expect.equals((1 << 32).toDouble(), pow(2.0, 32));
|
|
}
|
|
|
|
|
|
main() {
|
|
for (int i = 0; i < 200; i++) {
|
|
MathTest.testMain();
|
|
testDoublePow();
|
|
}
|
|
}
|