| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/cpu.h" |
| 9 #include "vm/os.h" | 10 #include "vm/os.h" |
| 10 #include "vm/unit_test.h" | 11 #include "vm/unit_test.h" |
| 11 #include "vm/virtual_memory.h" | 12 #include "vm/virtual_memory.h" |
| 12 | 13 |
| 13 namespace dart { | 14 namespace dart { |
| 14 | 15 |
| 15 #define __ assembler-> | 16 #define __ assembler-> |
| 16 | 17 |
| 17 | 18 |
| 18 ASSEMBLER_TEST_GENERATE(Simple, assembler) { | 19 ASSEMBLER_TEST_GENERATE(Simple, assembler) { |
| (...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 | 1451 |
| 1451 | 1452 |
| 1452 ASSEMBLER_TEST_RUN(VstmsVldms_off, test) { | 1453 ASSEMBLER_TEST_RUN(VstmsVldms_off, test) { |
| 1453 EXPECT(test != NULL); | 1454 EXPECT(test != NULL); |
| 1454 typedef int (*Tst)(); | 1455 typedef int (*Tst)(); |
| 1455 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1456 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1456 } | 1457 } |
| 1457 | 1458 |
| 1458 | 1459 |
| 1459 ASSEMBLER_TEST_GENERATE(Udiv, assembler) { | 1460 ASSEMBLER_TEST_GENERATE(Udiv, assembler) { |
| 1460 if (CPUFeatures::integer_division_supported()) { | 1461 if (TargetCPUFeatures::integer_division_supported()) { |
| 1461 __ mov(R0, ShifterOperand(27)); | 1462 __ mov(R0, ShifterOperand(27)); |
| 1462 __ mov(R1, ShifterOperand(9)); | 1463 __ mov(R1, ShifterOperand(9)); |
| 1463 __ udiv(R2, R0, R1); | 1464 __ udiv(R2, R0, R1); |
| 1464 __ mov(R0, ShifterOperand(R2)); | 1465 __ mov(R0, ShifterOperand(R2)); |
| 1465 } else { | 1466 } else { |
| 1466 __ mov(R0, ShifterOperand(3)); | 1467 __ mov(R0, ShifterOperand(3)); |
| 1467 } | 1468 } |
| 1468 __ bx(LR); | 1469 __ bx(LR); |
| 1469 } | 1470 } |
| 1470 | 1471 |
| 1471 | 1472 |
| 1472 ASSEMBLER_TEST_RUN(Udiv, test) { | 1473 ASSEMBLER_TEST_RUN(Udiv, test) { |
| 1473 EXPECT(test != NULL); | 1474 EXPECT(test != NULL); |
| 1474 typedef int (*Tst)(); | 1475 typedef int (*Tst)(); |
| 1475 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1476 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1476 } | 1477 } |
| 1477 | 1478 |
| 1478 | 1479 |
| 1479 ASSEMBLER_TEST_GENERATE(Sdiv, assembler) { | 1480 ASSEMBLER_TEST_GENERATE(Sdiv, assembler) { |
| 1480 if (CPUFeatures::integer_division_supported()) { | 1481 if (TargetCPUFeatures::integer_division_supported()) { |
| 1481 __ mov(R0, ShifterOperand(27)); | 1482 __ mov(R0, ShifterOperand(27)); |
| 1482 __ LoadImmediate(R1, -9); | 1483 __ LoadImmediate(R1, -9); |
| 1483 __ sdiv(R2, R0, R1); | 1484 __ sdiv(R2, R0, R1); |
| 1484 __ mov(R0, ShifterOperand(R2)); | 1485 __ mov(R0, ShifterOperand(R2)); |
| 1485 } else { | 1486 } else { |
| 1486 __ LoadImmediate(R0, -3); | 1487 __ LoadImmediate(R0, -3); |
| 1487 } | 1488 } |
| 1488 __ bx(LR); | 1489 __ bx(LR); |
| 1489 } | 1490 } |
| 1490 | 1491 |
| 1491 | 1492 |
| 1492 ASSEMBLER_TEST_RUN(Sdiv, test) { | 1493 ASSEMBLER_TEST_RUN(Sdiv, test) { |
| 1493 EXPECT(test != NULL); | 1494 EXPECT(test != NULL); |
| 1494 typedef int (*Tst)(); | 1495 typedef int (*Tst)(); |
| 1495 EXPECT_EQ(-3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1496 EXPECT_EQ(-3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1496 } | 1497 } |
| 1497 | 1498 |
| 1498 | 1499 |
| 1499 ASSEMBLER_TEST_GENERATE(Udiv_zero, assembler) { | 1500 ASSEMBLER_TEST_GENERATE(Udiv_zero, assembler) { |
| 1500 if (CPUFeatures::integer_division_supported()) { | 1501 if (TargetCPUFeatures::integer_division_supported()) { |
| 1501 __ mov(R0, ShifterOperand(27)); | 1502 __ mov(R0, ShifterOperand(27)); |
| 1502 __ mov(R1, ShifterOperand(0)); | 1503 __ mov(R1, ShifterOperand(0)); |
| 1503 __ udiv(R2, R0, R1); | 1504 __ udiv(R2, R0, R1); |
| 1504 __ mov(R0, ShifterOperand(R2)); | 1505 __ mov(R0, ShifterOperand(R2)); |
| 1505 } else { | 1506 } else { |
| 1506 __ LoadImmediate(R0, 0); | 1507 __ LoadImmediate(R0, 0); |
| 1507 } | 1508 } |
| 1508 __ bx(LR); | 1509 __ bx(LR); |
| 1509 } | 1510 } |
| 1510 | 1511 |
| 1511 | 1512 |
| 1512 ASSEMBLER_TEST_RUN(Udiv_zero, test) { | 1513 ASSEMBLER_TEST_RUN(Udiv_zero, test) { |
| 1513 EXPECT(test != NULL); | 1514 EXPECT(test != NULL); |
| 1514 typedef int (*Tst)(); | 1515 typedef int (*Tst)(); |
| 1515 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1516 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1516 } | 1517 } |
| 1517 | 1518 |
| 1518 | 1519 |
| 1519 ASSEMBLER_TEST_GENERATE(Sdiv_zero, assembler) { | 1520 ASSEMBLER_TEST_GENERATE(Sdiv_zero, assembler) { |
| 1520 if (CPUFeatures::integer_division_supported()) { | 1521 if (TargetCPUFeatures::integer_division_supported()) { |
| 1521 __ mov(R0, ShifterOperand(27)); | 1522 __ mov(R0, ShifterOperand(27)); |
| 1522 __ mov(R1, ShifterOperand(0)); | 1523 __ mov(R1, ShifterOperand(0)); |
| 1523 __ udiv(R2, R0, R1); | 1524 __ udiv(R2, R0, R1); |
| 1524 __ mov(R0, ShifterOperand(R2)); | 1525 __ mov(R0, ShifterOperand(R2)); |
| 1525 } else { | 1526 } else { |
| 1526 __ LoadImmediate(R0, 0); | 1527 __ LoadImmediate(R0, 0); |
| 1527 } | 1528 } |
| 1528 __ bx(LR); | 1529 __ bx(LR); |
| 1529 } | 1530 } |
| 1530 | 1531 |
| 1531 | 1532 |
| 1532 ASSEMBLER_TEST_RUN(Sdiv_zero, test) { | 1533 ASSEMBLER_TEST_RUN(Sdiv_zero, test) { |
| 1533 EXPECT(test != NULL); | 1534 EXPECT(test != NULL); |
| 1534 typedef int (*Tst)(); | 1535 typedef int (*Tst)(); |
| 1535 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1536 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1536 } | 1537 } |
| 1537 | 1538 |
| 1538 | 1539 |
| 1539 ASSEMBLER_TEST_GENERATE(Udiv_corner, assembler) { | 1540 ASSEMBLER_TEST_GENERATE(Udiv_corner, assembler) { |
| 1540 if (CPUFeatures::integer_division_supported()) { | 1541 if (TargetCPUFeatures::integer_division_supported()) { |
| 1541 __ LoadImmediate(R0, 0x80000000); | 1542 __ LoadImmediate(R0, 0x80000000); |
| 1542 __ LoadImmediate(R1, 0xffffffff); | 1543 __ LoadImmediate(R1, 0xffffffff); |
| 1543 __ udiv(R2, R0, R1); | 1544 __ udiv(R2, R0, R1); |
| 1544 __ mov(R0, ShifterOperand(R2)); | 1545 __ mov(R0, ShifterOperand(R2)); |
| 1545 } else { | 1546 } else { |
| 1546 __ LoadImmediate(R0, 0); | 1547 __ LoadImmediate(R0, 0); |
| 1547 } | 1548 } |
| 1548 __ bx(LR); | 1549 __ bx(LR); |
| 1549 } | 1550 } |
| 1550 | 1551 |
| 1551 | 1552 |
| 1552 ASSEMBLER_TEST_RUN(Udiv_corner, test) { | 1553 ASSEMBLER_TEST_RUN(Udiv_corner, test) { |
| 1553 EXPECT(test != NULL); | 1554 EXPECT(test != NULL); |
| 1554 typedef int (*Tst)(); | 1555 typedef int (*Tst)(); |
| 1555 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1556 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1556 } | 1557 } |
| 1557 | 1558 |
| 1558 | 1559 |
| 1559 ASSEMBLER_TEST_GENERATE(Sdiv_corner, assembler) { | 1560 ASSEMBLER_TEST_GENERATE(Sdiv_corner, assembler) { |
| 1560 if (CPUFeatures::integer_division_supported()) { | 1561 if (TargetCPUFeatures::integer_division_supported()) { |
| 1561 __ LoadImmediate(R0, 0x80000000); | 1562 __ LoadImmediate(R0, 0x80000000); |
| 1562 __ LoadImmediate(R1, 0xffffffff); | 1563 __ LoadImmediate(R1, 0xffffffff); |
| 1563 __ sdiv(R2, R0, R1); | 1564 __ sdiv(R2, R0, R1); |
| 1564 __ mov(R0, ShifterOperand(R2)); | 1565 __ mov(R0, ShifterOperand(R2)); |
| 1565 } else { | 1566 } else { |
| 1566 __ LoadImmediate(R0, 0x80000000); | 1567 __ LoadImmediate(R0, 0x80000000); |
| 1567 } | 1568 } |
| 1568 __ bx(LR); | 1569 __ bx(LR); |
| 1569 } | 1570 } |
| 1570 | 1571 |
| 1571 | 1572 |
| 1572 ASSEMBLER_TEST_RUN(Sdiv_corner, test) { | 1573 ASSEMBLER_TEST_RUN(Sdiv_corner, test) { |
| 1573 EXPECT(test != NULL); | 1574 EXPECT(test != NULL); |
| 1574 typedef int (*Tst)(); | 1575 typedef int (*Tst)(); |
| 1575 EXPECT_EQ(static_cast<int32_t>(0x80000000), | 1576 EXPECT_EQ(static_cast<int32_t>(0x80000000), |
| 1576 EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1577 EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1577 } | 1578 } |
| 1578 | 1579 |
| 1579 | 1580 |
| 1580 ASSEMBLER_TEST_GENERATE(IntDiv_supported, assembler) { | 1581 ASSEMBLER_TEST_GENERATE(IntDiv_supported, assembler) { |
| 1581 #if defined(USING_SIMULATOR) | 1582 #if defined(USING_SIMULATOR) |
| 1582 bool orig = CPUFeatures::integer_division_supported(); | 1583 bool orig = TargetCPUFeatures::integer_division_supported(); |
| 1583 CPUFeatures::set_integer_division_supported(true); | 1584 HostCPUFeatures::set_integer_division_supported(true); |
| 1584 __ mov(R0, ShifterOperand(27)); | 1585 __ mov(R0, ShifterOperand(27)); |
| 1585 __ mov(R1, ShifterOperand(9)); | 1586 __ mov(R1, ShifterOperand(9)); |
| 1586 __ IntegerDivide(R0, R0, R1, D0, D1); | 1587 __ IntegerDivide(R0, R0, R1, D0, D1); |
| 1587 CPUFeatures::set_integer_division_supported(orig); | 1588 HostCPUFeatures::set_integer_division_supported(orig); |
| 1588 __ bx(LR); | 1589 __ bx(LR); |
| 1589 #else | 1590 #else |
| 1590 __ mov(R0, ShifterOperand(27)); | 1591 __ mov(R0, ShifterOperand(27)); |
| 1591 __ mov(R1, ShifterOperand(9)); | 1592 __ mov(R1, ShifterOperand(9)); |
| 1592 __ IntegerDivide(R0, R0, R1, D0, D1); | 1593 __ IntegerDivide(R0, R0, R1, D0, D1); |
| 1593 __ bx(LR); | 1594 __ bx(LR); |
| 1594 #endif | 1595 #endif |
| 1595 } | 1596 } |
| 1596 | 1597 |
| 1597 | 1598 |
| 1598 ASSEMBLER_TEST_RUN(IntDiv_supported, test) { | 1599 ASSEMBLER_TEST_RUN(IntDiv_supported, test) { |
| 1599 EXPECT(test != NULL); | 1600 EXPECT(test != NULL); |
| 1600 typedef int (*Tst)(); | 1601 typedef int (*Tst)(); |
| 1601 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1602 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1602 } | 1603 } |
| 1603 | 1604 |
| 1604 | 1605 |
| 1605 ASSEMBLER_TEST_GENERATE(IntDiv_unsupported, assembler) { | 1606 ASSEMBLER_TEST_GENERATE(IntDiv_unsupported, assembler) { |
| 1606 #if defined(USING_SIMULATOR) | 1607 #if defined(USING_SIMULATOR) |
| 1607 bool orig = CPUFeatures::integer_division_supported(); | 1608 bool orig = TargetCPUFeatures::integer_division_supported(); |
| 1608 CPUFeatures::set_integer_division_supported(false); | 1609 HostCPUFeatures::set_integer_division_supported(false); |
| 1609 __ mov(R0, ShifterOperand(27)); | 1610 __ mov(R0, ShifterOperand(27)); |
| 1610 __ mov(R1, ShifterOperand(9)); | 1611 __ mov(R1, ShifterOperand(9)); |
| 1611 __ IntegerDivide(R0, R0, R1, D0, D1); | 1612 __ IntegerDivide(R0, R0, R1, D0, D1); |
| 1612 CPUFeatures::set_integer_division_supported(orig); | 1613 HostCPUFeatures::set_integer_division_supported(orig); |
| 1613 __ bx(LR); | 1614 __ bx(LR); |
| 1614 #else | 1615 #else |
| 1615 __ mov(R0, ShifterOperand(27)); | 1616 __ mov(R0, ShifterOperand(27)); |
| 1616 __ mov(R1, ShifterOperand(9)); | 1617 __ mov(R1, ShifterOperand(9)); |
| 1617 __ IntegerDivide(R0, R0, R1, D0, D1); | 1618 __ IntegerDivide(R0, R0, R1, D0, D1); |
| 1618 __ bx(LR); | 1619 __ bx(LR); |
| 1619 #endif | 1620 #endif |
| 1620 } | 1621 } |
| 1621 | 1622 |
| 1622 | 1623 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1637 | 1638 |
| 1638 | 1639 |
| 1639 ASSEMBLER_TEST_RUN(Muls, test) { | 1640 ASSEMBLER_TEST_RUN(Muls, test) { |
| 1640 EXPECT(test != NULL); | 1641 EXPECT(test != NULL); |
| 1641 typedef int (*Tst)(); | 1642 typedef int (*Tst)(); |
| 1642 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1643 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1643 } | 1644 } |
| 1644 | 1645 |
| 1645 | 1646 |
| 1646 ASSEMBLER_TEST_GENERATE(Vaddqi8, assembler) { | 1647 ASSEMBLER_TEST_GENERATE(Vaddqi8, assembler) { |
| 1647 if (CPUFeatures::neon_supported()) { | 1648 if (TargetCPUFeatures::neon_supported()) { |
| 1648 __ mov(R0, ShifterOperand(1)); | 1649 __ mov(R0, ShifterOperand(1)); |
| 1649 __ vmovsr(S0, R0); | 1650 __ vmovsr(S0, R0); |
| 1650 __ mov(R0, ShifterOperand(2)); | 1651 __ mov(R0, ShifterOperand(2)); |
| 1651 __ vmovsr(S1, R0); | 1652 __ vmovsr(S1, R0); |
| 1652 __ mov(R0, ShifterOperand(3)); | 1653 __ mov(R0, ShifterOperand(3)); |
| 1653 __ vmovsr(S2, R0); | 1654 __ vmovsr(S2, R0); |
| 1654 __ mov(R0, ShifterOperand(4)); | 1655 __ mov(R0, ShifterOperand(4)); |
| 1655 __ vmovsr(S3, R0); | 1656 __ vmovsr(S3, R0); |
| 1656 __ mov(R0, ShifterOperand(5)); | 1657 __ mov(R0, ShifterOperand(5)); |
| 1657 __ vmovsr(S4, R0); | 1658 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1681 | 1682 |
| 1682 | 1683 |
| 1683 ASSEMBLER_TEST_RUN(Vaddqi8, test) { | 1684 ASSEMBLER_TEST_RUN(Vaddqi8, test) { |
| 1684 EXPECT(test != NULL); | 1685 EXPECT(test != NULL); |
| 1685 typedef int (*Tst)(); | 1686 typedef int (*Tst)(); |
| 1686 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1687 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1687 } | 1688 } |
| 1688 | 1689 |
| 1689 | 1690 |
| 1690 ASSEMBLER_TEST_GENERATE(Vaddqi16, assembler) { | 1691 ASSEMBLER_TEST_GENERATE(Vaddqi16, assembler) { |
| 1691 if (CPUFeatures::neon_supported()) { | 1692 if (TargetCPUFeatures::neon_supported()) { |
| 1692 __ mov(R0, ShifterOperand(1)); | 1693 __ mov(R0, ShifterOperand(1)); |
| 1693 __ vmovsr(S0, R0); | 1694 __ vmovsr(S0, R0); |
| 1694 __ mov(R0, ShifterOperand(2)); | 1695 __ mov(R0, ShifterOperand(2)); |
| 1695 __ vmovsr(S1, R0); | 1696 __ vmovsr(S1, R0); |
| 1696 __ mov(R0, ShifterOperand(3)); | 1697 __ mov(R0, ShifterOperand(3)); |
| 1697 __ vmovsr(S2, R0); | 1698 __ vmovsr(S2, R0); |
| 1698 __ mov(R0, ShifterOperand(4)); | 1699 __ mov(R0, ShifterOperand(4)); |
| 1699 __ vmovsr(S3, R0); | 1700 __ vmovsr(S3, R0); |
| 1700 __ mov(R0, ShifterOperand(5)); | 1701 __ mov(R0, ShifterOperand(5)); |
| 1701 __ vmovsr(S4, R0); | 1702 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1725 | 1726 |
| 1726 | 1727 |
| 1727 ASSEMBLER_TEST_RUN(Vaddqi16, test) { | 1728 ASSEMBLER_TEST_RUN(Vaddqi16, test) { |
| 1728 EXPECT(test != NULL); | 1729 EXPECT(test != NULL); |
| 1729 typedef int (*Tst)(); | 1730 typedef int (*Tst)(); |
| 1730 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1731 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1731 } | 1732 } |
| 1732 | 1733 |
| 1733 | 1734 |
| 1734 ASSEMBLER_TEST_GENERATE(Vaddqi32, assembler) { | 1735 ASSEMBLER_TEST_GENERATE(Vaddqi32, assembler) { |
| 1735 if (CPUFeatures::neon_supported()) { | 1736 if (TargetCPUFeatures::neon_supported()) { |
| 1736 __ mov(R0, ShifterOperand(1)); | 1737 __ mov(R0, ShifterOperand(1)); |
| 1737 __ vmovsr(S0, R0); | 1738 __ vmovsr(S0, R0); |
| 1738 __ mov(R0, ShifterOperand(2)); | 1739 __ mov(R0, ShifterOperand(2)); |
| 1739 __ vmovsr(S1, R0); | 1740 __ vmovsr(S1, R0); |
| 1740 __ mov(R0, ShifterOperand(3)); | 1741 __ mov(R0, ShifterOperand(3)); |
| 1741 __ vmovsr(S2, R0); | 1742 __ vmovsr(S2, R0); |
| 1742 __ mov(R0, ShifterOperand(4)); | 1743 __ mov(R0, ShifterOperand(4)); |
| 1743 __ vmovsr(S3, R0); | 1744 __ vmovsr(S3, R0); |
| 1744 __ mov(R0, ShifterOperand(5)); | 1745 __ mov(R0, ShifterOperand(5)); |
| 1745 __ vmovsr(S4, R0); | 1746 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1769 | 1770 |
| 1770 | 1771 |
| 1771 ASSEMBLER_TEST_RUN(Vaddqi32, test) { | 1772 ASSEMBLER_TEST_RUN(Vaddqi32, test) { |
| 1772 EXPECT(test != NULL); | 1773 EXPECT(test != NULL); |
| 1773 typedef int (*Tst)(); | 1774 typedef int (*Tst)(); |
| 1774 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1775 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1775 } | 1776 } |
| 1776 | 1777 |
| 1777 | 1778 |
| 1778 ASSEMBLER_TEST_GENERATE(Vaddqi64, assembler) { | 1779 ASSEMBLER_TEST_GENERATE(Vaddqi64, assembler) { |
| 1779 if (CPUFeatures::neon_supported()) { | 1780 if (TargetCPUFeatures::neon_supported()) { |
| 1780 __ mov(R0, ShifterOperand(1)); | 1781 __ mov(R0, ShifterOperand(1)); |
| 1781 __ vmovsr(S0, R0); | 1782 __ vmovsr(S0, R0); |
| 1782 __ mov(R0, ShifterOperand(2)); | 1783 __ mov(R0, ShifterOperand(2)); |
| 1783 __ vmovsr(S2, R0); | 1784 __ vmovsr(S2, R0); |
| 1784 __ mov(R0, ShifterOperand(3)); | 1785 __ mov(R0, ShifterOperand(3)); |
| 1785 __ vmovsr(S4, R0); | 1786 __ vmovsr(S4, R0); |
| 1786 __ mov(R0, ShifterOperand(4)); | 1787 __ mov(R0, ShifterOperand(4)); |
| 1787 __ vmovsr(S6, R0); | 1788 __ vmovsr(S6, R0); |
| 1788 | 1789 |
| 1789 __ vaddqi(kWordPair, Q2, Q0, Q1); | 1790 __ vaddqi(kWordPair, Q2, Q0, Q1); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1801 | 1802 |
| 1802 | 1803 |
| 1803 ASSEMBLER_TEST_RUN(Vaddqi64, test) { | 1804 ASSEMBLER_TEST_RUN(Vaddqi64, test) { |
| 1804 EXPECT(test != NULL); | 1805 EXPECT(test != NULL); |
| 1805 typedef int (*Tst)(); | 1806 typedef int (*Tst)(); |
| 1806 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1807 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1807 } | 1808 } |
| 1808 | 1809 |
| 1809 | 1810 |
| 1810 ASSEMBLER_TEST_GENERATE(Vsubqi8, assembler) { | 1811 ASSEMBLER_TEST_GENERATE(Vsubqi8, assembler) { |
| 1811 if (CPUFeatures::neon_supported()) { | 1812 if (TargetCPUFeatures::neon_supported()) { |
| 1812 __ mov(R0, ShifterOperand(1)); | 1813 __ mov(R0, ShifterOperand(1)); |
| 1813 __ vmovsr(S0, R0); | 1814 __ vmovsr(S0, R0); |
| 1814 __ mov(R0, ShifterOperand(2)); | 1815 __ mov(R0, ShifterOperand(2)); |
| 1815 __ vmovsr(S1, R0); | 1816 __ vmovsr(S1, R0); |
| 1816 __ mov(R0, ShifterOperand(3)); | 1817 __ mov(R0, ShifterOperand(3)); |
| 1817 __ vmovsr(S2, R0); | 1818 __ vmovsr(S2, R0); |
| 1818 __ mov(R0, ShifterOperand(4)); | 1819 __ mov(R0, ShifterOperand(4)); |
| 1819 __ vmovsr(S3, R0); | 1820 __ vmovsr(S3, R0); |
| 1820 __ mov(R0, ShifterOperand(2)); | 1821 __ mov(R0, ShifterOperand(2)); |
| 1821 __ vmovsr(S4, R0); | 1822 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1845 | 1846 |
| 1846 | 1847 |
| 1847 ASSEMBLER_TEST_RUN(Vsubqi8, test) { | 1848 ASSEMBLER_TEST_RUN(Vsubqi8, test) { |
| 1848 EXPECT(test != NULL); | 1849 EXPECT(test != NULL); |
| 1849 typedef int (*Tst)(); | 1850 typedef int (*Tst)(); |
| 1850 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1851 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1851 } | 1852 } |
| 1852 | 1853 |
| 1853 | 1854 |
| 1854 ASSEMBLER_TEST_GENERATE(Vsubqi16, assembler) { | 1855 ASSEMBLER_TEST_GENERATE(Vsubqi16, assembler) { |
| 1855 if (CPUFeatures::neon_supported()) { | 1856 if (TargetCPUFeatures::neon_supported()) { |
| 1856 __ mov(R0, ShifterOperand(1)); | 1857 __ mov(R0, ShifterOperand(1)); |
| 1857 __ vmovsr(S0, R0); | 1858 __ vmovsr(S0, R0); |
| 1858 __ mov(R0, ShifterOperand(2)); | 1859 __ mov(R0, ShifterOperand(2)); |
| 1859 __ vmovsr(S1, R0); | 1860 __ vmovsr(S1, R0); |
| 1860 __ mov(R0, ShifterOperand(3)); | 1861 __ mov(R0, ShifterOperand(3)); |
| 1861 __ vmovsr(S2, R0); | 1862 __ vmovsr(S2, R0); |
| 1862 __ mov(R0, ShifterOperand(4)); | 1863 __ mov(R0, ShifterOperand(4)); |
| 1863 __ vmovsr(S3, R0); | 1864 __ vmovsr(S3, R0); |
| 1864 __ mov(R0, ShifterOperand(2)); | 1865 __ mov(R0, ShifterOperand(2)); |
| 1865 __ vmovsr(S4, R0); | 1866 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1889 | 1890 |
| 1890 | 1891 |
| 1891 ASSEMBLER_TEST_RUN(Vsubqi16, test) { | 1892 ASSEMBLER_TEST_RUN(Vsubqi16, test) { |
| 1892 EXPECT(test != NULL); | 1893 EXPECT(test != NULL); |
| 1893 typedef int (*Tst)(); | 1894 typedef int (*Tst)(); |
| 1894 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1895 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1895 } | 1896 } |
| 1896 | 1897 |
| 1897 | 1898 |
| 1898 ASSEMBLER_TEST_GENERATE(Vsubqi32, assembler) { | 1899 ASSEMBLER_TEST_GENERATE(Vsubqi32, assembler) { |
| 1899 if (CPUFeatures::neon_supported()) { | 1900 if (TargetCPUFeatures::neon_supported()) { |
| 1900 __ mov(R0, ShifterOperand(1)); | 1901 __ mov(R0, ShifterOperand(1)); |
| 1901 __ vmovsr(S0, R0); | 1902 __ vmovsr(S0, R0); |
| 1902 __ mov(R0, ShifterOperand(2)); | 1903 __ mov(R0, ShifterOperand(2)); |
| 1903 __ vmovsr(S1, R0); | 1904 __ vmovsr(S1, R0); |
| 1904 __ mov(R0, ShifterOperand(3)); | 1905 __ mov(R0, ShifterOperand(3)); |
| 1905 __ vmovsr(S2, R0); | 1906 __ vmovsr(S2, R0); |
| 1906 __ mov(R0, ShifterOperand(4)); | 1907 __ mov(R0, ShifterOperand(4)); |
| 1907 __ vmovsr(S3, R0); | 1908 __ vmovsr(S3, R0); |
| 1908 __ mov(R0, ShifterOperand(2)); | 1909 __ mov(R0, ShifterOperand(2)); |
| 1909 __ vmovsr(S4, R0); | 1910 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1933 | 1934 |
| 1934 | 1935 |
| 1935 ASSEMBLER_TEST_RUN(Vsubqi32, test) { | 1936 ASSEMBLER_TEST_RUN(Vsubqi32, test) { |
| 1936 EXPECT(test != NULL); | 1937 EXPECT(test != NULL); |
| 1937 typedef int (*Tst)(); | 1938 typedef int (*Tst)(); |
| 1938 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1939 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1939 } | 1940 } |
| 1940 | 1941 |
| 1941 | 1942 |
| 1942 ASSEMBLER_TEST_GENERATE(Vsubqi64, assembler) { | 1943 ASSEMBLER_TEST_GENERATE(Vsubqi64, assembler) { |
| 1943 if (CPUFeatures::neon_supported()) { | 1944 if (TargetCPUFeatures::neon_supported()) { |
| 1944 __ mov(R0, ShifterOperand(1)); | 1945 __ mov(R0, ShifterOperand(1)); |
| 1945 __ vmovsr(S0, R0); | 1946 __ vmovsr(S0, R0); |
| 1946 __ mov(R0, ShifterOperand(2)); | 1947 __ mov(R0, ShifterOperand(2)); |
| 1947 __ vmovsr(S2, R0); | 1948 __ vmovsr(S2, R0); |
| 1948 __ mov(R0, ShifterOperand(2)); | 1949 __ mov(R0, ShifterOperand(2)); |
| 1949 __ vmovsr(S4, R0); | 1950 __ vmovsr(S4, R0); |
| 1950 __ mov(R0, ShifterOperand(4)); | 1951 __ mov(R0, ShifterOperand(4)); |
| 1951 __ vmovsr(S6, R0); | 1952 __ vmovsr(S6, R0); |
| 1952 | 1953 |
| 1953 __ vsubqi(kWordPair, Q2, Q1, Q0); | 1954 __ vsubqi(kWordPair, Q2, Q1, Q0); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1965 | 1966 |
| 1966 | 1967 |
| 1967 ASSEMBLER_TEST_RUN(Vsubqi64, test) { | 1968 ASSEMBLER_TEST_RUN(Vsubqi64, test) { |
| 1968 EXPECT(test != NULL); | 1969 EXPECT(test != NULL); |
| 1969 typedef int (*Tst)(); | 1970 typedef int (*Tst)(); |
| 1970 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 1971 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 1971 } | 1972 } |
| 1972 | 1973 |
| 1973 | 1974 |
| 1974 ASSEMBLER_TEST_GENERATE(Vmulqi8, assembler) { | 1975 ASSEMBLER_TEST_GENERATE(Vmulqi8, assembler) { |
| 1975 if (CPUFeatures::neon_supported()) { | 1976 if (TargetCPUFeatures::neon_supported()) { |
| 1976 __ mov(R0, ShifterOperand(1)); | 1977 __ mov(R0, ShifterOperand(1)); |
| 1977 __ vmovsr(S0, R0); | 1978 __ vmovsr(S0, R0); |
| 1978 __ mov(R0, ShifterOperand(2)); | 1979 __ mov(R0, ShifterOperand(2)); |
| 1979 __ vmovsr(S1, R0); | 1980 __ vmovsr(S1, R0); |
| 1980 __ mov(R0, ShifterOperand(3)); | 1981 __ mov(R0, ShifterOperand(3)); |
| 1981 __ vmovsr(S2, R0); | 1982 __ vmovsr(S2, R0); |
| 1982 __ mov(R0, ShifterOperand(4)); | 1983 __ mov(R0, ShifterOperand(4)); |
| 1983 __ vmovsr(S3, R0); | 1984 __ vmovsr(S3, R0); |
| 1984 __ mov(R0, ShifterOperand(5)); | 1985 __ mov(R0, ShifterOperand(5)); |
| 1985 __ vmovsr(S4, R0); | 1986 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2009 | 2010 |
| 2010 | 2011 |
| 2011 ASSEMBLER_TEST_RUN(Vmulqi8, test) { | 2012 ASSEMBLER_TEST_RUN(Vmulqi8, test) { |
| 2012 EXPECT(test != NULL); | 2013 EXPECT(test != NULL); |
| 2013 typedef int (*Tst)(); | 2014 typedef int (*Tst)(); |
| 2014 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2015 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2015 } | 2016 } |
| 2016 | 2017 |
| 2017 | 2018 |
| 2018 ASSEMBLER_TEST_GENERATE(Vmulqi16, assembler) { | 2019 ASSEMBLER_TEST_GENERATE(Vmulqi16, assembler) { |
| 2019 if (CPUFeatures::neon_supported()) { | 2020 if (TargetCPUFeatures::neon_supported()) { |
| 2020 __ mov(R0, ShifterOperand(1)); | 2021 __ mov(R0, ShifterOperand(1)); |
| 2021 __ vmovsr(S0, R0); | 2022 __ vmovsr(S0, R0); |
| 2022 __ mov(R0, ShifterOperand(2)); | 2023 __ mov(R0, ShifterOperand(2)); |
| 2023 __ vmovsr(S1, R0); | 2024 __ vmovsr(S1, R0); |
| 2024 __ mov(R0, ShifterOperand(3)); | 2025 __ mov(R0, ShifterOperand(3)); |
| 2025 __ vmovsr(S2, R0); | 2026 __ vmovsr(S2, R0); |
| 2026 __ mov(R0, ShifterOperand(4)); | 2027 __ mov(R0, ShifterOperand(4)); |
| 2027 __ vmovsr(S3, R0); | 2028 __ vmovsr(S3, R0); |
| 2028 __ mov(R0, ShifterOperand(5)); | 2029 __ mov(R0, ShifterOperand(5)); |
| 2029 __ vmovsr(S4, R0); | 2030 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2053 | 2054 |
| 2054 | 2055 |
| 2055 ASSEMBLER_TEST_RUN(Vmulqi16, test) { | 2056 ASSEMBLER_TEST_RUN(Vmulqi16, test) { |
| 2056 EXPECT(test != NULL); | 2057 EXPECT(test != NULL); |
| 2057 typedef int (*Tst)(); | 2058 typedef int (*Tst)(); |
| 2058 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2059 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2059 } | 2060 } |
| 2060 | 2061 |
| 2061 | 2062 |
| 2062 ASSEMBLER_TEST_GENERATE(Vmulqi32, assembler) { | 2063 ASSEMBLER_TEST_GENERATE(Vmulqi32, assembler) { |
| 2063 if (CPUFeatures::neon_supported()) { | 2064 if (TargetCPUFeatures::neon_supported()) { |
| 2064 __ mov(R0, ShifterOperand(1)); | 2065 __ mov(R0, ShifterOperand(1)); |
| 2065 __ vmovsr(S0, R0); | 2066 __ vmovsr(S0, R0); |
| 2066 __ mov(R0, ShifterOperand(2)); | 2067 __ mov(R0, ShifterOperand(2)); |
| 2067 __ vmovsr(S1, R0); | 2068 __ vmovsr(S1, R0); |
| 2068 __ mov(R0, ShifterOperand(3)); | 2069 __ mov(R0, ShifterOperand(3)); |
| 2069 __ vmovsr(S2, R0); | 2070 __ vmovsr(S2, R0); |
| 2070 __ mov(R0, ShifterOperand(4)); | 2071 __ mov(R0, ShifterOperand(4)); |
| 2071 __ vmovsr(S3, R0); | 2072 __ vmovsr(S3, R0); |
| 2072 __ mov(R0, ShifterOperand(5)); | 2073 __ mov(R0, ShifterOperand(5)); |
| 2073 __ vmovsr(S4, R0); | 2074 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2097 | 2098 |
| 2098 | 2099 |
| 2099 ASSEMBLER_TEST_RUN(Vmulqi32, test) { | 2100 ASSEMBLER_TEST_RUN(Vmulqi32, test) { |
| 2100 EXPECT(test != NULL); | 2101 EXPECT(test != NULL); |
| 2101 typedef int (*Tst)(); | 2102 typedef int (*Tst)(); |
| 2102 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2103 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2103 } | 2104 } |
| 2104 | 2105 |
| 2105 | 2106 |
| 2106 ASSEMBLER_TEST_GENERATE(Vaddqs, assembler) { | 2107 ASSEMBLER_TEST_GENERATE(Vaddqs, assembler) { |
| 2107 if (CPUFeatures::neon_supported()) { | 2108 if (TargetCPUFeatures::neon_supported()) { |
| 2108 __ LoadSImmediate(S0, 1.0); | 2109 __ LoadSImmediate(S0, 1.0); |
| 2109 __ LoadSImmediate(S1, 2.0); | 2110 __ LoadSImmediate(S1, 2.0); |
| 2110 __ LoadSImmediate(S2, 3.0); | 2111 __ LoadSImmediate(S2, 3.0); |
| 2111 __ LoadSImmediate(S3, 4.0); | 2112 __ LoadSImmediate(S3, 4.0); |
| 2112 __ LoadSImmediate(S4, 5.0); | 2113 __ LoadSImmediate(S4, 5.0); |
| 2113 __ LoadSImmediate(S5, 6.0); | 2114 __ LoadSImmediate(S5, 6.0); |
| 2114 __ LoadSImmediate(S6, 7.0); | 2115 __ LoadSImmediate(S6, 7.0); |
| 2115 __ LoadSImmediate(S7, 8.0); | 2116 __ LoadSImmediate(S7, 8.0); |
| 2116 | 2117 |
| 2117 __ vaddqs(Q2, Q0, Q1); | 2118 __ vaddqs(Q2, Q0, Q1); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2132 | 2133 |
| 2133 | 2134 |
| 2134 ASSEMBLER_TEST_RUN(Vaddqs, test) { | 2135 ASSEMBLER_TEST_RUN(Vaddqs, test) { |
| 2135 EXPECT(test != NULL); | 2136 EXPECT(test != NULL); |
| 2136 typedef int (*Tst)(); | 2137 typedef int (*Tst)(); |
| 2137 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2138 EXPECT_EQ(36, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2138 } | 2139 } |
| 2139 | 2140 |
| 2140 | 2141 |
| 2141 ASSEMBLER_TEST_GENERATE(Vsubqs, assembler) { | 2142 ASSEMBLER_TEST_GENERATE(Vsubqs, assembler) { |
| 2142 if (CPUFeatures::neon_supported()) { | 2143 if (TargetCPUFeatures::neon_supported()) { |
| 2143 __ LoadSImmediate(S0, 1.0); | 2144 __ LoadSImmediate(S0, 1.0); |
| 2144 __ LoadSImmediate(S1, 2.0); | 2145 __ LoadSImmediate(S1, 2.0); |
| 2145 __ LoadSImmediate(S2, 3.0); | 2146 __ LoadSImmediate(S2, 3.0); |
| 2146 __ LoadSImmediate(S3, 4.0); | 2147 __ LoadSImmediate(S3, 4.0); |
| 2147 __ LoadSImmediate(S4, 2.0); | 2148 __ LoadSImmediate(S4, 2.0); |
| 2148 __ LoadSImmediate(S5, 4.0); | 2149 __ LoadSImmediate(S5, 4.0); |
| 2149 __ LoadSImmediate(S6, 6.0); | 2150 __ LoadSImmediate(S6, 6.0); |
| 2150 __ LoadSImmediate(S7, 8.0); | 2151 __ LoadSImmediate(S7, 8.0); |
| 2151 | 2152 |
| 2152 __ vsubqs(Q2, Q1, Q0); | 2153 __ vsubqs(Q2, Q1, Q0); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2167 | 2168 |
| 2168 | 2169 |
| 2169 ASSEMBLER_TEST_RUN(Vsubqs, test) { | 2170 ASSEMBLER_TEST_RUN(Vsubqs, test) { |
| 2170 EXPECT(test != NULL); | 2171 EXPECT(test != NULL); |
| 2171 typedef int (*Tst)(); | 2172 typedef int (*Tst)(); |
| 2172 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2173 EXPECT_EQ(10, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2173 } | 2174 } |
| 2174 | 2175 |
| 2175 | 2176 |
| 2176 ASSEMBLER_TEST_GENERATE(Vmulqs, assembler) { | 2177 ASSEMBLER_TEST_GENERATE(Vmulqs, assembler) { |
| 2177 if (CPUFeatures::neon_supported()) { | 2178 if (TargetCPUFeatures::neon_supported()) { |
| 2178 __ LoadSImmediate(S0, 1.0); | 2179 __ LoadSImmediate(S0, 1.0); |
| 2179 __ LoadSImmediate(S1, 2.0); | 2180 __ LoadSImmediate(S1, 2.0); |
| 2180 __ LoadSImmediate(S2, 3.0); | 2181 __ LoadSImmediate(S2, 3.0); |
| 2181 __ LoadSImmediate(S3, 4.0); | 2182 __ LoadSImmediate(S3, 4.0); |
| 2182 __ LoadSImmediate(S4, 5.0); | 2183 __ LoadSImmediate(S4, 5.0); |
| 2183 __ LoadSImmediate(S5, 6.0); | 2184 __ LoadSImmediate(S5, 6.0); |
| 2184 __ LoadSImmediate(S6, 7.0); | 2185 __ LoadSImmediate(S6, 7.0); |
| 2185 __ LoadSImmediate(S7, 8.0); | 2186 __ LoadSImmediate(S7, 8.0); |
| 2186 | 2187 |
| 2187 __ vmulqs(Q2, Q1, Q0); | 2188 __ vmulqs(Q2, Q1, Q0); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2202 | 2203 |
| 2203 | 2204 |
| 2204 ASSEMBLER_TEST_RUN(Vmulqs, test) { | 2205 ASSEMBLER_TEST_RUN(Vmulqs, test) { |
| 2205 EXPECT(test != NULL); | 2206 EXPECT(test != NULL); |
| 2206 typedef int (*Tst)(); | 2207 typedef int (*Tst)(); |
| 2207 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2208 EXPECT_EQ(70, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2208 } | 2209 } |
| 2209 | 2210 |
| 2210 | 2211 |
| 2211 ASSEMBLER_TEST_GENERATE(VtblX, assembler) { | 2212 ASSEMBLER_TEST_GENERATE(VtblX, assembler) { |
| 2212 if (CPUFeatures::neon_supported()) { | 2213 if (TargetCPUFeatures::neon_supported()) { |
| 2213 // Index. | 2214 // Index. |
| 2214 __ LoadImmediate(R0, 0x03020100); | 2215 __ LoadImmediate(R0, 0x03020100); |
| 2215 __ vmovsr(S0, R0); | 2216 __ vmovsr(S0, R0); |
| 2216 __ vmovsr(S1, R0); | 2217 __ vmovsr(S1, R0); |
| 2217 | 2218 |
| 2218 // Table. | 2219 // Table. |
| 2219 __ LoadSImmediate(S2, 1.0); | 2220 __ LoadSImmediate(S2, 1.0); |
| 2220 __ LoadSImmediate(S3, 2.0); | 2221 __ LoadSImmediate(S3, 2.0); |
| 2221 __ LoadSImmediate(S4, 3.0); | 2222 __ LoadSImmediate(S4, 3.0); |
| 2222 __ LoadSImmediate(S5, 4.0); | 2223 __ LoadSImmediate(S5, 4.0); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2245 | 2246 |
| 2246 | 2247 |
| 2247 ASSEMBLER_TEST_RUN(VtblX, test) { | 2248 ASSEMBLER_TEST_RUN(VtblX, test) { |
| 2248 EXPECT(test != NULL); | 2249 EXPECT(test != NULL); |
| 2249 typedef int (*Tst)(); | 2250 typedef int (*Tst)(); |
| 2250 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2251 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2251 } | 2252 } |
| 2252 | 2253 |
| 2253 | 2254 |
| 2254 ASSEMBLER_TEST_GENERATE(VtblY, assembler) { | 2255 ASSEMBLER_TEST_GENERATE(VtblY, assembler) { |
| 2255 if (CPUFeatures::neon_supported()) { | 2256 if (TargetCPUFeatures::neon_supported()) { |
| 2256 // Index. | 2257 // Index. |
| 2257 __ LoadImmediate(R0, 0x07060504); | 2258 __ LoadImmediate(R0, 0x07060504); |
| 2258 __ vmovsr(S0, R0); | 2259 __ vmovsr(S0, R0); |
| 2259 __ vmovsr(S1, R0); | 2260 __ vmovsr(S1, R0); |
| 2260 | 2261 |
| 2261 // Table. | 2262 // Table. |
| 2262 __ LoadSImmediate(S2, 2.0); | 2263 __ LoadSImmediate(S2, 2.0); |
| 2263 __ LoadSImmediate(S3, 1.0); | 2264 __ LoadSImmediate(S3, 1.0); |
| 2264 __ LoadSImmediate(S4, 3.0); | 2265 __ LoadSImmediate(S4, 3.0); |
| 2265 __ LoadSImmediate(S5, 4.0); | 2266 __ LoadSImmediate(S5, 4.0); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2288 | 2289 |
| 2289 | 2290 |
| 2290 ASSEMBLER_TEST_RUN(VtblY, test) { | 2291 ASSEMBLER_TEST_RUN(VtblY, test) { |
| 2291 EXPECT(test != NULL); | 2292 EXPECT(test != NULL); |
| 2292 typedef int (*Tst)(); | 2293 typedef int (*Tst)(); |
| 2293 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2294 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2294 } | 2295 } |
| 2295 | 2296 |
| 2296 | 2297 |
| 2297 ASSEMBLER_TEST_GENERATE(VtblZ, assembler) { | 2298 ASSEMBLER_TEST_GENERATE(VtblZ, assembler) { |
| 2298 if (CPUFeatures::neon_supported()) { | 2299 if (TargetCPUFeatures::neon_supported()) { |
| 2299 // Index. | 2300 // Index. |
| 2300 __ LoadImmediate(R0, 0x0b0a0908); | 2301 __ LoadImmediate(R0, 0x0b0a0908); |
| 2301 __ vmovsr(S0, R0); | 2302 __ vmovsr(S0, R0); |
| 2302 __ vmovsr(S1, R0); | 2303 __ vmovsr(S1, R0); |
| 2303 | 2304 |
| 2304 // Table. | 2305 // Table. |
| 2305 __ LoadSImmediate(S2, 2.0); | 2306 __ LoadSImmediate(S2, 2.0); |
| 2306 __ LoadSImmediate(S3, 3.0); | 2307 __ LoadSImmediate(S3, 3.0); |
| 2307 __ LoadSImmediate(S4, 1.0); | 2308 __ LoadSImmediate(S4, 1.0); |
| 2308 __ LoadSImmediate(S5, 4.0); | 2309 __ LoadSImmediate(S5, 4.0); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2331 | 2332 |
| 2332 | 2333 |
| 2333 ASSEMBLER_TEST_RUN(VtblZ, test) { | 2334 ASSEMBLER_TEST_RUN(VtblZ, test) { |
| 2334 EXPECT(test != NULL); | 2335 EXPECT(test != NULL); |
| 2335 typedef int (*Tst)(); | 2336 typedef int (*Tst)(); |
| 2336 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2337 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2337 } | 2338 } |
| 2338 | 2339 |
| 2339 | 2340 |
| 2340 ASSEMBLER_TEST_GENERATE(VtblW, assembler) { | 2341 ASSEMBLER_TEST_GENERATE(VtblW, assembler) { |
| 2341 if (CPUFeatures::neon_supported()) { | 2342 if (TargetCPUFeatures::neon_supported()) { |
| 2342 // Index. | 2343 // Index. |
| 2343 __ LoadImmediate(R0, 0x0f0e0d0c); | 2344 __ LoadImmediate(R0, 0x0f0e0d0c); |
| 2344 __ vmovsr(S0, R0); | 2345 __ vmovsr(S0, R0); |
| 2345 __ vmovsr(S1, R0); | 2346 __ vmovsr(S1, R0); |
| 2346 | 2347 |
| 2347 // Table. | 2348 // Table. |
| 2348 __ LoadSImmediate(S2, 2.0); | 2349 __ LoadSImmediate(S2, 2.0); |
| 2349 __ LoadSImmediate(S3, 3.0); | 2350 __ LoadSImmediate(S3, 3.0); |
| 2350 __ LoadSImmediate(S4, 4.0); | 2351 __ LoadSImmediate(S4, 4.0); |
| 2351 __ LoadSImmediate(S5, 1.0); | 2352 __ LoadSImmediate(S5, 1.0); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2374 | 2375 |
| 2375 | 2376 |
| 2376 ASSEMBLER_TEST_RUN(VtblW, test) { | 2377 ASSEMBLER_TEST_RUN(VtblW, test) { |
| 2377 EXPECT(test != NULL); | 2378 EXPECT(test != NULL); |
| 2378 typedef int (*Tst)(); | 2379 typedef int (*Tst)(); |
| 2379 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2380 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2380 } | 2381 } |
| 2381 | 2382 |
| 2382 | 2383 |
| 2383 ASSEMBLER_TEST_GENERATE(Veorq, assembler) { | 2384 ASSEMBLER_TEST_GENERATE(Veorq, assembler) { |
| 2384 if (CPUFeatures::neon_supported()) { | 2385 if (TargetCPUFeatures::neon_supported()) { |
| 2385 // Q0 | 2386 // Q0 |
| 2386 __ LoadImmediate(R0, 0xaaaaaaab); | 2387 __ LoadImmediate(R0, 0xaaaaaaab); |
| 2387 __ vmovsr(S0, R0); | 2388 __ vmovsr(S0, R0); |
| 2388 __ vmovsr(S1, R0); | 2389 __ vmovsr(S1, R0); |
| 2389 __ vmovsr(S2, R0); | 2390 __ vmovsr(S2, R0); |
| 2390 __ vmovsr(S3, R0); | 2391 __ vmovsr(S3, R0); |
| 2391 | 2392 |
| 2392 // Q1 | 2393 // Q1 |
| 2393 __ LoadImmediate(R0, 0x55555555); | 2394 __ LoadImmediate(R0, 0x55555555); |
| 2394 __ vmovsr(S4, R0); | 2395 __ vmovsr(S4, R0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2416 | 2417 |
| 2417 | 2418 |
| 2418 ASSEMBLER_TEST_RUN(Veorq, test) { | 2419 ASSEMBLER_TEST_RUN(Veorq, test) { |
| 2419 EXPECT(test != NULL); | 2420 EXPECT(test != NULL); |
| 2420 typedef int (*Tst)(); | 2421 typedef int (*Tst)(); |
| 2421 EXPECT_EQ(-8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2422 EXPECT_EQ(-8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2422 } | 2423 } |
| 2423 | 2424 |
| 2424 | 2425 |
| 2425 ASSEMBLER_TEST_GENERATE(Vornq, assembler) { | 2426 ASSEMBLER_TEST_GENERATE(Vornq, assembler) { |
| 2426 if (CPUFeatures::neon_supported()) { | 2427 if (TargetCPUFeatures::neon_supported()) { |
| 2427 // Q0 | 2428 // Q0 |
| 2428 __ LoadImmediate(R0, 0xfffffff0); | 2429 __ LoadImmediate(R0, 0xfffffff0); |
| 2429 __ vmovsr(S0, R0); | 2430 __ vmovsr(S0, R0); |
| 2430 __ vmovsr(S1, R0); | 2431 __ vmovsr(S1, R0); |
| 2431 __ vmovsr(S2, R0); | 2432 __ vmovsr(S2, R0); |
| 2432 __ vmovsr(S3, R0); | 2433 __ vmovsr(S3, R0); |
| 2433 | 2434 |
| 2434 // Q1 | 2435 // Q1 |
| 2435 __ LoadImmediate(R0, 0); | 2436 __ LoadImmediate(R0, 0); |
| 2436 __ vmovsr(S4, R0); | 2437 __ vmovsr(S4, R0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2458 | 2459 |
| 2459 | 2460 |
| 2460 ASSEMBLER_TEST_RUN(Vornq, test) { | 2461 ASSEMBLER_TEST_RUN(Vornq, test) { |
| 2461 EXPECT(test != NULL); | 2462 EXPECT(test != NULL); |
| 2462 typedef int (*Tst)(); | 2463 typedef int (*Tst)(); |
| 2463 EXPECT_EQ(60, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2464 EXPECT_EQ(60, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2464 } | 2465 } |
| 2465 | 2466 |
| 2466 | 2467 |
| 2467 ASSEMBLER_TEST_GENERATE(Vorrq, assembler) { | 2468 ASSEMBLER_TEST_GENERATE(Vorrq, assembler) { |
| 2468 if (CPUFeatures::neon_supported()) { | 2469 if (TargetCPUFeatures::neon_supported()) { |
| 2469 // Q0 | 2470 // Q0 |
| 2470 __ LoadImmediate(R0, 0xaaaaaaaa); | 2471 __ LoadImmediate(R0, 0xaaaaaaaa); |
| 2471 __ vmovsr(S0, R0); | 2472 __ vmovsr(S0, R0); |
| 2472 __ vmovsr(S1, R0); | 2473 __ vmovsr(S1, R0); |
| 2473 __ vmovsr(S2, R0); | 2474 __ vmovsr(S2, R0); |
| 2474 __ vmovsr(S3, R0); | 2475 __ vmovsr(S3, R0); |
| 2475 | 2476 |
| 2476 // Q1 | 2477 // Q1 |
| 2477 __ LoadImmediate(R0, 0x55555555); | 2478 __ LoadImmediate(R0, 0x55555555); |
| 2478 __ vmovsr(S4, R0); | 2479 __ vmovsr(S4, R0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2500 | 2501 |
| 2501 | 2502 |
| 2502 ASSEMBLER_TEST_RUN(Vorrq, test) { | 2503 ASSEMBLER_TEST_RUN(Vorrq, test) { |
| 2503 EXPECT(test != NULL); | 2504 EXPECT(test != NULL); |
| 2504 typedef int (*Tst)(); | 2505 typedef int (*Tst)(); |
| 2505 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2506 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2506 } | 2507 } |
| 2507 | 2508 |
| 2508 | 2509 |
| 2509 ASSEMBLER_TEST_GENERATE(Vandq, assembler) { | 2510 ASSEMBLER_TEST_GENERATE(Vandq, assembler) { |
| 2510 if (CPUFeatures::neon_supported()) { | 2511 if (TargetCPUFeatures::neon_supported()) { |
| 2511 // Q0 | 2512 // Q0 |
| 2512 __ LoadImmediate(R0, 0xaaaaaaab); | 2513 __ LoadImmediate(R0, 0xaaaaaaab); |
| 2513 __ vmovsr(S0, R0); | 2514 __ vmovsr(S0, R0); |
| 2514 __ vmovsr(S1, R0); | 2515 __ vmovsr(S1, R0); |
| 2515 __ vmovsr(S2, R0); | 2516 __ vmovsr(S2, R0); |
| 2516 __ vmovsr(S3, R0); | 2517 __ vmovsr(S3, R0); |
| 2517 | 2518 |
| 2518 // Q1 | 2519 // Q1 |
| 2519 __ LoadImmediate(R0, 0x55555555); | 2520 __ LoadImmediate(R0, 0x55555555); |
| 2520 __ vmovsr(S4, R0); | 2521 __ vmovsr(S4, R0); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2542 | 2543 |
| 2543 | 2544 |
| 2544 ASSEMBLER_TEST_RUN(Vandq, test) { | 2545 ASSEMBLER_TEST_RUN(Vandq, test) { |
| 2545 EXPECT(test != NULL); | 2546 EXPECT(test != NULL); |
| 2546 typedef int (*Tst)(); | 2547 typedef int (*Tst)(); |
| 2547 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2548 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2548 } | 2549 } |
| 2549 | 2550 |
| 2550 | 2551 |
| 2551 ASSEMBLER_TEST_GENERATE(Vmovq, assembler) { | 2552 ASSEMBLER_TEST_GENERATE(Vmovq, assembler) { |
| 2552 if (CPUFeatures::neon_supported()) { | 2553 if (TargetCPUFeatures::neon_supported()) { |
| 2553 // Q0 | 2554 // Q0 |
| 2554 __ LoadSImmediate(S0, 1.0); | 2555 __ LoadSImmediate(S0, 1.0); |
| 2555 __ vmovs(S1, S0); | 2556 __ vmovs(S1, S0); |
| 2556 __ vmovs(S2, S0); | 2557 __ vmovs(S2, S0); |
| 2557 __ vmovs(S3, S0); | 2558 __ vmovs(S3, S0); |
| 2558 | 2559 |
| 2559 // Q0 | 2560 // Q0 |
| 2560 __ LoadSImmediate(S4, -1.0); | 2561 __ LoadSImmediate(S4, -1.0); |
| 2561 __ vmovs(S5, S0); | 2562 __ vmovs(S5, S0); |
| 2562 __ vmovs(S6, S0); | 2563 __ vmovs(S6, S0); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2580 | 2581 |
| 2581 | 2582 |
| 2582 ASSEMBLER_TEST_RUN(Vmovq, test) { | 2583 ASSEMBLER_TEST_RUN(Vmovq, test) { |
| 2583 EXPECT(test != NULL); | 2584 EXPECT(test != NULL); |
| 2584 typedef int (*Tst)(); | 2585 typedef int (*Tst)(); |
| 2585 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2586 EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2586 } | 2587 } |
| 2587 | 2588 |
| 2588 | 2589 |
| 2589 ASSEMBLER_TEST_GENERATE(Vdupb, assembler) { | 2590 ASSEMBLER_TEST_GENERATE(Vdupb, assembler) { |
| 2590 if (CPUFeatures::neon_supported()) { | 2591 if (TargetCPUFeatures::neon_supported()) { |
| 2591 __ LoadImmediate(R0, 0x00000000); | 2592 __ LoadImmediate(R0, 0x00000000); |
| 2592 __ LoadImmediate(R1, 0x00ff0000); | 2593 __ LoadImmediate(R1, 0x00ff0000); |
| 2593 __ vmovsr(S4, R0); | 2594 __ vmovsr(S4, R0); |
| 2594 __ vmovsr(S5, R1); | 2595 __ vmovsr(S5, R1); |
| 2595 | 2596 |
| 2596 // Should copy 0xff to each byte of Q0. | 2597 // Should copy 0xff to each byte of Q0. |
| 2597 __ vdup(kByte, Q0, D2, 6); | 2598 __ vdup(kByte, Q0, D2, 6); |
| 2598 | 2599 |
| 2599 __ vmovrs(R0, S0); | 2600 __ vmovrs(R0, S0); |
| 2600 __ vmovrs(R1, S1); | 2601 __ vmovrs(R1, S1); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2613 | 2614 |
| 2614 | 2615 |
| 2615 ASSEMBLER_TEST_RUN(Vdupb, test) { | 2616 ASSEMBLER_TEST_RUN(Vdupb, test) { |
| 2616 EXPECT(test != NULL); | 2617 EXPECT(test != NULL); |
| 2617 typedef int (*Tst)(); | 2618 typedef int (*Tst)(); |
| 2618 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2619 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2619 } | 2620 } |
| 2620 | 2621 |
| 2621 | 2622 |
| 2622 ASSEMBLER_TEST_GENERATE(Vduph, assembler) { | 2623 ASSEMBLER_TEST_GENERATE(Vduph, assembler) { |
| 2623 if (CPUFeatures::neon_supported()) { | 2624 if (TargetCPUFeatures::neon_supported()) { |
| 2624 __ LoadImmediate(R0, 0xffff0000); | 2625 __ LoadImmediate(R0, 0xffff0000); |
| 2625 __ LoadImmediate(R1, 0x00000000); | 2626 __ LoadImmediate(R1, 0x00000000); |
| 2626 __ vmovsr(S4, R0); | 2627 __ vmovsr(S4, R0); |
| 2627 __ vmovsr(S5, R1); | 2628 __ vmovsr(S5, R1); |
| 2628 | 2629 |
| 2629 // Should copy 0xff to each byte of Q0. | 2630 // Should copy 0xff to each byte of Q0. |
| 2630 __ vdup(kHalfword, Q0, D2, 1); | 2631 __ vdup(kHalfword, Q0, D2, 1); |
| 2631 | 2632 |
| 2632 __ vmovrs(R0, S0); | 2633 __ vmovrs(R0, S0); |
| 2633 __ vmovrs(R1, S1); | 2634 __ vmovrs(R1, S1); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2646 | 2647 |
| 2647 | 2648 |
| 2648 ASSEMBLER_TEST_RUN(Vduph, test) { | 2649 ASSEMBLER_TEST_RUN(Vduph, test) { |
| 2649 EXPECT(test != NULL); | 2650 EXPECT(test != NULL); |
| 2650 typedef int (*Tst)(); | 2651 typedef int (*Tst)(); |
| 2651 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2652 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2652 } | 2653 } |
| 2653 | 2654 |
| 2654 | 2655 |
| 2655 ASSEMBLER_TEST_GENERATE(Vdupw, assembler) { | 2656 ASSEMBLER_TEST_GENERATE(Vdupw, assembler) { |
| 2656 if (CPUFeatures::neon_supported()) { | 2657 if (TargetCPUFeatures::neon_supported()) { |
| 2657 __ LoadImmediate(R0, 0x00000000); | 2658 __ LoadImmediate(R0, 0x00000000); |
| 2658 __ LoadImmediate(R1, 0xffffffff); | 2659 __ LoadImmediate(R1, 0xffffffff); |
| 2659 __ vmovsr(S4, R0); | 2660 __ vmovsr(S4, R0); |
| 2660 __ vmovsr(S5, R1); | 2661 __ vmovsr(S5, R1); |
| 2661 | 2662 |
| 2662 // Should copy 0xff to each byte of Q0. | 2663 // Should copy 0xff to each byte of Q0. |
| 2663 __ vdup(kWord, Q0, D2, 1); | 2664 __ vdup(kWord, Q0, D2, 1); |
| 2664 | 2665 |
| 2665 __ vmovrs(R0, S0); | 2666 __ vmovrs(R0, S0); |
| 2666 __ vmovrs(R1, S1); | 2667 __ vmovrs(R1, S1); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2679 | 2680 |
| 2680 | 2681 |
| 2681 ASSEMBLER_TEST_RUN(Vdupw, test) { | 2682 ASSEMBLER_TEST_RUN(Vdupw, test) { |
| 2682 EXPECT(test != NULL); | 2683 EXPECT(test != NULL); |
| 2683 typedef int (*Tst)(); | 2684 typedef int (*Tst)(); |
| 2684 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2685 EXPECT_EQ(-4, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2685 } | 2686 } |
| 2686 | 2687 |
| 2687 | 2688 |
| 2688 ASSEMBLER_TEST_GENERATE(Vzipqw, assembler) { | 2689 ASSEMBLER_TEST_GENERATE(Vzipqw, assembler) { |
| 2689 if (CPUFeatures::neon_supported()) { | 2690 if (TargetCPUFeatures::neon_supported()) { |
| 2690 __ LoadSImmediate(S0, 0.0); | 2691 __ LoadSImmediate(S0, 0.0); |
| 2691 __ LoadSImmediate(S1, 1.0); | 2692 __ LoadSImmediate(S1, 1.0); |
| 2692 __ LoadSImmediate(S2, 2.0); | 2693 __ LoadSImmediate(S2, 2.0); |
| 2693 __ LoadSImmediate(S3, 3.0); | 2694 __ LoadSImmediate(S3, 3.0); |
| 2694 __ LoadSImmediate(S4, 4.0); | 2695 __ LoadSImmediate(S4, 4.0); |
| 2695 __ LoadSImmediate(S5, 5.0); | 2696 __ LoadSImmediate(S5, 5.0); |
| 2696 __ LoadSImmediate(S6, 6.0); | 2697 __ LoadSImmediate(S6, 6.0); |
| 2697 __ LoadSImmediate(S7, 7.0); | 2698 __ LoadSImmediate(S7, 7.0); |
| 2698 | 2699 |
| 2699 __ vzipqw(Q0, Q1); | 2700 __ vzipqw(Q0, Q1); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2713 | 2714 |
| 2714 ASSEMBLER_TEST_RUN(Vzipqw, test) { | 2715 ASSEMBLER_TEST_RUN(Vzipqw, test) { |
| 2715 EXPECT(test != NULL); | 2716 EXPECT(test != NULL); |
| 2716 typedef float (*Vzipqw)(); | 2717 typedef float (*Vzipqw)(); |
| 2717 float res = EXECUTE_TEST_CODE_FLOAT(Vzipqw, test->entry()); | 2718 float res = EXECUTE_TEST_CODE_FLOAT(Vzipqw, test->entry()); |
| 2718 EXPECT_FLOAT_EQ(8.0, res, 0.0001f); | 2719 EXPECT_FLOAT_EQ(8.0, res, 0.0001f); |
| 2719 } | 2720 } |
| 2720 | 2721 |
| 2721 | 2722 |
| 2722 ASSEMBLER_TEST_GENERATE(Vceqqi32, assembler) { | 2723 ASSEMBLER_TEST_GENERATE(Vceqqi32, assembler) { |
| 2723 if (CPUFeatures::neon_supported()) { | 2724 if (TargetCPUFeatures::neon_supported()) { |
| 2724 __ mov(R0, ShifterOperand(1)); | 2725 __ mov(R0, ShifterOperand(1)); |
| 2725 __ vmovsr(S0, R0); | 2726 __ vmovsr(S0, R0); |
| 2726 __ mov(R0, ShifterOperand(2)); | 2727 __ mov(R0, ShifterOperand(2)); |
| 2727 __ vmovsr(S1, R0); | 2728 __ vmovsr(S1, R0); |
| 2728 __ mov(R0, ShifterOperand(3)); | 2729 __ mov(R0, ShifterOperand(3)); |
| 2729 __ vmovsr(S2, R0); | 2730 __ vmovsr(S2, R0); |
| 2730 __ mov(R0, ShifterOperand(4)); | 2731 __ mov(R0, ShifterOperand(4)); |
| 2731 __ vmovsr(S3, R0); | 2732 __ vmovsr(S3, R0); |
| 2732 __ mov(R0, ShifterOperand(1)); | 2733 __ mov(R0, ShifterOperand(1)); |
| 2733 __ vmovsr(S4, R0); | 2734 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2757 | 2758 |
| 2758 | 2759 |
| 2759 ASSEMBLER_TEST_RUN(Vceqqi32, test) { | 2760 ASSEMBLER_TEST_RUN(Vceqqi32, test) { |
| 2760 EXPECT(test != NULL); | 2761 EXPECT(test != NULL); |
| 2761 typedef int (*Tst)(); | 2762 typedef int (*Tst)(); |
| 2762 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2763 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2763 } | 2764 } |
| 2764 | 2765 |
| 2765 | 2766 |
| 2766 ASSEMBLER_TEST_GENERATE(Vceqqs, assembler) { | 2767 ASSEMBLER_TEST_GENERATE(Vceqqs, assembler) { |
| 2767 if (CPUFeatures::neon_supported()) { | 2768 if (TargetCPUFeatures::neon_supported()) { |
| 2768 __ LoadSImmediate(S0, 1.0); | 2769 __ LoadSImmediate(S0, 1.0); |
| 2769 __ LoadSImmediate(S1, 2.0); | 2770 __ LoadSImmediate(S1, 2.0); |
| 2770 __ LoadSImmediate(S2, 3.0); | 2771 __ LoadSImmediate(S2, 3.0); |
| 2771 __ LoadSImmediate(S3, 4.0); | 2772 __ LoadSImmediate(S3, 4.0); |
| 2772 __ LoadSImmediate(S4, 1.0); | 2773 __ LoadSImmediate(S4, 1.0); |
| 2773 __ LoadSImmediate(S5, 4.0); | 2774 __ LoadSImmediate(S5, 4.0); |
| 2774 __ LoadSImmediate(S6, 3.0); | 2775 __ LoadSImmediate(S6, 3.0); |
| 2775 __ LoadSImmediate(S7, 8.0); | 2776 __ LoadSImmediate(S7, 8.0); |
| 2776 | 2777 |
| 2777 __ vceqqs(Q2, Q1, Q0); | 2778 __ vceqqs(Q2, Q1, Q0); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2793 | 2794 |
| 2794 | 2795 |
| 2795 ASSEMBLER_TEST_RUN(Vceqqs, test) { | 2796 ASSEMBLER_TEST_RUN(Vceqqs, test) { |
| 2796 EXPECT(test != NULL); | 2797 EXPECT(test != NULL); |
| 2797 typedef int (*Tst)(); | 2798 typedef int (*Tst)(); |
| 2798 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2799 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2799 } | 2800 } |
| 2800 | 2801 |
| 2801 | 2802 |
| 2802 ASSEMBLER_TEST_GENERATE(Vcgeqi32, assembler) { | 2803 ASSEMBLER_TEST_GENERATE(Vcgeqi32, assembler) { |
| 2803 if (CPUFeatures::neon_supported()) { | 2804 if (TargetCPUFeatures::neon_supported()) { |
| 2804 __ mov(R0, ShifterOperand(1)); | 2805 __ mov(R0, ShifterOperand(1)); |
| 2805 __ vmovsr(S0, R0); | 2806 __ vmovsr(S0, R0); |
| 2806 __ mov(R0, ShifterOperand(2)); | 2807 __ mov(R0, ShifterOperand(2)); |
| 2807 __ vmovsr(S1, R0); | 2808 __ vmovsr(S1, R0); |
| 2808 __ mov(R0, ShifterOperand(3)); | 2809 __ mov(R0, ShifterOperand(3)); |
| 2809 __ vmovsr(S2, R0); | 2810 __ vmovsr(S2, R0); |
| 2810 __ mov(R0, ShifterOperand(4)); | 2811 __ mov(R0, ShifterOperand(4)); |
| 2811 __ vmovsr(S3, R0); | 2812 __ vmovsr(S3, R0); |
| 2812 __ mov(R0, ShifterOperand(1)); | 2813 __ mov(R0, ShifterOperand(1)); |
| 2813 __ vmovsr(S4, R0); | 2814 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2837 | 2838 |
| 2838 | 2839 |
| 2839 ASSEMBLER_TEST_RUN(Vcgeqi32, test) { | 2840 ASSEMBLER_TEST_RUN(Vcgeqi32, test) { |
| 2840 EXPECT(test != NULL); | 2841 EXPECT(test != NULL); |
| 2841 typedef int (*Tst)(); | 2842 typedef int (*Tst)(); |
| 2842 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2843 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2843 } | 2844 } |
| 2844 | 2845 |
| 2845 | 2846 |
| 2846 ASSEMBLER_TEST_GENERATE(Vcugeqi32, assembler) { | 2847 ASSEMBLER_TEST_GENERATE(Vcugeqi32, assembler) { |
| 2847 if (CPUFeatures::neon_supported()) { | 2848 if (TargetCPUFeatures::neon_supported()) { |
| 2848 __ mov(R0, ShifterOperand(1)); | 2849 __ mov(R0, ShifterOperand(1)); |
| 2849 __ vmovsr(S0, R0); | 2850 __ vmovsr(S0, R0); |
| 2850 __ mov(R0, ShifterOperand(2)); | 2851 __ mov(R0, ShifterOperand(2)); |
| 2851 __ vmovsr(S1, R0); | 2852 __ vmovsr(S1, R0); |
| 2852 __ mov(R0, ShifterOperand(3)); | 2853 __ mov(R0, ShifterOperand(3)); |
| 2853 __ vmovsr(S2, R0); | 2854 __ vmovsr(S2, R0); |
| 2854 __ mov(R0, ShifterOperand(4)); | 2855 __ mov(R0, ShifterOperand(4)); |
| 2855 __ vmovsr(S3, R0); | 2856 __ vmovsr(S3, R0); |
| 2856 __ LoadImmediate(R0, -1); | 2857 __ LoadImmediate(R0, -1); |
| 2857 __ vmovsr(S4, R0); | 2858 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2881 | 2882 |
| 2882 | 2883 |
| 2883 ASSEMBLER_TEST_RUN(Vcugeqi32, test) { | 2884 ASSEMBLER_TEST_RUN(Vcugeqi32, test) { |
| 2884 EXPECT(test != NULL); | 2885 EXPECT(test != NULL); |
| 2885 typedef int (*Tst)(); | 2886 typedef int (*Tst)(); |
| 2886 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2887 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2887 } | 2888 } |
| 2888 | 2889 |
| 2889 | 2890 |
| 2890 ASSEMBLER_TEST_GENERATE(Vcgeqs, assembler) { | 2891 ASSEMBLER_TEST_GENERATE(Vcgeqs, assembler) { |
| 2891 if (CPUFeatures::neon_supported()) { | 2892 if (TargetCPUFeatures::neon_supported()) { |
| 2892 __ LoadSImmediate(S0, 1.0); | 2893 __ LoadSImmediate(S0, 1.0); |
| 2893 __ LoadSImmediate(S1, 2.0); | 2894 __ LoadSImmediate(S1, 2.0); |
| 2894 __ LoadSImmediate(S2, 3.0); | 2895 __ LoadSImmediate(S2, 3.0); |
| 2895 __ LoadSImmediate(S3, 4.0); | 2896 __ LoadSImmediate(S3, 4.0); |
| 2896 __ LoadSImmediate(S4, 1.0); | 2897 __ LoadSImmediate(S4, 1.0); |
| 2897 __ LoadSImmediate(S5, 1.0); | 2898 __ LoadSImmediate(S5, 1.0); |
| 2898 __ LoadSImmediate(S6, 3.0); | 2899 __ LoadSImmediate(S6, 3.0); |
| 2899 __ LoadSImmediate(S7, 1.0); | 2900 __ LoadSImmediate(S7, 1.0); |
| 2900 | 2901 |
| 2901 __ vcgeqs(Q2, Q1, Q0); | 2902 __ vcgeqs(Q2, Q1, Q0); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2917 | 2918 |
| 2918 | 2919 |
| 2919 ASSEMBLER_TEST_RUN(Vcgeqs, test) { | 2920 ASSEMBLER_TEST_RUN(Vcgeqs, test) { |
| 2920 EXPECT(test != NULL); | 2921 EXPECT(test != NULL); |
| 2921 typedef int (*Tst)(); | 2922 typedef int (*Tst)(); |
| 2922 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2923 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2923 } | 2924 } |
| 2924 | 2925 |
| 2925 | 2926 |
| 2926 ASSEMBLER_TEST_GENERATE(Vcgtqi32, assembler) { | 2927 ASSEMBLER_TEST_GENERATE(Vcgtqi32, assembler) { |
| 2927 if (CPUFeatures::neon_supported()) { | 2928 if (TargetCPUFeatures::neon_supported()) { |
| 2928 __ mov(R0, ShifterOperand(1)); | 2929 __ mov(R0, ShifterOperand(1)); |
| 2929 __ vmovsr(S0, R0); | 2930 __ vmovsr(S0, R0); |
| 2930 __ mov(R0, ShifterOperand(2)); | 2931 __ mov(R0, ShifterOperand(2)); |
| 2931 __ vmovsr(S1, R0); | 2932 __ vmovsr(S1, R0); |
| 2932 __ mov(R0, ShifterOperand(3)); | 2933 __ mov(R0, ShifterOperand(3)); |
| 2933 __ vmovsr(S2, R0); | 2934 __ vmovsr(S2, R0); |
| 2934 __ mov(R0, ShifterOperand(4)); | 2935 __ mov(R0, ShifterOperand(4)); |
| 2935 __ vmovsr(S3, R0); | 2936 __ vmovsr(S3, R0); |
| 2936 __ mov(R0, ShifterOperand(2)); | 2937 __ mov(R0, ShifterOperand(2)); |
| 2937 __ vmovsr(S4, R0); | 2938 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2961 | 2962 |
| 2962 | 2963 |
| 2963 ASSEMBLER_TEST_RUN(Vcgtqi32, test) { | 2964 ASSEMBLER_TEST_RUN(Vcgtqi32, test) { |
| 2964 EXPECT(test != NULL); | 2965 EXPECT(test != NULL); |
| 2965 typedef int (*Tst)(); | 2966 typedef int (*Tst)(); |
| 2966 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 2967 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 2967 } | 2968 } |
| 2968 | 2969 |
| 2969 | 2970 |
| 2970 ASSEMBLER_TEST_GENERATE(Vcugtqi32, assembler) { | 2971 ASSEMBLER_TEST_GENERATE(Vcugtqi32, assembler) { |
| 2971 if (CPUFeatures::neon_supported()) { | 2972 if (TargetCPUFeatures::neon_supported()) { |
| 2972 __ mov(R0, ShifterOperand(1)); | 2973 __ mov(R0, ShifterOperand(1)); |
| 2973 __ vmovsr(S0, R0); | 2974 __ vmovsr(S0, R0); |
| 2974 __ mov(R0, ShifterOperand(2)); | 2975 __ mov(R0, ShifterOperand(2)); |
| 2975 __ vmovsr(S1, R0); | 2976 __ vmovsr(S1, R0); |
| 2976 __ mov(R0, ShifterOperand(3)); | 2977 __ mov(R0, ShifterOperand(3)); |
| 2977 __ vmovsr(S2, R0); | 2978 __ vmovsr(S2, R0); |
| 2978 __ mov(R0, ShifterOperand(4)); | 2979 __ mov(R0, ShifterOperand(4)); |
| 2979 __ vmovsr(S3, R0); | 2980 __ vmovsr(S3, R0); |
| 2980 __ LoadImmediate(R0, -1); | 2981 __ LoadImmediate(R0, -1); |
| 2981 __ vmovsr(S4, R0); | 2982 __ vmovsr(S4, R0); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3005 | 3006 |
| 3006 | 3007 |
| 3007 ASSEMBLER_TEST_RUN(Vcugtqi32, test) { | 3008 ASSEMBLER_TEST_RUN(Vcugtqi32, test) { |
| 3008 EXPECT(test != NULL); | 3009 EXPECT(test != NULL); |
| 3009 typedef int (*Tst)(); | 3010 typedef int (*Tst)(); |
| 3010 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 3011 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 3011 } | 3012 } |
| 3012 | 3013 |
| 3013 | 3014 |
| 3014 ASSEMBLER_TEST_GENERATE(Vcgtqs, assembler) { | 3015 ASSEMBLER_TEST_GENERATE(Vcgtqs, assembler) { |
| 3015 if (CPUFeatures::neon_supported()) { | 3016 if (TargetCPUFeatures::neon_supported()) { |
| 3016 __ LoadSImmediate(S0, 1.0); | 3017 __ LoadSImmediate(S0, 1.0); |
| 3017 __ LoadSImmediate(S1, 2.0); | 3018 __ LoadSImmediate(S1, 2.0); |
| 3018 __ LoadSImmediate(S2, 3.0); | 3019 __ LoadSImmediate(S2, 3.0); |
| 3019 __ LoadSImmediate(S3, 4.0); | 3020 __ LoadSImmediate(S3, 4.0); |
| 3020 __ LoadSImmediate(S4, 2.0); | 3021 __ LoadSImmediate(S4, 2.0); |
| 3021 __ LoadSImmediate(S5, 1.0); | 3022 __ LoadSImmediate(S5, 1.0); |
| 3022 __ LoadSImmediate(S6, 4.0); | 3023 __ LoadSImmediate(S6, 4.0); |
| 3023 __ LoadSImmediate(S7, 1.0); | 3024 __ LoadSImmediate(S7, 1.0); |
| 3024 | 3025 |
| 3025 __ vcgtqs(Q2, Q1, Q0); | 3026 __ vcgtqs(Q2, Q1, Q0); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3041 | 3042 |
| 3042 | 3043 |
| 3043 ASSEMBLER_TEST_RUN(Vcgtqs, test) { | 3044 ASSEMBLER_TEST_RUN(Vcgtqs, test) { |
| 3044 EXPECT(test != NULL); | 3045 EXPECT(test != NULL); |
| 3045 typedef int (*Tst)(); | 3046 typedef int (*Tst)(); |
| 3046 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 3047 EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 3047 } | 3048 } |
| 3048 | 3049 |
| 3049 | 3050 |
| 3050 ASSEMBLER_TEST_GENERATE(Vminqs, assembler) { | 3051 ASSEMBLER_TEST_GENERATE(Vminqs, assembler) { |
| 3051 if (CPUFeatures::neon_supported()) { | 3052 if (TargetCPUFeatures::neon_supported()) { |
| 3052 __ LoadSImmediate(S0, 1.0); | 3053 __ LoadSImmediate(S0, 1.0); |
| 3053 __ LoadSImmediate(S1, 2.0); | 3054 __ LoadSImmediate(S1, 2.0); |
| 3054 __ LoadSImmediate(S2, 3.0); | 3055 __ LoadSImmediate(S2, 3.0); |
| 3055 __ LoadSImmediate(S3, 4.0); | 3056 __ LoadSImmediate(S3, 4.0); |
| 3056 | 3057 |
| 3057 __ LoadSImmediate(S4, 2.0); | 3058 __ LoadSImmediate(S4, 2.0); |
| 3058 __ LoadSImmediate(S5, 1.0); | 3059 __ LoadSImmediate(S5, 1.0); |
| 3059 __ LoadSImmediate(S6, 6.0); | 3060 __ LoadSImmediate(S6, 6.0); |
| 3060 __ LoadSImmediate(S7, 3.0); | 3061 __ LoadSImmediate(S7, 3.0); |
| 3061 | 3062 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3076 | 3077 |
| 3077 | 3078 |
| 3078 ASSEMBLER_TEST_RUN(Vminqs, test) { | 3079 ASSEMBLER_TEST_RUN(Vminqs, test) { |
| 3079 EXPECT(test != NULL); | 3080 EXPECT(test != NULL); |
| 3080 typedef int (*Tst)(); | 3081 typedef int (*Tst)(); |
| 3081 EXPECT_EQ(8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); | 3082 EXPECT_EQ(8, EXECUTE_TEST_CODE_INT32(Tst, test->entry())); |
| 3082 } | 3083 } |
| 3083 | 3084 |
| 3084 | 3085 |
| 3085 ASSEMBLER_TEST_GENERATE(Vmaxqs, assembler) { | 3086 ASSEMBLER_TEST_GENERATE(Vmaxqs, assembler) { |
| 3086 if (CPUFeatures::neon_supported()) { | 3087 if (TargetCPUFeatures::neon_supported()) { |
| 3087 __ LoadSImmediate(S0, 1.0); | 3088 __ LoadSImmediate(S0, 1.0); |
| 3088 __ LoadSImmediate(S1, 2.0); | 3089 __ LoadSImmediate(S1, 2.0); |
| 3089 __ LoadSImmediate(S2, 3.0); | 3090 __ LoadSImmediate(S2, 3.0); |
| 3090 __ LoadSImmediate(S3, 4.0); | 3091 __ LoadSImmediate(S3, 4.0); |
| 3091 | 3092 |
| 3092 __ LoadSImmediate(S4, 2.0); | 3093 __ LoadSImmediate(S4, 2.0); |
| 3093 __ LoadSImmediate(S5, 1.0); | 3094 __ LoadSImmediate(S5, 1.0); |
| 3094 __ LoadSImmediate(S6, 6.0); | 3095 __ LoadSImmediate(S6, 6.0); |
| 3095 __ LoadSImmediate(S7, 3.0); | 3096 __ LoadSImmediate(S7, 3.0); |
| 3096 | 3097 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3146 | 3147 |
| 3147 // result = sign : result_exp<7:0> : estimate<51:29> | 3148 // result = sign : result_exp<7:0> : estimate<51:29> |
| 3148 int32_t result_bits = | 3149 int32_t result_bits = |
| 3149 (a_bits & 0x80000000) | ((result_exp & 0xff) << 23) | | 3150 (a_bits & 0x80000000) | ((result_exp & 0xff) << 23) | |
| 3150 ((bit_cast<uint64_t, double>(estimate) >> 29) & 0x7fffff); | 3151 ((bit_cast<uint64_t, double>(estimate) >> 29) & 0x7fffff); |
| 3151 return bit_cast<float, int32_t>(result_bits); | 3152 return bit_cast<float, int32_t>(result_bits); |
| 3152 } | 3153 } |
| 3153 | 3154 |
| 3154 | 3155 |
| 3155 ASSEMBLER_TEST_GENERATE(Vrecpeqs, assembler) { | 3156 ASSEMBLER_TEST_GENERATE(Vrecpeqs, assembler) { |
| 3156 if (CPUFeatures::neon_supported()) { | 3157 if (TargetCPUFeatures::neon_supported()) { |
| 3157 __ LoadSImmediate(S4, 147.0); | 3158 __ LoadSImmediate(S4, 147.0); |
| 3158 __ vmovs(S5, S4); | 3159 __ vmovs(S5, S4); |
| 3159 __ vmovs(S6, S4); | 3160 __ vmovs(S6, S4); |
| 3160 __ vmovs(S7, S4); | 3161 __ vmovs(S7, S4); |
| 3161 | 3162 |
| 3162 __ vrecpeqs(Q0, Q1); | 3163 __ vrecpeqs(Q0, Q1); |
| 3163 | 3164 |
| 3164 __ bx(LR); | 3165 __ bx(LR); |
| 3165 } else { | 3166 } else { |
| 3166 __ LoadSImmediate(S0, arm_recip_estimate(147.0)); | 3167 __ LoadSImmediate(S0, arm_recip_estimate(147.0)); |
| 3167 __ bx(LR); | 3168 __ bx(LR); |
| 3168 } | 3169 } |
| 3169 } | 3170 } |
| 3170 | 3171 |
| 3171 | 3172 |
| 3172 ASSEMBLER_TEST_RUN(Vrecpeqs, test) { | 3173 ASSEMBLER_TEST_RUN(Vrecpeqs, test) { |
| 3173 EXPECT(test != NULL); | 3174 EXPECT(test != NULL); |
| 3174 typedef float (*Vrecpeqs)(); | 3175 typedef float (*Vrecpeqs)(); |
| 3175 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpeqs, test->entry()); | 3176 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpeqs, test->entry()); |
| 3176 EXPECT_FLOAT_EQ(arm_recip_estimate(147.0), res, 0.0001f); | 3177 EXPECT_FLOAT_EQ(arm_recip_estimate(147.0), res, 0.0001f); |
| 3177 } | 3178 } |
| 3178 | 3179 |
| 3179 | 3180 |
| 3180 ASSEMBLER_TEST_GENERATE(Vrecpsqs, assembler) { | 3181 ASSEMBLER_TEST_GENERATE(Vrecpsqs, assembler) { |
| 3181 if (CPUFeatures::neon_supported()) { | 3182 if (TargetCPUFeatures::neon_supported()) { |
| 3182 __ LoadSImmediate(S4, 5.0); | 3183 __ LoadSImmediate(S4, 5.0); |
| 3183 __ LoadSImmediate(S5, 2.0); | 3184 __ LoadSImmediate(S5, 2.0); |
| 3184 __ LoadSImmediate(S6, 3.0); | 3185 __ LoadSImmediate(S6, 3.0); |
| 3185 __ LoadSImmediate(S7, 4.0); | 3186 __ LoadSImmediate(S7, 4.0); |
| 3186 | 3187 |
| 3187 __ LoadSImmediate(S8, 10.0); | 3188 __ LoadSImmediate(S8, 10.0); |
| 3188 __ LoadSImmediate(S9, 1.0); | 3189 __ LoadSImmediate(S9, 1.0); |
| 3189 __ LoadSImmediate(S10, 6.0); | 3190 __ LoadSImmediate(S10, 6.0); |
| 3190 __ LoadSImmediate(S11, 3.0); | 3191 __ LoadSImmediate(S11, 3.0); |
| 3191 | 3192 |
| 3192 __ vrecpsqs(Q0, Q1, Q2); | 3193 __ vrecpsqs(Q0, Q1, Q2); |
| 3193 | 3194 |
| 3194 __ bx(LR); | 3195 __ bx(LR); |
| 3195 } else { | 3196 } else { |
| 3196 __ LoadSImmediate(S0, 2.0 - 10.0 * 5.0); | 3197 __ LoadSImmediate(S0, 2.0 - 10.0 * 5.0); |
| 3197 __ bx(LR); | 3198 __ bx(LR); |
| 3198 } | 3199 } |
| 3199 } | 3200 } |
| 3200 | 3201 |
| 3201 | 3202 |
| 3202 ASSEMBLER_TEST_RUN(Vrecpsqs, test) { | 3203 ASSEMBLER_TEST_RUN(Vrecpsqs, test) { |
| 3203 EXPECT(test != NULL); | 3204 EXPECT(test != NULL); |
| 3204 typedef float (*Vrecpsqs)(); | 3205 typedef float (*Vrecpsqs)(); |
| 3205 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpsqs, test->entry()); | 3206 float res = EXECUTE_TEST_CODE_FLOAT(Vrecpsqs, test->entry()); |
| 3206 EXPECT_FLOAT_EQ(2.0 - 10.0 * 5.0, res, 0.0001f); | 3207 EXPECT_FLOAT_EQ(2.0 - 10.0 * 5.0, res, 0.0001f); |
| 3207 } | 3208 } |
| 3208 | 3209 |
| 3209 | 3210 |
| 3210 ASSEMBLER_TEST_GENERATE(Reciprocal, assembler) { | 3211 ASSEMBLER_TEST_GENERATE(Reciprocal, assembler) { |
| 3211 if (CPUFeatures::neon_supported()) { | 3212 if (TargetCPUFeatures::neon_supported()) { |
| 3212 __ LoadSImmediate(S4, 147000.0); | 3213 __ LoadSImmediate(S4, 147000.0); |
| 3213 __ vmovs(S5, S4); | 3214 __ vmovs(S5, S4); |
| 3214 __ vmovs(S6, S4); | 3215 __ vmovs(S6, S4); |
| 3215 __ vmovs(S7, S4); | 3216 __ vmovs(S7, S4); |
| 3216 | 3217 |
| 3217 // Reciprocal estimate. | 3218 // Reciprocal estimate. |
| 3218 __ vrecpeqs(Q0, Q1); | 3219 __ vrecpeqs(Q0, Q1); |
| 3219 // 2 Newton-Raphson steps. | 3220 // 2 Newton-Raphson steps. |
| 3220 __ vrecpsqs(Q2, Q1, Q0); | 3221 __ vrecpsqs(Q2, Q1, Q0); |
| 3221 __ vmulqs(Q0, Q0, Q2); | 3222 __ vmulqs(Q0, Q0, Q2); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3283 ASSERT((estimate >= 1.0) && (estimate <= (511.0/256.0))); | 3284 ASSERT((estimate >= 1.0) && (estimate <= (511.0/256.0))); |
| 3284 | 3285 |
| 3285 // result = 0 : result_exp<7:0> : estimate<51:29> | 3286 // result = 0 : result_exp<7:0> : estimate<51:29> |
| 3286 int32_t result_bits = ((result_exp & 0xff) << 23) | | 3287 int32_t result_bits = ((result_exp & 0xff) << 23) | |
| 3287 ((bit_cast<uint64_t, double>(estimate) >> 29) & 0x7fffff); | 3288 ((bit_cast<uint64_t, double>(estimate) >> 29) & 0x7fffff); |
| 3288 return bit_cast<float, int32_t>(result_bits); | 3289 return bit_cast<float, int32_t>(result_bits); |
| 3289 } | 3290 } |
| 3290 | 3291 |
| 3291 | 3292 |
| 3292 ASSEMBLER_TEST_GENERATE(Vrsqrteqs, assembler) { | 3293 ASSEMBLER_TEST_GENERATE(Vrsqrteqs, assembler) { |
| 3293 if (CPUFeatures::neon_supported()) { | 3294 if (TargetCPUFeatures::neon_supported()) { |
| 3294 __ LoadSImmediate(S4, 147.0); | 3295 __ LoadSImmediate(S4, 147.0); |
| 3295 __ vmovs(S5, S4); | 3296 __ vmovs(S5, S4); |
| 3296 __ vmovs(S6, S4); | 3297 __ vmovs(S6, S4); |
| 3297 __ vmovs(S7, S4); | 3298 __ vmovs(S7, S4); |
| 3298 | 3299 |
| 3299 __ vrsqrteqs(Q0, Q1); | 3300 __ vrsqrteqs(Q0, Q1); |
| 3300 | 3301 |
| 3301 __ bx(LR); | 3302 __ bx(LR); |
| 3302 } else { | 3303 } else { |
| 3303 __ LoadSImmediate(S0, arm_reciprocal_sqrt_estimate(147.0)); | 3304 __ LoadSImmediate(S0, arm_reciprocal_sqrt_estimate(147.0)); |
| 3304 __ bx(LR); | 3305 __ bx(LR); |
| 3305 } | 3306 } |
| 3306 } | 3307 } |
| 3307 | 3308 |
| 3308 | 3309 |
| 3309 ASSEMBLER_TEST_RUN(Vrsqrteqs, test) { | 3310 ASSEMBLER_TEST_RUN(Vrsqrteqs, test) { |
| 3310 EXPECT(test != NULL); | 3311 EXPECT(test != NULL); |
| 3311 typedef float (*Vrsqrteqs)(); | 3312 typedef float (*Vrsqrteqs)(); |
| 3312 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrteqs, test->entry()); | 3313 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrteqs, test->entry()); |
| 3313 EXPECT_FLOAT_EQ(arm_reciprocal_sqrt_estimate(147.0), res, 0.0001f); | 3314 EXPECT_FLOAT_EQ(arm_reciprocal_sqrt_estimate(147.0), res, 0.0001f); |
| 3314 } | 3315 } |
| 3315 | 3316 |
| 3316 | 3317 |
| 3317 ASSEMBLER_TEST_GENERATE(Vrsqrtsqs, assembler) { | 3318 ASSEMBLER_TEST_GENERATE(Vrsqrtsqs, assembler) { |
| 3318 if (CPUFeatures::neon_supported()) { | 3319 if (TargetCPUFeatures::neon_supported()) { |
| 3319 __ LoadSImmediate(S4, 5.0); | 3320 __ LoadSImmediate(S4, 5.0); |
| 3320 __ LoadSImmediate(S5, 2.0); | 3321 __ LoadSImmediate(S5, 2.0); |
| 3321 __ LoadSImmediate(S6, 3.0); | 3322 __ LoadSImmediate(S6, 3.0); |
| 3322 __ LoadSImmediate(S7, 4.0); | 3323 __ LoadSImmediate(S7, 4.0); |
| 3323 | 3324 |
| 3324 __ LoadSImmediate(S8, 10.0); | 3325 __ LoadSImmediate(S8, 10.0); |
| 3325 __ LoadSImmediate(S9, 1.0); | 3326 __ LoadSImmediate(S9, 1.0); |
| 3326 __ LoadSImmediate(S10, 6.0); | 3327 __ LoadSImmediate(S10, 6.0); |
| 3327 __ LoadSImmediate(S11, 3.0); | 3328 __ LoadSImmediate(S11, 3.0); |
| 3328 | 3329 |
| 3329 __ vrsqrtsqs(Q0, Q1, Q2); | 3330 __ vrsqrtsqs(Q0, Q1, Q2); |
| 3330 | 3331 |
| 3331 __ bx(LR); | 3332 __ bx(LR); |
| 3332 } else { | 3333 } else { |
| 3333 __ LoadSImmediate(S0, (3.0 - 10.0 * 5.0) / 2.0); | 3334 __ LoadSImmediate(S0, (3.0 - 10.0 * 5.0) / 2.0); |
| 3334 __ bx(LR); | 3335 __ bx(LR); |
| 3335 } | 3336 } |
| 3336 } | 3337 } |
| 3337 | 3338 |
| 3338 | 3339 |
| 3339 ASSEMBLER_TEST_RUN(Vrsqrtsqs, test) { | 3340 ASSEMBLER_TEST_RUN(Vrsqrtsqs, test) { |
| 3340 EXPECT(test != NULL); | 3341 EXPECT(test != NULL); |
| 3341 typedef float (*Vrsqrtsqs)(); | 3342 typedef float (*Vrsqrtsqs)(); |
| 3342 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrtsqs, test->entry()); | 3343 float res = EXECUTE_TEST_CODE_FLOAT(Vrsqrtsqs, test->entry()); |
| 3343 EXPECT_FLOAT_EQ((3.0 - 10.0 * 5.0)/2.0, res, 0.0001f); | 3344 EXPECT_FLOAT_EQ((3.0 - 10.0 * 5.0)/2.0, res, 0.0001f); |
| 3344 } | 3345 } |
| 3345 | 3346 |
| 3346 | 3347 |
| 3347 ASSEMBLER_TEST_GENERATE(ReciprocalSqrt, assembler) { | 3348 ASSEMBLER_TEST_GENERATE(ReciprocalSqrt, assembler) { |
| 3348 if (CPUFeatures::neon_supported()) { | 3349 if (TargetCPUFeatures::neon_supported()) { |
| 3349 __ LoadSImmediate(S4, 147000.0); | 3350 __ LoadSImmediate(S4, 147000.0); |
| 3350 __ vmovs(S5, S4); | 3351 __ vmovs(S5, S4); |
| 3351 __ vmovs(S6, S4); | 3352 __ vmovs(S6, S4); |
| 3352 __ vmovs(S7, S4); | 3353 __ vmovs(S7, S4); |
| 3353 | 3354 |
| 3354 // Reciprocal square root estimate. | 3355 // Reciprocal square root estimate. |
| 3355 __ vrsqrteqs(Q0, Q1); | 3356 __ vrsqrteqs(Q0, Q1); |
| 3356 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. | 3357 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. |
| 3357 // First step. | 3358 // First step. |
| 3358 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 | 3359 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3373 | 3374 |
| 3374 ASSEMBLER_TEST_RUN(ReciprocalSqrt, test) { | 3375 ASSEMBLER_TEST_RUN(ReciprocalSqrt, test) { |
| 3375 EXPECT(test != NULL); | 3376 EXPECT(test != NULL); |
| 3376 typedef float (*ReciprocalSqrt)(); | 3377 typedef float (*ReciprocalSqrt)(); |
| 3377 float res = EXECUTE_TEST_CODE_FLOAT(ReciprocalSqrt, test->entry()); | 3378 float res = EXECUTE_TEST_CODE_FLOAT(ReciprocalSqrt, test->entry()); |
| 3378 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001f); | 3379 EXPECT_FLOAT_EQ(1.0/sqrt(147000.0), res, 0.0001f); |
| 3379 } | 3380 } |
| 3380 | 3381 |
| 3381 | 3382 |
| 3382 ASSEMBLER_TEST_GENERATE(SIMDSqrt, assembler) { | 3383 ASSEMBLER_TEST_GENERATE(SIMDSqrt, assembler) { |
| 3383 if (CPUFeatures::neon_supported()) { | 3384 if (TargetCPUFeatures::neon_supported()) { |
| 3384 __ LoadSImmediate(S4, 147000.0); | 3385 __ LoadSImmediate(S4, 147000.0); |
| 3385 __ vmovs(S5, S4); | 3386 __ vmovs(S5, S4); |
| 3386 __ vmovs(S6, S4); | 3387 __ vmovs(S6, S4); |
| 3387 __ vmovs(S7, S4); | 3388 __ vmovs(S7, S4); |
| 3388 | 3389 |
| 3389 // Reciprocal square root estimate. | 3390 // Reciprocal square root estimate. |
| 3390 __ vrsqrteqs(Q0, Q1); | 3391 __ vrsqrteqs(Q0, Q1); |
| 3391 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. | 3392 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. |
| 3392 // First step. | 3393 // First step. |
| 3393 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 | 3394 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3418 | 3419 |
| 3419 ASSEMBLER_TEST_RUN(SIMDSqrt, test) { | 3420 ASSEMBLER_TEST_RUN(SIMDSqrt, test) { |
| 3420 EXPECT(test != NULL); | 3421 EXPECT(test != NULL); |
| 3421 typedef float (*SIMDSqrt)(); | 3422 typedef float (*SIMDSqrt)(); |
| 3422 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt, test->entry()); | 3423 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt, test->entry()); |
| 3423 EXPECT_FLOAT_EQ(sqrt(147000.0), res, 0.0001f); | 3424 EXPECT_FLOAT_EQ(sqrt(147000.0), res, 0.0001f); |
| 3424 } | 3425 } |
| 3425 | 3426 |
| 3426 | 3427 |
| 3427 ASSEMBLER_TEST_GENERATE(SIMDSqrt2, assembler) { | 3428 ASSEMBLER_TEST_GENERATE(SIMDSqrt2, assembler) { |
| 3428 if (CPUFeatures::neon_supported()) { | 3429 if (TargetCPUFeatures::neon_supported()) { |
| 3429 __ LoadSImmediate(S4, 1.0); | 3430 __ LoadSImmediate(S4, 1.0); |
| 3430 __ LoadSImmediate(S5, 4.0); | 3431 __ LoadSImmediate(S5, 4.0); |
| 3431 __ LoadSImmediate(S6, 9.0); | 3432 __ LoadSImmediate(S6, 9.0); |
| 3432 __ LoadSImmediate(S7, 16.0); | 3433 __ LoadSImmediate(S7, 16.0); |
| 3433 | 3434 |
| 3434 // Reciprocal square root estimate. | 3435 // Reciprocal square root estimate. |
| 3435 __ vrsqrteqs(Q0, Q1); | 3436 __ vrsqrteqs(Q0, Q1); |
| 3436 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. | 3437 // 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. |
| 3437 // First step. | 3438 // First step. |
| 3438 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 | 3439 __ vmulqs(Q2, Q0, Q0); // Q2 <- xn^2 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3467 | 3468 |
| 3468 ASSEMBLER_TEST_RUN(SIMDSqrt2, test) { | 3469 ASSEMBLER_TEST_RUN(SIMDSqrt2, test) { |
| 3469 EXPECT(test != NULL); | 3470 EXPECT(test != NULL); |
| 3470 typedef float (*SIMDSqrt2)(); | 3471 typedef float (*SIMDSqrt2)(); |
| 3471 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt2, test->entry()); | 3472 float res = EXECUTE_TEST_CODE_FLOAT(SIMDSqrt2, test->entry()); |
| 3472 EXPECT_FLOAT_EQ(10.0, res, 0.0001f); | 3473 EXPECT_FLOAT_EQ(10.0, res, 0.0001f); |
| 3473 } | 3474 } |
| 3474 | 3475 |
| 3475 | 3476 |
| 3476 ASSEMBLER_TEST_GENERATE(SIMDDiv, assembler) { | 3477 ASSEMBLER_TEST_GENERATE(SIMDDiv, assembler) { |
| 3477 if (CPUFeatures::neon_supported()) { | 3478 if (TargetCPUFeatures::neon_supported()) { |
| 3478 __ LoadSImmediate(S4, 1.0); | 3479 __ LoadSImmediate(S4, 1.0); |
| 3479 __ LoadSImmediate(S5, 4.0); | 3480 __ LoadSImmediate(S5, 4.0); |
| 3480 __ LoadSImmediate(S6, 9.0); | 3481 __ LoadSImmediate(S6, 9.0); |
| 3481 __ LoadSImmediate(S7, 16.0); | 3482 __ LoadSImmediate(S7, 16.0); |
| 3482 | 3483 |
| 3483 __ LoadSImmediate(S12, 4.0); | 3484 __ LoadSImmediate(S12, 4.0); |
| 3484 __ LoadSImmediate(S13, 16.0); | 3485 __ LoadSImmediate(S13, 16.0); |
| 3485 __ LoadSImmediate(S14, 36.0); | 3486 __ LoadSImmediate(S14, 36.0); |
| 3486 __ LoadSImmediate(S15, 64.0); | 3487 __ LoadSImmediate(S15, 64.0); |
| 3487 | 3488 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3508 | 3509 |
| 3509 ASSEMBLER_TEST_RUN(SIMDDiv, test) { | 3510 ASSEMBLER_TEST_RUN(SIMDDiv, test) { |
| 3510 EXPECT(test != NULL); | 3511 EXPECT(test != NULL); |
| 3511 typedef float (*SIMDDiv)(); | 3512 typedef float (*SIMDDiv)(); |
| 3512 float res = EXECUTE_TEST_CODE_FLOAT(SIMDDiv, test->entry()); | 3513 float res = EXECUTE_TEST_CODE_FLOAT(SIMDDiv, test->entry()); |
| 3513 EXPECT_FLOAT_EQ(16.0, res, 0.0001f); | 3514 EXPECT_FLOAT_EQ(16.0, res, 0.0001f); |
| 3514 } | 3515 } |
| 3515 | 3516 |
| 3516 | 3517 |
| 3517 ASSEMBLER_TEST_GENERATE(Vabsqs, assembler) { | 3518 ASSEMBLER_TEST_GENERATE(Vabsqs, assembler) { |
| 3518 if (CPUFeatures::neon_supported()) { | 3519 if (TargetCPUFeatures::neon_supported()) { |
| 3519 __ LoadSImmediate(S4, 1.0); | 3520 __ LoadSImmediate(S4, 1.0); |
| 3520 __ LoadSImmediate(S5, -1.0); | 3521 __ LoadSImmediate(S5, -1.0); |
| 3521 __ LoadSImmediate(S6, 1.0); | 3522 __ LoadSImmediate(S6, 1.0); |
| 3522 __ LoadSImmediate(S7, -1.0); | 3523 __ LoadSImmediate(S7, -1.0); |
| 3523 | 3524 |
| 3524 __ vabsqs(Q0, Q1); | 3525 __ vabsqs(Q0, Q1); |
| 3525 | 3526 |
| 3526 __ vadds(S0, S0, S1); | 3527 __ vadds(S0, S0, S1); |
| 3527 __ vadds(S0, S0, S2); | 3528 __ vadds(S0, S0, S2); |
| 3528 __ vadds(S0, S0, S3); | 3529 __ vadds(S0, S0, S3); |
| 3529 | 3530 |
| 3530 __ bx(LR); | 3531 __ bx(LR); |
| 3531 } else { | 3532 } else { |
| 3532 __ LoadSImmediate(S0, 4.0); | 3533 __ LoadSImmediate(S0, 4.0); |
| 3533 __ bx(LR); | 3534 __ bx(LR); |
| 3534 } | 3535 } |
| 3535 } | 3536 } |
| 3536 | 3537 |
| 3537 | 3538 |
| 3538 ASSEMBLER_TEST_RUN(Vabsqs, test) { | 3539 ASSEMBLER_TEST_RUN(Vabsqs, test) { |
| 3539 EXPECT(test != NULL); | 3540 EXPECT(test != NULL); |
| 3540 typedef float (*Vabsqs)(); | 3541 typedef float (*Vabsqs)(); |
| 3541 float res = EXECUTE_TEST_CODE_FLOAT(Vabsqs, test->entry()); | 3542 float res = EXECUTE_TEST_CODE_FLOAT(Vabsqs, test->entry()); |
| 3542 EXPECT_FLOAT_EQ(4.0, res, 0.0001f); | 3543 EXPECT_FLOAT_EQ(4.0, res, 0.0001f); |
| 3543 } | 3544 } |
| 3544 | 3545 |
| 3545 | 3546 |
| 3546 ASSEMBLER_TEST_GENERATE(Vnegqs, assembler) { | 3547 ASSEMBLER_TEST_GENERATE(Vnegqs, assembler) { |
| 3547 if (CPUFeatures::neon_supported()) { | 3548 if (TargetCPUFeatures::neon_supported()) { |
| 3548 __ LoadSImmediate(S4, 1.0); | 3549 __ LoadSImmediate(S4, 1.0); |
| 3549 __ LoadSImmediate(S5, -2.0); | 3550 __ LoadSImmediate(S5, -2.0); |
| 3550 __ LoadSImmediate(S6, 1.0); | 3551 __ LoadSImmediate(S6, 1.0); |
| 3551 __ LoadSImmediate(S7, -2.0); | 3552 __ LoadSImmediate(S7, -2.0); |
| 3552 | 3553 |
| 3553 __ vnegqs(Q0, Q1); | 3554 __ vnegqs(Q0, Q1); |
| 3554 | 3555 |
| 3555 __ vadds(S0, S0, S1); | 3556 __ vadds(S0, S0, S1); |
| 3556 __ vadds(S0, S0, S2); | 3557 __ vadds(S0, S0, S2); |
| 3557 __ vadds(S0, S0, S3); | 3558 __ vadds(S0, S0, S3); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 3583 __ StoreIntoObject(R2, | 3584 __ StoreIntoObject(R2, |
| 3584 FieldAddress(R2, GrowableObjectArray::data_offset()), | 3585 FieldAddress(R2, GrowableObjectArray::data_offset()), |
| 3585 R1); | 3586 R1); |
| 3586 __ PopList((1 << CTX) | (1 << LR)); | 3587 __ PopList((1 << CTX) | (1 << LR)); |
| 3587 __ Ret(); | 3588 __ Ret(); |
| 3588 } | 3589 } |
| 3589 | 3590 |
| 3590 } // namespace dart | 3591 } // namespace dart |
| 3591 | 3592 |
| 3592 #endif // defined TARGET_ARCH_ARM | 3593 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |