| 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 | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are 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 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 EnsureSpace ensure_space(this); | 560 EnsureSpace ensure_space(this); |
| 561 if (src.is(eax) || dst.is(eax)) { // Single-byte encoding. | 561 if (src.is(eax) || dst.is(eax)) { // Single-byte encoding. |
| 562 EMIT(0x90 | (src.is(eax) ? dst.code() : src.code())); | 562 EMIT(0x90 | (src.is(eax) ? dst.code() : src.code())); |
| 563 } else { | 563 } else { |
| 564 EMIT(0x87); | 564 EMIT(0x87); |
| 565 EMIT(0xC0 | src.code() << 3 | dst.code()); | 565 EMIT(0xC0 | src.code() << 3 | dst.code()); |
| 566 } | 566 } |
| 567 } | 567 } |
| 568 | 568 |
| 569 | 569 |
| 570 void Assembler::xchg(Register dst, const Operand& src) { |
| 571 EnsureSpace ensure_space(this); |
| 572 EMIT(0x87); |
| 573 emit_operand(dst, src); |
| 574 } |
| 575 |
| 576 |
| 570 void Assembler::adc(Register dst, int32_t imm32) { | 577 void Assembler::adc(Register dst, int32_t imm32) { |
| 571 EnsureSpace ensure_space(this); | 578 EnsureSpace ensure_space(this); |
| 572 emit_arith(2, Operand(dst), Immediate(imm32)); | 579 emit_arith(2, Operand(dst), Immediate(imm32)); |
| 573 } | 580 } |
| 574 | 581 |
| 575 | 582 |
| 576 void Assembler::adc(Register dst, const Operand& src) { | 583 void Assembler::adc(Register dst, const Operand& src) { |
| 577 EnsureSpace ensure_space(this); | 584 EnsureSpace ensure_space(this); |
| 578 EMIT(0x13); | 585 EMIT(0x13); |
| 579 emit_operand(dst, src); | 586 emit_operand(dst, src); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 743 emit_operand(ecx, dst); | 750 emit_operand(ecx, dst); |
| 744 } | 751 } |
| 745 | 752 |
| 746 | 753 |
| 747 void Assembler::cdq() { | 754 void Assembler::cdq() { |
| 748 EnsureSpace ensure_space(this); | 755 EnsureSpace ensure_space(this); |
| 749 EMIT(0x99); | 756 EMIT(0x99); |
| 750 } | 757 } |
| 751 | 758 |
| 752 | 759 |
| 753 void Assembler::idiv(Register src) { | 760 void Assembler::idiv(const Operand& src) { |
| 754 EnsureSpace ensure_space(this); | 761 EnsureSpace ensure_space(this); |
| 755 EMIT(0xF7); | 762 EMIT(0xF7); |
| 756 EMIT(0xF8 | src.code()); | 763 emit_operand(edi, src); |
| 757 } | 764 } |
| 758 | 765 |
| 759 | 766 |
| 767 void Assembler::div(const Operand& src) { |
| 768 EnsureSpace ensure_space(this); |
| 769 EMIT(0xF7); |
| 770 emit_operand(esi, src); |
| 771 } |
| 772 |
| 773 |
| 760 void Assembler::imul(Register reg) { | 774 void Assembler::imul(Register reg) { |
| 761 EnsureSpace ensure_space(this); | 775 EnsureSpace ensure_space(this); |
| 762 EMIT(0xF7); | 776 EMIT(0xF7); |
| 763 EMIT(0xE8 | reg.code()); | 777 EMIT(0xE8 | reg.code()); |
| 764 } | 778 } |
| 765 | 779 |
| 766 | 780 |
| 767 void Assembler::imul(Register dst, const Operand& src) { | 781 void Assembler::imul(Register dst, const Operand& src) { |
| 768 EnsureSpace ensure_space(this); | 782 EnsureSpace ensure_space(this); |
| 769 EMIT(0x0F); | 783 EMIT(0x0F); |
| 770 EMIT(0xAF); | 784 EMIT(0xAF); |
| 771 emit_operand(dst, src); | 785 emit_operand(dst, src); |
| 772 } | 786 } |
| 773 | 787 |
| 774 | 788 |
| 775 void Assembler::imul(Register dst, Register src, int32_t imm32) { | 789 void Assembler::imul(Register dst, Register src, int32_t imm32) { |
| 790 imul(dst, Operand(src), imm32); |
| 791 } |
| 792 |
| 793 |
| 794 void Assembler::imul(Register dst, const Operand& src, int32_t imm32) { |
| 776 EnsureSpace ensure_space(this); | 795 EnsureSpace ensure_space(this); |
| 777 if (is_int8(imm32)) { | 796 if (is_int8(imm32)) { |
| 778 EMIT(0x6B); | 797 EMIT(0x6B); |
| 779 EMIT(0xC0 | dst.code() << 3 | src.code()); | 798 emit_operand(dst, src); |
| 780 EMIT(imm32); | 799 EMIT(imm32); |
| 781 } else { | 800 } else { |
| 782 EMIT(0x69); | 801 EMIT(0x69); |
| 783 EMIT(0xC0 | dst.code() << 3 | src.code()); | 802 emit_operand(dst, src); |
| 784 emit(imm32); | 803 emit(imm32); |
| 785 } | 804 } |
| 786 } | 805 } |
| 787 | 806 |
| 788 | 807 |
| 789 void Assembler::inc(Register dst) { | 808 void Assembler::inc(Register dst) { |
| 790 EnsureSpace ensure_space(this); | 809 EnsureSpace ensure_space(this); |
| 791 EMIT(0x40 | dst.code()); | 810 EMIT(0x40 | dst.code()); |
| 792 } | 811 } |
| 793 | 812 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 813 } | 832 } |
| 814 | 833 |
| 815 | 834 |
| 816 void Assembler::neg(Register dst) { | 835 void Assembler::neg(Register dst) { |
| 817 EnsureSpace ensure_space(this); | 836 EnsureSpace ensure_space(this); |
| 818 EMIT(0xF7); | 837 EMIT(0xF7); |
| 819 EMIT(0xD8 | dst.code()); | 838 EMIT(0xD8 | dst.code()); |
| 820 } | 839 } |
| 821 | 840 |
| 822 | 841 |
| 842 void Assembler::neg(const Operand& dst) { |
| 843 EnsureSpace ensure_space(this); |
| 844 EMIT(0xF7); |
| 845 emit_operand(ebx, dst); |
| 846 } |
| 847 |
| 848 |
| 823 void Assembler::not_(Register dst) { | 849 void Assembler::not_(Register dst) { |
| 824 EnsureSpace ensure_space(this); | 850 EnsureSpace ensure_space(this); |
| 825 EMIT(0xF7); | 851 EMIT(0xF7); |
| 826 EMIT(0xD0 | dst.code()); | 852 EMIT(0xD0 | dst.code()); |
| 827 } | 853 } |
| 828 | 854 |
| 829 | 855 |
| 856 void Assembler::not_(const Operand& dst) { |
| 857 EnsureSpace ensure_space(this); |
| 858 EMIT(0xF7); |
| 859 emit_operand(edx, dst); |
| 860 } |
| 861 |
| 862 |
| 830 void Assembler::or_(Register dst, int32_t imm32) { | 863 void Assembler::or_(Register dst, int32_t imm32) { |
| 831 EnsureSpace ensure_space(this); | 864 EnsureSpace ensure_space(this); |
| 832 emit_arith(1, Operand(dst), Immediate(imm32)); | 865 emit_arith(1, Operand(dst), Immediate(imm32)); |
| 833 } | 866 } |
| 834 | 867 |
| 835 | 868 |
| 836 void Assembler::or_(Register dst, const Operand& src) { | 869 void Assembler::or_(Register dst, const Operand& src) { |
| 837 EnsureSpace ensure_space(this); | 870 EnsureSpace ensure_space(this); |
| 838 EMIT(0x0B); | 871 EMIT(0x0B); |
| 839 emit_operand(dst, src); | 872 emit_operand(dst, src); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 } | 928 } |
| 896 | 929 |
| 897 | 930 |
| 898 void Assembler::ror_cl(Register dst) { | 931 void Assembler::ror_cl(Register dst) { |
| 899 EnsureSpace ensure_space(this); | 932 EnsureSpace ensure_space(this); |
| 900 EMIT(0xD3); | 933 EMIT(0xD3); |
| 901 EMIT(0xC8 | dst.code()); | 934 EMIT(0xC8 | dst.code()); |
| 902 } | 935 } |
| 903 | 936 |
| 904 | 937 |
| 905 void Assembler::sar(Register dst, uint8_t imm8) { | 938 void Assembler::sar(const Operand& dst, uint8_t imm8) { |
| 906 EnsureSpace ensure_space(this); | 939 EnsureSpace ensure_space(this); |
| 907 ASSERT(is_uint5(imm8)); // illegal shift count | 940 ASSERT(is_uint5(imm8)); // illegal shift count |
| 908 if (imm8 == 1) { | 941 if (imm8 == 1) { |
| 909 EMIT(0xD1); | 942 EMIT(0xD1); |
| 910 EMIT(0xF8 | dst.code()); | 943 emit_operand(edi, dst); |
| 911 } else { | 944 } else { |
| 912 EMIT(0xC1); | 945 EMIT(0xC1); |
| 913 EMIT(0xF8 | dst.code()); | 946 emit_operand(edi, dst); |
| 914 EMIT(imm8); | 947 EMIT(imm8); |
| 915 } | 948 } |
| 916 } | 949 } |
| 917 | 950 |
| 918 | 951 |
| 919 void Assembler::sar_cl(Register dst) { | 952 void Assembler::sar_cl(const Operand& dst) { |
| 920 EnsureSpace ensure_space(this); | 953 EnsureSpace ensure_space(this); |
| 921 EMIT(0xD3); | 954 EMIT(0xD3); |
| 922 EMIT(0xF8 | dst.code()); | 955 emit_operand(edi, dst); |
| 923 } | 956 } |
| 924 | 957 |
| 925 | 958 |
| 926 void Assembler::sbb(Register dst, const Operand& src) { | 959 void Assembler::sbb(Register dst, const Operand& src) { |
| 927 EnsureSpace ensure_space(this); | 960 EnsureSpace ensure_space(this); |
| 928 EMIT(0x1B); | 961 EMIT(0x1B); |
| 929 emit_operand(dst, src); | 962 emit_operand(dst, src); |
| 930 } | 963 } |
| 931 | 964 |
| 932 | 965 |
| 933 void Assembler::shld(Register dst, const Operand& src) { | 966 void Assembler::shld(Register dst, const Operand& src) { |
| 934 EnsureSpace ensure_space(this); | 967 EnsureSpace ensure_space(this); |
| 935 EMIT(0x0F); | 968 EMIT(0x0F); |
| 936 EMIT(0xA5); | 969 EMIT(0xA5); |
| 937 emit_operand(dst, src); | 970 emit_operand(dst, src); |
| 938 } | 971 } |
| 939 | 972 |
| 940 | 973 |
| 941 void Assembler::shl(Register dst, uint8_t imm8) { | 974 void Assembler::shl(const Operand& dst, uint8_t imm8) { |
| 942 EnsureSpace ensure_space(this); | 975 EnsureSpace ensure_space(this); |
| 943 ASSERT(is_uint5(imm8)); // illegal shift count | 976 ASSERT(is_uint5(imm8)); // illegal shift count |
| 944 if (imm8 == 1) { | 977 if (imm8 == 1) { |
| 945 EMIT(0xD1); | 978 EMIT(0xD1); |
| 946 EMIT(0xE0 | dst.code()); | 979 emit_operand(esp, dst); |
| 947 } else { | 980 } else { |
| 948 EMIT(0xC1); | 981 EMIT(0xC1); |
| 949 EMIT(0xE0 | dst.code()); | 982 emit_operand(esp, dst); |
| 950 EMIT(imm8); | 983 EMIT(imm8); |
| 951 } | 984 } |
| 952 } | 985 } |
| 953 | 986 |
| 954 | 987 |
| 955 void Assembler::shl_cl(Register dst) { | 988 void Assembler::shl_cl(const Operand& dst) { |
| 956 EnsureSpace ensure_space(this); | 989 EnsureSpace ensure_space(this); |
| 957 EMIT(0xD3); | 990 EMIT(0xD3); |
| 958 EMIT(0xE0 | dst.code()); | 991 emit_operand(esp, dst); |
| 959 } | 992 } |
| 960 | 993 |
| 961 | 994 |
| 962 void Assembler::shrd(Register dst, const Operand& src) { | 995 void Assembler::shrd(Register dst, const Operand& src) { |
| 963 EnsureSpace ensure_space(this); | 996 EnsureSpace ensure_space(this); |
| 964 EMIT(0x0F); | 997 EMIT(0x0F); |
| 965 EMIT(0xAD); | 998 EMIT(0xAD); |
| 966 emit_operand(dst, src); | 999 emit_operand(dst, src); |
| 967 } | 1000 } |
| 968 | 1001 |
| 969 | 1002 |
| 970 void Assembler::shr(Register dst, uint8_t imm8) { | 1003 void Assembler::shr(const Operand& dst, uint8_t imm8) { |
| 971 EnsureSpace ensure_space(this); | 1004 EnsureSpace ensure_space(this); |
| 972 ASSERT(is_uint5(imm8)); // illegal shift count | 1005 ASSERT(is_uint5(imm8)); // illegal shift count |
| 973 if (imm8 == 1) { | 1006 if (imm8 == 1) { |
| 974 EMIT(0xD1); | 1007 EMIT(0xD1); |
| 975 EMIT(0xE8 | dst.code()); | 1008 emit_operand(ebp, dst); |
| 976 } else { | 1009 } else { |
| 977 EMIT(0xC1); | 1010 EMIT(0xC1); |
| 978 EMIT(0xE8 | dst.code()); | 1011 emit_operand(ebp, dst); |
| 979 EMIT(imm8); | 1012 EMIT(imm8); |
| 980 } | 1013 } |
| 981 } | 1014 } |
| 982 | 1015 |
| 983 | 1016 |
| 984 void Assembler::shr_cl(Register dst) { | 1017 void Assembler::shr_cl(const Operand& dst) { |
| 985 EnsureSpace ensure_space(this); | 1018 EnsureSpace ensure_space(this); |
| 986 EMIT(0xD3); | 1019 EMIT(0xD3); |
| 987 EMIT(0xE8 | dst.code()); | 1020 emit_operand(ebp, dst); |
| 988 } | 1021 } |
| 989 | 1022 |
| 990 | 1023 |
| 991 void Assembler::sub(const Operand& dst, const Immediate& x) { | 1024 void Assembler::sub(const Operand& dst, const Immediate& x) { |
| 992 EnsureSpace ensure_space(this); | 1025 EnsureSpace ensure_space(this); |
| 993 emit_arith(5, dst, x); | 1026 emit_arith(5, dst, x); |
| 994 } | 1027 } |
| 995 | 1028 |
| 996 | 1029 |
| 997 void Assembler::sub(Register dst, const Operand& src) { | 1030 void Assembler::sub(Register dst, const Operand& src) { |
| (...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2020 fprintf(coverage_log, "%s\n", file_line); | 2053 fprintf(coverage_log, "%s\n", file_line); |
| 2021 fflush(coverage_log); | 2054 fflush(coverage_log); |
| 2022 } | 2055 } |
| 2023 } | 2056 } |
| 2024 | 2057 |
| 2025 #endif | 2058 #endif |
| 2026 | 2059 |
| 2027 } } // namespace v8::internal | 2060 } } // namespace v8::internal |
| 2028 | 2061 |
| 2029 #endif // V8_TARGET_ARCH_X87 | 2062 #endif // V8_TARGET_ARCH_X87 |
| OLD | NEW |