OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 static uint64_t cross_compile_; | 504 static uint64_t cross_compile_; |
505 | 505 |
506 friend class ExternalReference; | 506 friend class ExternalReference; |
507 friend class PlatformFeatureScope; | 507 friend class PlatformFeatureScope; |
508 DISALLOW_COPY_AND_ASSIGN(CpuFeatures); | 508 DISALLOW_COPY_AND_ASSIGN(CpuFeatures); |
509 }; | 509 }; |
510 | 510 |
511 | 511 |
512 #define ASSEMBLER_INSTRUCTION_LIST(V) \ | 512 #define ASSEMBLER_INSTRUCTION_LIST(V) \ |
513 V(add) \ | 513 V(add) \ |
| 514 V(and) \ |
514 V(cmp) \ | 515 V(cmp) \ |
515 V(dec) \ | 516 V(dec) \ |
516 V(idiv) \ | 517 V(idiv) \ |
517 V(imul) \ | 518 V(imul) \ |
518 V(inc) \ | 519 V(inc) \ |
519 V(lea) \ | 520 V(lea) \ |
520 V(mov) \ | 521 V(mov) \ |
521 V(movzxb) \ | 522 V(movzxb) \ |
522 V(movzxw) \ | 523 V(movzxw) \ |
523 V(neg) \ | 524 V(neg) \ |
| 525 V(not) \ |
| 526 V(or) \ |
524 V(repmovs) \ | 527 V(repmovs) \ |
525 V(sbb) \ | 528 V(sbb) \ |
526 V(sub) \ | 529 V(sub) \ |
527 V(test) \ | 530 V(test) \ |
528 V(xchg) | 531 V(xchg) \ |
| 532 V(xor) |
529 | 533 |
530 | 534 |
531 class Assembler : public AssemblerBase { | 535 class Assembler : public AssemblerBase { |
532 private: | 536 private: |
533 // We check before assembling an instruction that there is sufficient | 537 // We check before assembling an instruction that there is sufficient |
534 // space to write an instruction and its relocation information. | 538 // space to write an instruction and its relocation information. |
535 // The relocation writer's position must be kGap bytes above the end of | 539 // The relocation writer's position must be kGap bytes above the end of |
536 // the generated instructions. This leaves enough space for the | 540 // the generated instructions. This leaves enough space for the |
537 // longest possible x64 instruction, 15 bytes, and the longest possible | 541 // longest possible x64 instruction, 15 bytes, and the longest possible |
538 // relocation information encoding, RelocInfoWriter::kMaxLength == 16. | 542 // relocation information encoding, RelocInfoWriter::kMaxLength == 16. |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 // | 671 // |
668 // If we need versions of an assembly instruction that operate on different | 672 // If we need versions of an assembly instruction that operate on different |
669 // width arguments, we add a single-letter suffix specifying the width. | 673 // width arguments, we add a single-letter suffix specifying the width. |
670 // This is done for the following instructions: mov, cmp, inc, dec, | 674 // This is done for the following instructions: mov, cmp, inc, dec, |
671 // add, sub, and test. | 675 // add, sub, and test. |
672 // There are no versions of these instructions without the suffix. | 676 // There are no versions of these instructions without the suffix. |
673 // - Instructions on 8-bit (byte) operands/registers have a trailing 'b'. | 677 // - Instructions on 8-bit (byte) operands/registers have a trailing 'b'. |
674 // - Instructions on 16-bit (word) operands/registers have a trailing 'w'. | 678 // - Instructions on 16-bit (word) operands/registers have a trailing 'w'. |
675 // - Instructions on 32-bit (doubleword) operands/registers use 'l'. | 679 // - Instructions on 32-bit (doubleword) operands/registers use 'l'. |
676 // - Instructions on 64-bit (quadword) operands/registers use 'q'. | 680 // - Instructions on 64-bit (quadword) operands/registers use 'q'. |
677 // | 681 // - Instructions on operands/registers with pointer size use 'p'. |
678 // Some mnemonics, such as "and", are the same as C++ keywords. | |
679 // Naming conflicts with C++ keywords are resolved by adding a trailing '_'. | |
680 | 682 |
681 #define DECLARE_INSTRUCTION(instruction) \ | 683 #define DECLARE_INSTRUCTION(instruction) \ |
682 template<class P1> \ | 684 template<class P1> \ |
683 void instruction##p(P1 p1) { \ | 685 void instruction##p(P1 p1) { \ |
684 emit_##instruction(p1, kPointerSize); \ | 686 emit_##instruction(p1, kPointerSize); \ |
685 } \ | 687 } \ |
686 \ | 688 \ |
687 template<class P1> \ | 689 template<class P1> \ |
688 void instruction##l(P1 p1) { \ | 690 void instruction##l(P1 p1) { \ |
689 emit_##instruction(p1, kInt32Size); \ | 691 emit_##instruction(p1, kInt32Size); \ |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 } | 834 } |
833 | 835 |
834 void cmpw(Register dst, Register src) { | 836 void cmpw(Register dst, Register src) { |
835 arithmetic_op_16(0x3B, dst, src); | 837 arithmetic_op_16(0x3B, dst, src); |
836 } | 838 } |
837 | 839 |
838 void cmpw(const Operand& dst, Register src) { | 840 void cmpw(const Operand& dst, Register src) { |
839 arithmetic_op_16(0x39, src, dst); | 841 arithmetic_op_16(0x39, src, dst); |
840 } | 842 } |
841 | 843 |
842 void and_(Register dst, Register src) { | |
843 arithmetic_op(0x23, dst, src); | |
844 } | |
845 | |
846 void and_(Register dst, const Operand& src) { | |
847 arithmetic_op(0x23, dst, src); | |
848 } | |
849 | |
850 void and_(const Operand& dst, Register src) { | |
851 arithmetic_op(0x21, src, dst); | |
852 } | |
853 | |
854 void and_(Register dst, Immediate src) { | |
855 immediate_arithmetic_op(0x4, dst, src); | |
856 } | |
857 | |
858 void and_(const Operand& dst, Immediate src) { | |
859 immediate_arithmetic_op(0x4, dst, src); | |
860 } | |
861 | |
862 void andl(Register dst, Immediate src) { | |
863 immediate_arithmetic_op_32(0x4, dst, src); | |
864 } | |
865 | |
866 void andl(Register dst, Register src) { | |
867 arithmetic_op_32(0x23, dst, src); | |
868 } | |
869 | |
870 void andl(Register dst, const Operand& src) { | |
871 arithmetic_op_32(0x23, dst, src); | |
872 } | |
873 | |
874 void andb(Register dst, Immediate src) { | 844 void andb(Register dst, Immediate src) { |
875 immediate_arithmetic_op_8(0x4, dst, src); | 845 immediate_arithmetic_op_8(0x4, dst, src); |
876 } | 846 } |
877 | 847 |
878 void decb(Register dst); | 848 void decb(Register dst); |
879 void decb(const Operand& dst); | 849 void decb(const Operand& dst); |
880 | 850 |
881 // Sign-extends rax into rdx:rax. | 851 // Sign-extends rax into rdx:rax. |
882 void cqo(); | 852 void cqo(); |
883 // Sign-extends eax into edx:eax. | 853 // Sign-extends eax into edx:eax. |
884 void cdq(); | 854 void cdq(); |
885 | 855 |
886 // Multiply rax by src, put the result in rdx:rax. | 856 // Multiply rax by src, put the result in rdx:rax. |
887 void mul(Register src); | 857 void mul(Register src); |
888 | 858 |
889 void not_(Register dst); | |
890 void not_(const Operand& dst); | |
891 void notl(Register dst); | |
892 | |
893 void or_(Register dst, Register src) { | |
894 arithmetic_op(0x0B, dst, src); | |
895 } | |
896 | |
897 void orl(Register dst, Register src) { | |
898 arithmetic_op_32(0x0B, dst, src); | |
899 } | |
900 | |
901 void or_(Register dst, const Operand& src) { | |
902 arithmetic_op(0x0B, dst, src); | |
903 } | |
904 | |
905 void orl(Register dst, const Operand& src) { | |
906 arithmetic_op_32(0x0B, dst, src); | |
907 } | |
908 | |
909 void or_(const Operand& dst, Register src) { | |
910 arithmetic_op(0x09, src, dst); | |
911 } | |
912 | |
913 void orl(const Operand& dst, Register src) { | |
914 arithmetic_op_32(0x09, src, dst); | |
915 } | |
916 | |
917 void or_(Register dst, Immediate src) { | |
918 immediate_arithmetic_op(0x1, dst, src); | |
919 } | |
920 | |
921 void orl(Register dst, Immediate src) { | |
922 immediate_arithmetic_op_32(0x1, dst, src); | |
923 } | |
924 | |
925 void or_(const Operand& dst, Immediate src) { | |
926 immediate_arithmetic_op(0x1, dst, src); | |
927 } | |
928 | |
929 void orl(const Operand& dst, Immediate src) { | |
930 immediate_arithmetic_op_32(0x1, dst, src); | |
931 } | |
932 | |
933 void rcl(Register dst, Immediate imm8) { | 859 void rcl(Register dst, Immediate imm8) { |
934 shift(dst, imm8, 0x2); | 860 shift(dst, imm8, 0x2); |
935 } | 861 } |
936 | 862 |
937 void rol(Register dst, Immediate imm8) { | 863 void rol(Register dst, Immediate imm8) { |
938 shift(dst, imm8, 0x0); | 864 shift(dst, imm8, 0x0); |
939 } | 865 } |
940 | 866 |
941 void roll(Register dst, Immediate imm8) { | 867 void roll(Register dst, Immediate imm8) { |
942 shift_32(dst, imm8, 0x0); | 868 shift_32(dst, imm8, 0x0); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 | 949 |
1024 void subb(Register dst, Immediate src) { | 950 void subb(Register dst, Immediate src) { |
1025 immediate_arithmetic_op_8(0x5, dst, src); | 951 immediate_arithmetic_op_8(0x5, dst, src); |
1026 } | 952 } |
1027 | 953 |
1028 void testb(Register dst, Register src); | 954 void testb(Register dst, Register src); |
1029 void testb(Register reg, Immediate mask); | 955 void testb(Register reg, Immediate mask); |
1030 void testb(const Operand& op, Immediate mask); | 956 void testb(const Operand& op, Immediate mask); |
1031 void testb(const Operand& op, Register reg); | 957 void testb(const Operand& op, Register reg); |
1032 | 958 |
1033 void xor_(Register dst, Register src) { | |
1034 if (dst.code() == src.code()) { | |
1035 arithmetic_op_32(0x33, dst, src); | |
1036 } else { | |
1037 arithmetic_op(0x33, dst, src); | |
1038 } | |
1039 } | |
1040 | |
1041 void xorl(Register dst, Register src) { | |
1042 arithmetic_op_32(0x33, dst, src); | |
1043 } | |
1044 | |
1045 void xorl(Register dst, const Operand& src) { | |
1046 arithmetic_op_32(0x33, dst, src); | |
1047 } | |
1048 | |
1049 void xorl(Register dst, Immediate src) { | |
1050 immediate_arithmetic_op_32(0x6, dst, src); | |
1051 } | |
1052 | |
1053 void xorl(const Operand& dst, Register src) { | |
1054 arithmetic_op_32(0x31, src, dst); | |
1055 } | |
1056 | |
1057 void xorl(const Operand& dst, Immediate src) { | |
1058 immediate_arithmetic_op_32(0x6, dst, src); | |
1059 } | |
1060 | |
1061 void xor_(Register dst, const Operand& src) { | |
1062 arithmetic_op(0x33, dst, src); | |
1063 } | |
1064 | |
1065 void xor_(const Operand& dst, Register src) { | |
1066 arithmetic_op(0x31, src, dst); | |
1067 } | |
1068 | |
1069 void xor_(Register dst, Immediate src) { | |
1070 immediate_arithmetic_op(0x6, dst, src); | |
1071 } | |
1072 | |
1073 void xor_(const Operand& dst, Immediate src) { | |
1074 immediate_arithmetic_op(0x6, dst, src); | |
1075 } | |
1076 | |
1077 // Bit operations. | 959 // Bit operations. |
1078 void bt(const Operand& dst, Register src); | 960 void bt(const Operand& dst, Register src); |
1079 void bts(const Operand& dst, Register src); | 961 void bts(const Operand& dst, Register src); |
1080 void bsrl(Register dst, Register src); | 962 void bsrl(Register dst, Register src); |
1081 | 963 |
1082 // Miscellaneous | 964 // Miscellaneous |
1083 void clc(); | 965 void clc(); |
1084 void cld(); | 966 void cld(); |
1085 void cpuid(); | 967 void cpuid(); |
1086 void hlt(); | 968 void hlt(); |
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 | 1510 |
1629 void emit_add(const Operand& dst, Immediate src, int size) { | 1511 void emit_add(const Operand& dst, Immediate src, int size) { |
1630 if (size == kInt64Size) { | 1512 if (size == kInt64Size) { |
1631 immediate_arithmetic_op(0x0, dst, src); | 1513 immediate_arithmetic_op(0x0, dst, src); |
1632 } else { | 1514 } else { |
1633 ASSERT(size == kInt32Size); | 1515 ASSERT(size == kInt32Size); |
1634 immediate_arithmetic_op_32(0x0, dst, src); | 1516 immediate_arithmetic_op_32(0x0, dst, src); |
1635 } | 1517 } |
1636 } | 1518 } |
1637 | 1519 |
| 1520 void emit_and(Register dst, Register src, int size) { |
| 1521 if (size == kInt64Size) { |
| 1522 arithmetic_op(0x23, dst, src); |
| 1523 } else { |
| 1524 ASSERT(size == kInt32Size); |
| 1525 arithmetic_op_32(0x23, dst, src); |
| 1526 } |
| 1527 } |
| 1528 |
| 1529 void emit_and(Register dst, const Operand& src, int size) { |
| 1530 if (size == kInt64Size) { |
| 1531 arithmetic_op(0x23, dst, src); |
| 1532 } else { |
| 1533 ASSERT(size == kInt32Size); |
| 1534 arithmetic_op_32(0x23, dst, src); |
| 1535 } |
| 1536 } |
| 1537 |
| 1538 void emit_and(const Operand& dst, Register src, int size) { |
| 1539 if (size == kInt64Size) { |
| 1540 arithmetic_op(0x21, src, dst); |
| 1541 } else { |
| 1542 ASSERT(size == kInt32Size); |
| 1543 arithmetic_op_32(0x21, src, dst); |
| 1544 } |
| 1545 } |
| 1546 |
| 1547 void emit_and(Register dst, Immediate src, int size) { |
| 1548 if (size == kInt64Size) { |
| 1549 immediate_arithmetic_op(0x4, dst, src); |
| 1550 } else { |
| 1551 ASSERT(size == kInt32Size); |
| 1552 immediate_arithmetic_op_32(0x4, dst, src); |
| 1553 } |
| 1554 } |
| 1555 |
| 1556 void emit_and(const Operand& dst, Immediate src, int size) { |
| 1557 if (size == kInt64Size) { |
| 1558 immediate_arithmetic_op(0x4, dst, src); |
| 1559 } else { |
| 1560 ASSERT(size == kInt32Size); |
| 1561 immediate_arithmetic_op_32(0x4, dst, src); |
| 1562 } |
| 1563 } |
| 1564 |
1638 void emit_cmp(Register dst, Register src, int size) { | 1565 void emit_cmp(Register dst, Register src, int size) { |
1639 if (size == kInt64Size) { | 1566 if (size == kInt64Size) { |
1640 arithmetic_op(0x3B, dst, src); | 1567 arithmetic_op(0x3B, dst, src); |
1641 } else { | 1568 } else { |
1642 ASSERT(size == kInt32Size); | 1569 ASSERT(size == kInt32Size); |
1643 arithmetic_op_32(0x3B, dst, src); | 1570 arithmetic_op_32(0x3B, dst, src); |
1644 } | 1571 } |
1645 } | 1572 } |
1646 | 1573 |
1647 void emit_cmp(Register dst, const Operand& src, int size) { | 1574 void emit_cmp(Register dst, const Operand& src, int size) { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1706 void emit_mov(Register dst, Immediate value, int size); | 1633 void emit_mov(Register dst, Immediate value, int size); |
1707 void emit_mov(const Operand& dst, Immediate value, int size); | 1634 void emit_mov(const Operand& dst, Immediate value, int size); |
1708 | 1635 |
1709 void emit_movzxb(Register dst, const Operand& src, int size); | 1636 void emit_movzxb(Register dst, const Operand& src, int size); |
1710 void emit_movzxw(Register dst, const Operand& src, int size); | 1637 void emit_movzxw(Register dst, const Operand& src, int size); |
1711 void emit_movzxw(Register dst, Register src, int size); | 1638 void emit_movzxw(Register dst, Register src, int size); |
1712 | 1639 |
1713 void emit_neg(Register dst, int size); | 1640 void emit_neg(Register dst, int size); |
1714 void emit_neg(const Operand& dst, int size); | 1641 void emit_neg(const Operand& dst, int size); |
1715 | 1642 |
| 1643 void emit_not(Register dst, int size); |
| 1644 void emit_not(const Operand& dst, int size); |
| 1645 |
| 1646 void emit_or(Register dst, Register src, int size) { |
| 1647 if (size == kInt64Size) { |
| 1648 arithmetic_op(0x0B, dst, src); |
| 1649 } else { |
| 1650 arithmetic_op_32(0x0B, dst, src); |
| 1651 } |
| 1652 } |
| 1653 |
| 1654 void emit_or(Register dst, const Operand& src, int size) { |
| 1655 if (size == kInt64Size) { |
| 1656 arithmetic_op(0x0B, dst, src); |
| 1657 } else { |
| 1658 arithmetic_op_32(0x0B, dst, src); |
| 1659 } |
| 1660 } |
| 1661 |
| 1662 void emit_or(const Operand& dst, Register src, int size) { |
| 1663 if (size == kInt64Size) { |
| 1664 arithmetic_op(0x9, src, dst); |
| 1665 } else { |
| 1666 arithmetic_op_32(0x9, src, dst); |
| 1667 } |
| 1668 } |
| 1669 |
| 1670 void emit_or(Register dst, Immediate src, int size) { |
| 1671 if (size == kInt64Size) { |
| 1672 immediate_arithmetic_op(0x1, dst, src); |
| 1673 } else { |
| 1674 immediate_arithmetic_op_32(0x1, dst, src); |
| 1675 } |
| 1676 } |
| 1677 |
| 1678 void emit_or(const Operand& dst, Immediate src, int size) { |
| 1679 if (size == kInt64Size) { |
| 1680 immediate_arithmetic_op(0x1, dst, src); |
| 1681 } else { |
| 1682 immediate_arithmetic_op_32(0x1, dst, src); |
| 1683 } |
| 1684 } |
| 1685 |
1716 void emit_repmovs(int size); | 1686 void emit_repmovs(int size); |
1717 | 1687 |
1718 void emit_sbb(Register dst, Register src, int size) { | 1688 void emit_sbb(Register dst, Register src, int size) { |
1719 if (size == kInt64Size) { | 1689 if (size == kInt64Size) { |
1720 arithmetic_op(0x1b, dst, src); | 1690 arithmetic_op(0x1b, dst, src); |
1721 } else { | 1691 } else { |
1722 ASSERT(size == kInt32Size); | 1692 ASSERT(size == kInt32Size); |
1723 arithmetic_op_32(0x1b, dst, src); | 1693 arithmetic_op_32(0x1b, dst, src); |
1724 } | 1694 } |
1725 } | 1695 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1770 } | 1740 } |
1771 | 1741 |
1772 void emit_test(Register dst, Register src, int size); | 1742 void emit_test(Register dst, Register src, int size); |
1773 void emit_test(Register reg, Immediate mask, int size); | 1743 void emit_test(Register reg, Immediate mask, int size); |
1774 void emit_test(const Operand& op, Register reg, int size); | 1744 void emit_test(const Operand& op, Register reg, int size); |
1775 void emit_test(const Operand& op, Immediate mask, int size); | 1745 void emit_test(const Operand& op, Immediate mask, int size); |
1776 | 1746 |
1777 // Exchange two registers | 1747 // Exchange two registers |
1778 void emit_xchg(Register dst, Register src, int size); | 1748 void emit_xchg(Register dst, Register src, int size); |
1779 | 1749 |
| 1750 void emit_xor(Register dst, Register src, int size) { |
| 1751 if (size == kInt64Size) { |
| 1752 if (dst.code() == src.code()) { |
| 1753 arithmetic_op_32(0x33, dst, src); |
| 1754 } else { |
| 1755 arithmetic_op(0x33, dst, src); |
| 1756 } |
| 1757 } else { |
| 1758 ASSERT(size == kInt32Size); |
| 1759 arithmetic_op_32(0x33, dst, src); |
| 1760 } |
| 1761 } |
| 1762 |
| 1763 void emit_xor(Register dst, const Operand& src, int size) { |
| 1764 if (size == kInt64Size) { |
| 1765 arithmetic_op(0x33, dst, src); |
| 1766 } else { |
| 1767 ASSERT(size == kInt32Size); |
| 1768 arithmetic_op_32(0x33, dst, src); |
| 1769 } |
| 1770 } |
| 1771 |
| 1772 void emit_xor(Register dst, Immediate src, int size) { |
| 1773 if (size == kInt64Size) { |
| 1774 immediate_arithmetic_op(0x6, dst, src); |
| 1775 } else { |
| 1776 ASSERT(size == kInt32Size); |
| 1777 immediate_arithmetic_op_32(0x6, dst, src); |
| 1778 } |
| 1779 } |
| 1780 |
| 1781 void emit_xor(const Operand& dst, Immediate src, int size) { |
| 1782 if (size == kInt64Size) { |
| 1783 immediate_arithmetic_op(0x6, dst, src); |
| 1784 } else { |
| 1785 ASSERT(size == kInt32Size); |
| 1786 immediate_arithmetic_op_32(0x6, dst, src); |
| 1787 } |
| 1788 } |
| 1789 |
| 1790 void emit_xor(const Operand& dst, Register src, int size) { |
| 1791 if (size == kInt64Size) { |
| 1792 arithmetic_op(0x31, src, dst); |
| 1793 } else { |
| 1794 ASSERT(size == kInt32Size); |
| 1795 arithmetic_op_32(0x31, src, dst); |
| 1796 } |
| 1797 } |
| 1798 |
1780 friend class CodePatcher; | 1799 friend class CodePatcher; |
1781 friend class EnsureSpace; | 1800 friend class EnsureSpace; |
1782 friend class RegExpMacroAssemblerX64; | 1801 friend class RegExpMacroAssemblerX64; |
1783 | 1802 |
1784 // code generation | 1803 // code generation |
1785 RelocInfoWriter reloc_info_writer; | 1804 RelocInfoWriter reloc_info_writer; |
1786 | 1805 |
1787 List< Handle<Code> > code_targets_; | 1806 List< Handle<Code> > code_targets_; |
1788 | 1807 |
1789 PositionsRecorder positions_recorder_; | 1808 PositionsRecorder positions_recorder_; |
(...skipping 24 matching lines...) Expand all Loading... |
1814 private: | 1833 private: |
1815 Assembler* assembler_; | 1834 Assembler* assembler_; |
1816 #ifdef DEBUG | 1835 #ifdef DEBUG |
1817 int space_before_; | 1836 int space_before_; |
1818 #endif | 1837 #endif |
1819 }; | 1838 }; |
1820 | 1839 |
1821 } } // namespace v8::internal | 1840 } } // namespace v8::internal |
1822 | 1841 |
1823 #endif // V8_X64_ASSEMBLER_X64_H_ | 1842 #endif // V8_X64_ASSEMBLER_X64_H_ |
OLD | NEW |