| Index: test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart
|
| diff --git a/test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart b/test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..155804f3ddde62a76f47f06b8bf2e91ebedae306
|
| --- /dev/null
|
| +++ b/test/codegen/lib/typed_data/float32x4_unbox_regress_test.dart
|
| @@ -0,0 +1,117 @@
|
| +// Copyright (c) 2013, 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.
|
| +// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
|
| +
|
| +// Library tag to be able to run in html test framework.
|
| +library float32x4_unbox_regress_test;
|
| +
|
| +import 'dart:typed_data';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +testListStore(array, index, value) {
|
| + array[index] = value;
|
| +}
|
| +
|
| +void testListStoreDeopt() {
|
| + var list;
|
| + var value = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
| + var smi = 12;
|
| + list = new Float32x4List(8);
|
| + for (int i = 0; i < 20; i++) {
|
| + testListStore(list, 0, value);
|
| + }
|
| +
|
| + try {
|
| + // Without a proper check for SMI in the Float32x4 unbox instruction
|
| + // this might trigger a crash.
|
| + testListStore(list, 0, smi);
|
| + } catch (_) { }
|
| +}
|
| +
|
| +testAdd(a, b) {
|
| + var c = a + b;
|
| + Expect.equals(3.0, c.x);
|
| + Expect.equals(5.0, c.y);
|
| + Expect.equals(7.0, c.z);
|
| + Expect.equals(9.0, c.w);
|
| +}
|
| +
|
| +void testAddDeopt() {
|
| + var a = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
| + var b = new Float32x4(2.0, 3.0, 4.0, 5.0);
|
| + var smi = 12;
|
| + for (int i = 0; i < 20; i++) {
|
| + testAdd(a, b);
|
| + }
|
| +
|
| + try {
|
| + testAdd(a, smi);
|
| + } catch (_) {}
|
| +}
|
| +
|
| +
|
| +testGet(a) {
|
| + var c = a.x + a.y + a.z + a.w;
|
| + Expect.equals(10.0, c);
|
| +}
|
| +
|
| +void testGetDeopt() {
|
| + var a = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
| + var smi = 12;
|
| + for (int i = 0; i < 20; i++) {
|
| + testGet(a);
|
| + }
|
| +
|
| + try {
|
| + testGet(12);
|
| + } catch (_) {
|
| + }
|
| +
|
| + for (int i = 0; i < 20; i++) {
|
| + testGet(a);
|
| + }
|
| +}
|
| +
|
| +void testComparison(a, b) {
|
| + Int32x4 r = a.equal(b);
|
| + Expect.equals(true, r.flagX);
|
| + Expect.equals(false, r.flagY);
|
| + Expect.equals(false, r.flagZ);
|
| + Expect.equals(true, r.flagW);
|
| +}
|
| +
|
| +void testComparisonDeopt() {
|
| + var a = new Float32x4(1.0, 2.0, 3.0, 4.0);
|
| + var b = new Float32x4(1.0, 2.1, 3.1, 4.0);
|
| + var smi = 12;
|
| +
|
| + for (int i = 0; i < 20; i++) {
|
| + testComparison(a, b);
|
| + }
|
| +
|
| + try {
|
| + testComparison(a, smi);
|
| + } catch (_) {
|
| + }
|
| +
|
| + for (int i = 0; i < 20; i++) {
|
| + testComparison(a, b);
|
| + }
|
| +
|
| + try {
|
| + testComparison(smi, a);
|
| + } catch (_) {
|
| + }
|
| +
|
| + for (int i = 0; i < 20; i++) {
|
| + testComparison(a, b);
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + testListStoreDeopt();
|
| + testAddDeopt();
|
| + testGetDeopt();
|
| + testComparisonDeopt();
|
| +}
|
|
|