| 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 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 // ----------------------------------------------------------------------------- | 197 // ----------------------------------------------------------------------------- |
| 198 // Implementation of Operand and MemOperand | 198 // Implementation of Operand and MemOperand |
| 199 // See assembler-ppc-inl.h for inlined constructors | 199 // See assembler-ppc-inl.h for inlined constructors |
| 200 | 200 |
| 201 Operand::Operand(Handle<Object> handle) { | 201 Operand::Operand(Handle<Object> handle) { |
| 202 AllowDeferredHandleDereference using_raw_address; | 202 AllowDeferredHandleDereference using_raw_address; |
| 203 rm_ = no_reg; | 203 rm_ = no_reg; |
| 204 // Verify all Objects referred by code are NOT in new space. | 204 // Verify all Objects referred by code are NOT in new space. |
| 205 Object* obj = *handle; | 205 Object* obj = *handle; |
| 206 if (obj->IsHeapObject()) { | 206 if (obj->IsHeapObject()) { |
| 207 imm_ = reinterpret_cast<intptr_t>(handle.location()); | 207 value_.immediate = reinterpret_cast<intptr_t>(handle.location()); |
| 208 rmode_ = RelocInfo::EMBEDDED_OBJECT; | 208 rmode_ = RelocInfo::EMBEDDED_OBJECT; |
| 209 } else { | 209 } else { |
| 210 // no relocation needed | 210 // no relocation needed |
| 211 imm_ = reinterpret_cast<intptr_t>(obj); | 211 value_.immediate = reinterpret_cast<intptr_t>(obj); |
| 212 rmode_ = kRelocInfo_NONEPTR; | 212 rmode_ = kRelocInfo_NONEPTR; |
| 213 } | 213 } |
| 214 } | 214 } |
| 215 | 215 |
| 216 Operand Operand::EmbeddedNumber(double value) { |
| 217 int32_t smi; |
| 218 if (DoubleToSmiInteger(value, &smi)) return Operand(Smi::FromInt(smi)); |
| 219 Operand result(0, RelocInfo::EMBEDDED_OBJECT); |
| 220 result.is_heap_number_ = true; |
| 221 result.value_.heap_number = value; |
| 222 return result; |
| 223 } |
| 216 | 224 |
| 217 MemOperand::MemOperand(Register rn, int32_t offset) { | 225 MemOperand::MemOperand(Register rn, int32_t offset) { |
| 218 ra_ = rn; | 226 ra_ = rn; |
| 219 rb_ = no_reg; | 227 rb_ = no_reg; |
| 220 offset_ = offset; | 228 offset_ = offset; |
| 221 } | 229 } |
| 222 | 230 |
| 223 | 231 |
| 224 MemOperand::MemOperand(Register ra, Register rb) { | 232 MemOperand::MemOperand(Register ra, Register rb) { |
| 225 ra_ = ra; | 233 ra_ = ra; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 244 internal_trampoline_exception_ = false; | 252 internal_trampoline_exception_ = false; |
| 245 last_bound_pos_ = 0; | 253 last_bound_pos_ = 0; |
| 246 optimizable_cmpi_pos_ = -1; | 254 optimizable_cmpi_pos_ = -1; |
| 247 trampoline_emitted_ = FLAG_force_long_branches; | 255 trampoline_emitted_ = FLAG_force_long_branches; |
| 248 tracked_branch_count_ = 0; | 256 tracked_branch_count_ = 0; |
| 249 ClearRecordedAstId(); | 257 ClearRecordedAstId(); |
| 250 relocations_.reserve(128); | 258 relocations_.reserve(128); |
| 251 } | 259 } |
| 252 | 260 |
| 253 | 261 |
| 254 void Assembler::GetCode(CodeDesc* desc) { | 262 void Assembler::GetCode(Isolate* isolate, CodeDesc* desc) { |
| 255 // Emit constant pool if necessary. | 263 // Emit constant pool if necessary. |
| 256 int constant_pool_offset = EmitConstantPool(); | 264 int constant_pool_offset = EmitConstantPool(); |
| 257 | 265 |
| 258 EmitRelocations(); | 266 EmitRelocations(); |
| 259 | 267 |
| 268 AllocateRequestedHeapNumbers(isolate); |
| 269 |
| 260 // Set up code descriptor. | 270 // Set up code descriptor. |
| 261 desc->buffer = buffer_; | 271 desc->buffer = buffer_; |
| 262 desc->buffer_size = buffer_size_; | 272 desc->buffer_size = buffer_size_; |
| 263 desc->instr_size = pc_offset(); | 273 desc->instr_size = pc_offset(); |
| 264 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); | 274 desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); |
| 265 desc->constant_pool_size = | 275 desc->constant_pool_size = |
| 266 (constant_pool_offset ? desc->instr_size - constant_pool_offset : 0); | 276 (constant_pool_offset ? desc->instr_size - constant_pool_offset : 0); |
| 267 desc->origin = this; | 277 desc->origin = this; |
| 268 desc->unwinding_info_size = 0; | 278 desc->unwinding_info_size = 0; |
| 269 desc->unwinding_info = nullptr; | 279 desc->unwinding_info = nullptr; |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 | 746 |
| 737 | 747 |
| 738 void Assembler::b(int branch_offset, LKBit lk) { | 748 void Assembler::b(int branch_offset, LKBit lk) { |
| 739 int imm26 = branch_offset; | 749 int imm26 = branch_offset; |
| 740 CHECK(is_int26(imm26) && (imm26 & (kAAMask | kLKMask)) == 0); | 750 CHECK(is_int26(imm26) && (imm26 & (kAAMask | kLKMask)) == 0); |
| 741 emit(BX | (imm26 & kImm26Mask) | lk); | 751 emit(BX | (imm26 & kImm26Mask) | lk); |
| 742 } | 752 } |
| 743 | 753 |
| 744 | 754 |
| 745 void Assembler::xori(Register dst, Register src, const Operand& imm) { | 755 void Assembler::xori(Register dst, Register src, const Operand& imm) { |
| 746 d_form(XORI, src, dst, imm.imm_, false); | 756 d_form(XORI, src, dst, imm.immediate(), false); |
| 747 } | 757 } |
| 748 | 758 |
| 749 | 759 |
| 750 void Assembler::xoris(Register ra, Register rs, const Operand& imm) { | 760 void Assembler::xoris(Register ra, Register rs, const Operand& imm) { |
| 751 d_form(XORIS, rs, ra, imm.imm_, false); | 761 d_form(XORIS, rs, ra, imm.immediate(), false); |
| 752 } | 762 } |
| 753 | 763 |
| 754 | 764 |
| 755 void Assembler::rlwinm(Register ra, Register rs, int sh, int mb, int me, | 765 void Assembler::rlwinm(Register ra, Register rs, int sh, int mb, int me, |
| 756 RCBit rc) { | 766 RCBit rc) { |
| 757 sh &= 0x1f; | 767 sh &= 0x1f; |
| 758 mb &= 0x1f; | 768 mb &= 0x1f; |
| 759 me &= 0x1f; | 769 me &= 0x1f; |
| 760 emit(RLWINMX | rs.code() * B21 | ra.code() * B16 | sh * B11 | mb * B6 | | 770 emit(RLWINMX | rs.code() * B21 | ra.code() * B16 | sh * B11 | mb * B6 | |
| 761 me << 1 | rc); | 771 me << 1 | rc); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 775 RCBit rc) { | 785 RCBit rc) { |
| 776 sh &= 0x1f; | 786 sh &= 0x1f; |
| 777 mb &= 0x1f; | 787 mb &= 0x1f; |
| 778 me &= 0x1f; | 788 me &= 0x1f; |
| 779 emit(RLWIMIX | rs.code() * B21 | ra.code() * B16 | sh * B11 | mb * B6 | | 789 emit(RLWIMIX | rs.code() * B21 | ra.code() * B16 | sh * B11 | mb * B6 | |
| 780 me << 1 | rc); | 790 me << 1 | rc); |
| 781 } | 791 } |
| 782 | 792 |
| 783 | 793 |
| 784 void Assembler::slwi(Register dst, Register src, const Operand& val, RCBit rc) { | 794 void Assembler::slwi(Register dst, Register src, const Operand& val, RCBit rc) { |
| 785 DCHECK((32 > val.imm_) && (val.imm_ >= 0)); | 795 DCHECK((32 > val.immediate()) && (val.immediate() >= 0)); |
| 786 rlwinm(dst, src, val.imm_, 0, 31 - val.imm_, rc); | 796 rlwinm(dst, src, val.immediate(), 0, 31 - val.immediate(), rc); |
| 787 } | 797 } |
| 788 | 798 |
| 789 | 799 |
| 790 void Assembler::srwi(Register dst, Register src, const Operand& val, RCBit rc) { | 800 void Assembler::srwi(Register dst, Register src, const Operand& val, RCBit rc) { |
| 791 DCHECK((32 > val.imm_) && (val.imm_ >= 0)); | 801 DCHECK((32 > val.immediate()) && (val.immediate() >= 0)); |
| 792 rlwinm(dst, src, 32 - val.imm_, val.imm_, 31, rc); | 802 rlwinm(dst, src, 32 - val.immediate(), val.immediate(), 31, rc); |
| 793 } | 803 } |
| 794 | 804 |
| 795 | 805 |
| 796 void Assembler::clrrwi(Register dst, Register src, const Operand& val, | 806 void Assembler::clrrwi(Register dst, Register src, const Operand& val, |
| 797 RCBit rc) { | 807 RCBit rc) { |
| 798 DCHECK((32 > val.imm_) && (val.imm_ >= 0)); | 808 DCHECK((32 > val.immediate()) && (val.immediate() >= 0)); |
| 799 rlwinm(dst, src, 0, 0, 31 - val.imm_, rc); | 809 rlwinm(dst, src, 0, 0, 31 - val.immediate(), rc); |
| 800 } | 810 } |
| 801 | 811 |
| 802 | 812 |
| 803 void Assembler::clrlwi(Register dst, Register src, const Operand& val, | 813 void Assembler::clrlwi(Register dst, Register src, const Operand& val, |
| 804 RCBit rc) { | 814 RCBit rc) { |
| 805 DCHECK((32 > val.imm_) && (val.imm_ >= 0)); | 815 DCHECK((32 > val.immediate()) && (val.immediate() >= 0)); |
| 806 rlwinm(dst, src, 0, val.imm_, 31, rc); | 816 rlwinm(dst, src, 0, val.immediate(), 31, rc); |
| 807 } | 817 } |
| 808 | 818 |
| 809 | 819 |
| 810 void Assembler::rotlw(Register ra, Register rs, Register rb, RCBit r) { | 820 void Assembler::rotlw(Register ra, Register rs, Register rb, RCBit r) { |
| 811 rlwnm(ra, rs, rb, 0, 31, r); | 821 rlwnm(ra, rs, rb, 0, 31, r); |
| 812 } | 822 } |
| 813 | 823 |
| 814 | 824 |
| 815 void Assembler::rotlwi(Register ra, Register rs, int sh, RCBit r) { | 825 void Assembler::rotlwi(Register ra, Register rs, int sh, RCBit r) { |
| 816 rlwinm(ra, rs, sh, 0, 31, r); | 826 rlwinm(ra, rs, sh, 0, 31, r); |
| 817 } | 827 } |
| 818 | 828 |
| 819 | 829 |
| 820 void Assembler::rotrwi(Register ra, Register rs, int sh, RCBit r) { | 830 void Assembler::rotrwi(Register ra, Register rs, int sh, RCBit r) { |
| 821 rlwinm(ra, rs, 32 - sh, 0, 31, r); | 831 rlwinm(ra, rs, 32 - sh, 0, 31, r); |
| 822 } | 832 } |
| 823 | 833 |
| 824 | 834 |
| 825 void Assembler::subi(Register dst, Register src, const Operand& imm) { | 835 void Assembler::subi(Register dst, Register src, const Operand& imm) { |
| 826 addi(dst, src, Operand(-(imm.imm_))); | 836 addi(dst, src, Operand(-(imm.immediate()))); |
| 827 } | 837 } |
| 828 | 838 |
| 829 void Assembler::addc(Register dst, Register src1, Register src2, OEBit o, | 839 void Assembler::addc(Register dst, Register src1, Register src2, OEBit o, |
| 830 RCBit r) { | 840 RCBit r) { |
| 831 xo_form(EXT2 | ADDCX, dst, src1, src2, o, r); | 841 xo_form(EXT2 | ADDCX, dst, src1, src2, o, r); |
| 832 } | 842 } |
| 833 | 843 |
| 834 void Assembler::adde(Register dst, Register src1, Register src2, OEBit o, | 844 void Assembler::adde(Register dst, Register src1, Register src2, OEBit o, |
| 835 RCBit r) { | 845 RCBit r) { |
| 836 xo_form(EXT2 | ADDEX, dst, src1, src2, o, r); | 846 xo_form(EXT2 | ADDEX, dst, src1, src2, o, r); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 851 RCBit r) { | 861 RCBit r) { |
| 852 xo_form(EXT2 | SUBFCX, dst, src2, src1, o, r); | 862 xo_form(EXT2 | SUBFCX, dst, src2, src1, o, r); |
| 853 } | 863 } |
| 854 | 864 |
| 855 void Assembler::sube(Register dst, Register src1, Register src2, OEBit o, | 865 void Assembler::sube(Register dst, Register src1, Register src2, OEBit o, |
| 856 RCBit r) { | 866 RCBit r) { |
| 857 xo_form(EXT2 | SUBFEX, dst, src2, src1, o, r); | 867 xo_form(EXT2 | SUBFEX, dst, src2, src1, o, r); |
| 858 } | 868 } |
| 859 | 869 |
| 860 void Assembler::subfic(Register dst, Register src, const Operand& imm) { | 870 void Assembler::subfic(Register dst, Register src, const Operand& imm) { |
| 861 d_form(SUBFIC, dst, src, imm.imm_, true); | 871 d_form(SUBFIC, dst, src, imm.immediate(), true); |
| 862 } | 872 } |
| 863 | 873 |
| 864 | 874 |
| 865 void Assembler::add(Register dst, Register src1, Register src2, OEBit o, | 875 void Assembler::add(Register dst, Register src1, Register src2, OEBit o, |
| 866 RCBit r) { | 876 RCBit r) { |
| 867 xo_form(EXT2 | ADDX, dst, src1, src2, o, r); | 877 xo_form(EXT2 | ADDX, dst, src1, src2, o, r); |
| 868 } | 878 } |
| 869 | 879 |
| 870 | 880 |
| 871 // Multiply low word | 881 // Multiply low word |
| (...skipping 24 matching lines...) Expand all Loading... |
| 896 | 906 |
| 897 // Divide word unsigned | 907 // Divide word unsigned |
| 898 void Assembler::divwu(Register dst, Register src1, Register src2, OEBit o, | 908 void Assembler::divwu(Register dst, Register src1, Register src2, OEBit o, |
| 899 RCBit r) { | 909 RCBit r) { |
| 900 xo_form(EXT2 | DIVWU, dst, src1, src2, o, r); | 910 xo_form(EXT2 | DIVWU, dst, src1, src2, o, r); |
| 901 } | 911 } |
| 902 | 912 |
| 903 | 913 |
| 904 void Assembler::addi(Register dst, Register src, const Operand& imm) { | 914 void Assembler::addi(Register dst, Register src, const Operand& imm) { |
| 905 DCHECK(!src.is(r0)); // use li instead to show intent | 915 DCHECK(!src.is(r0)); // use li instead to show intent |
| 906 d_form(ADDI, dst, src, imm.imm_, true); | 916 d_form(ADDI, dst, src, imm.immediate(), true); |
| 907 } | 917 } |
| 908 | 918 |
| 909 | 919 |
| 910 void Assembler::addis(Register dst, Register src, const Operand& imm) { | 920 void Assembler::addis(Register dst, Register src, const Operand& imm) { |
| 911 DCHECK(!src.is(r0)); // use lis instead to show intent | 921 DCHECK(!src.is(r0)); // use lis instead to show intent |
| 912 d_form(ADDIS, dst, src, imm.imm_, true); | 922 d_form(ADDIS, dst, src, imm.immediate(), true); |
| 913 } | 923 } |
| 914 | 924 |
| 915 | 925 |
| 916 void Assembler::addic(Register dst, Register src, const Operand& imm) { | 926 void Assembler::addic(Register dst, Register src, const Operand& imm) { |
| 917 d_form(ADDIC, dst, src, imm.imm_, true); | 927 d_form(ADDIC, dst, src, imm.immediate(), true); |
| 918 } | 928 } |
| 919 | 929 |
| 920 | 930 |
| 921 void Assembler::andi(Register ra, Register rs, const Operand& imm) { | 931 void Assembler::andi(Register ra, Register rs, const Operand& imm) { |
| 922 d_form(ANDIx, rs, ra, imm.imm_, false); | 932 d_form(ANDIx, rs, ra, imm.immediate(), false); |
| 923 } | 933 } |
| 924 | 934 |
| 925 | 935 |
| 926 void Assembler::andis(Register ra, Register rs, const Operand& imm) { | 936 void Assembler::andis(Register ra, Register rs, const Operand& imm) { |
| 927 d_form(ANDISx, rs, ra, imm.imm_, false); | 937 d_form(ANDISx, rs, ra, imm.immediate(), false); |
| 928 } | 938 } |
| 929 | 939 |
| 930 | 940 |
| 931 void Assembler::ori(Register ra, Register rs, const Operand& imm) { | 941 void Assembler::ori(Register ra, Register rs, const Operand& imm) { |
| 932 d_form(ORI, rs, ra, imm.imm_, false); | 942 d_form(ORI, rs, ra, imm.immediate(), false); |
| 933 } | 943 } |
| 934 | 944 |
| 935 | 945 |
| 936 void Assembler::oris(Register dst, Register src, const Operand& imm) { | 946 void Assembler::oris(Register dst, Register src, const Operand& imm) { |
| 937 d_form(ORIS, src, dst, imm.imm_, false); | 947 d_form(ORIS, src, dst, imm.immediate(), false); |
| 938 } | 948 } |
| 939 | 949 |
| 940 | 950 |
| 941 void Assembler::cmpi(Register src1, const Operand& src2, CRegister cr) { | 951 void Assembler::cmpi(Register src1, const Operand& src2, CRegister cr) { |
| 942 intptr_t imm16 = src2.imm_; | 952 intptr_t imm16 = src2.immediate(); |
| 943 #if V8_TARGET_ARCH_PPC64 | 953 #if V8_TARGET_ARCH_PPC64 |
| 944 int L = 1; | 954 int L = 1; |
| 945 #else | 955 #else |
| 946 int L = 0; | 956 int L = 0; |
| 947 #endif | 957 #endif |
| 948 DCHECK(is_int16(imm16)); | 958 DCHECK(is_int16(imm16)); |
| 949 DCHECK(cr.code() >= 0 && cr.code() <= 7); | 959 DCHECK(cr.code() >= 0 && cr.code() <= 7); |
| 950 imm16 &= kImm16Mask; | 960 imm16 &= kImm16Mask; |
| 951 emit(CMPI | cr.code() * B23 | L * B21 | src1.code() * B16 | imm16); | 961 emit(CMPI | cr.code() * B23 | L * B21 | src1.code() * B16 | imm16); |
| 952 } | 962 } |
| 953 | 963 |
| 954 | 964 |
| 955 void Assembler::cmpli(Register src1, const Operand& src2, CRegister cr) { | 965 void Assembler::cmpli(Register src1, const Operand& src2, CRegister cr) { |
| 956 uintptr_t uimm16 = src2.imm_; | 966 uintptr_t uimm16 = src2.immediate(); |
| 957 #if V8_TARGET_ARCH_PPC64 | 967 #if V8_TARGET_ARCH_PPC64 |
| 958 int L = 1; | 968 int L = 1; |
| 959 #else | 969 #else |
| 960 int L = 0; | 970 int L = 0; |
| 961 #endif | 971 #endif |
| 962 DCHECK(is_uint16(uimm16)); | 972 DCHECK(is_uint16(uimm16)); |
| 963 DCHECK(cr.code() >= 0 && cr.code() <= 7); | 973 DCHECK(cr.code() >= 0 && cr.code() <= 7); |
| 964 uimm16 &= kImm16Mask; | 974 uimm16 &= kImm16Mask; |
| 965 emit(CMPLI | cr.code() * B23 | L * B21 | src1.code() * B16 | uimm16); | 975 emit(CMPLI | cr.code() * B23 | L * B21 | src1.code() * B16 | uimm16); |
| 966 } | 976 } |
| 967 | 977 |
| 968 | 978 |
| 969 void Assembler::cmpwi(Register src1, const Operand& src2, CRegister cr) { | 979 void Assembler::cmpwi(Register src1, const Operand& src2, CRegister cr) { |
| 970 intptr_t imm16 = src2.imm_; | 980 intptr_t imm16 = src2.immediate(); |
| 971 int L = 0; | 981 int L = 0; |
| 972 int pos = pc_offset(); | 982 int pos = pc_offset(); |
| 973 DCHECK(is_int16(imm16)); | 983 DCHECK(is_int16(imm16)); |
| 974 DCHECK(cr.code() >= 0 && cr.code() <= 7); | 984 DCHECK(cr.code() >= 0 && cr.code() <= 7); |
| 975 imm16 &= kImm16Mask; | 985 imm16 &= kImm16Mask; |
| 976 | 986 |
| 977 // For cmpwi against 0, save postition and cr for later examination | 987 // For cmpwi against 0, save postition and cr for later examination |
| 978 // of potential optimization. | 988 // of potential optimization. |
| 979 if (imm16 == 0 && pos > 0 && last_bound_pos_ != pos) { | 989 if (imm16 == 0 && pos > 0 && last_bound_pos_ != pos) { |
| 980 optimizable_cmpi_pos_ = pos; | 990 optimizable_cmpi_pos_ = pos; |
| 981 cmpi_cr_ = cr; | 991 cmpi_cr_ = cr; |
| 982 } | 992 } |
| 983 emit(CMPI | cr.code() * B23 | L * B21 | src1.code() * B16 | imm16); | 993 emit(CMPI | cr.code() * B23 | L * B21 | src1.code() * B16 | imm16); |
| 984 } | 994 } |
| 985 | 995 |
| 986 | 996 |
| 987 void Assembler::cmplwi(Register src1, const Operand& src2, CRegister cr) { | 997 void Assembler::cmplwi(Register src1, const Operand& src2, CRegister cr) { |
| 988 uintptr_t uimm16 = src2.imm_; | 998 uintptr_t uimm16 = src2.immediate(); |
| 989 int L = 0; | 999 int L = 0; |
| 990 DCHECK(is_uint16(uimm16)); | 1000 DCHECK(is_uint16(uimm16)); |
| 991 DCHECK(cr.code() >= 0 && cr.code() <= 7); | 1001 DCHECK(cr.code() >= 0 && cr.code() <= 7); |
| 992 uimm16 &= kImm16Mask; | 1002 uimm16 &= kImm16Mask; |
| 993 emit(CMPLI | cr.code() * B23 | L * B21 | src1.code() * B16 | uimm16); | 1003 emit(CMPLI | cr.code() * B23 | L * B21 | src1.code() * B16 | uimm16); |
| 994 } | 1004 } |
| 995 | 1005 |
| 996 | 1006 |
| 997 void Assembler::isel(Register rt, Register ra, Register rb, int cb) { | 1007 void Assembler::isel(Register rt, Register ra, Register rb, int cb) { |
| 998 emit(EXT2 | ISEL | rt.code() * B21 | ra.code() * B16 | rb.code() * B11 | | 1008 emit(EXT2 | ISEL | rt.code() * B21 | ra.code() * B16 | rb.code() * B11 | |
| 999 cb * B6); | 1009 cb * B6); |
| 1000 } | 1010 } |
| 1001 | 1011 |
| 1002 | 1012 |
| 1003 // Pseudo op - load immediate | 1013 // Pseudo op - load immediate |
| 1004 void Assembler::li(Register dst, const Operand& imm) { | 1014 void Assembler::li(Register dst, const Operand& imm) { |
| 1005 d_form(ADDI, dst, r0, imm.imm_, true); | 1015 d_form(ADDI, dst, r0, imm.immediate(), true); |
| 1006 } | 1016 } |
| 1007 | 1017 |
| 1008 | 1018 |
| 1009 void Assembler::lis(Register dst, const Operand& imm) { | 1019 void Assembler::lis(Register dst, const Operand& imm) { |
| 1010 d_form(ADDIS, dst, r0, imm.imm_, true); | 1020 d_form(ADDIS, dst, r0, imm.immediate(), true); |
| 1011 } | 1021 } |
| 1012 | 1022 |
| 1013 | 1023 |
| 1014 // Pseudo op - move register | 1024 // Pseudo op - move register |
| 1015 void Assembler::mr(Register dst, Register src) { | 1025 void Assembler::mr(Register dst, Register src) { |
| 1016 // actually or(dst, src, src) | 1026 // actually or(dst, src, src) |
| 1017 orx(dst, src, src); | 1027 orx(dst, src, src); |
| 1018 } | 1028 } |
| 1019 | 1029 |
| 1020 | 1030 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1141 mds_form(EXT5 | RLDCL, ra, rs, rb, mb, r); | 1151 mds_form(EXT5 | RLDCL, ra, rs, rb, mb, r); |
| 1142 } | 1152 } |
| 1143 | 1153 |
| 1144 | 1154 |
| 1145 void Assembler::rldicr(Register ra, Register rs, int sh, int me, RCBit r) { | 1155 void Assembler::rldicr(Register ra, Register rs, int sh, int me, RCBit r) { |
| 1146 md_form(EXT5 | RLDICR, ra, rs, sh, me, r); | 1156 md_form(EXT5 | RLDICR, ra, rs, sh, me, r); |
| 1147 } | 1157 } |
| 1148 | 1158 |
| 1149 | 1159 |
| 1150 void Assembler::sldi(Register dst, Register src, const Operand& val, RCBit rc) { | 1160 void Assembler::sldi(Register dst, Register src, const Operand& val, RCBit rc) { |
| 1151 DCHECK((64 > val.imm_) && (val.imm_ >= 0)); | 1161 DCHECK((64 > val.immediate()) && (val.immediate() >= 0)); |
| 1152 rldicr(dst, src, val.imm_, 63 - val.imm_, rc); | 1162 rldicr(dst, src, val.immediate(), 63 - val.immediate(), rc); |
| 1153 } | 1163 } |
| 1154 | 1164 |
| 1155 | 1165 |
| 1156 void Assembler::srdi(Register dst, Register src, const Operand& val, RCBit rc) { | 1166 void Assembler::srdi(Register dst, Register src, const Operand& val, RCBit rc) { |
| 1157 DCHECK((64 > val.imm_) && (val.imm_ >= 0)); | 1167 DCHECK((64 > val.immediate()) && (val.immediate() >= 0)); |
| 1158 rldicl(dst, src, 64 - val.imm_, val.imm_, rc); | 1168 rldicl(dst, src, 64 - val.immediate(), val.immediate(), rc); |
| 1159 } | 1169 } |
| 1160 | 1170 |
| 1161 | 1171 |
| 1162 void Assembler::clrrdi(Register dst, Register src, const Operand& val, | 1172 void Assembler::clrrdi(Register dst, Register src, const Operand& val, |
| 1163 RCBit rc) { | 1173 RCBit rc) { |
| 1164 DCHECK((64 > val.imm_) && (val.imm_ >= 0)); | 1174 DCHECK((64 > val.immediate()) && (val.immediate() >= 0)); |
| 1165 rldicr(dst, src, 0, 63 - val.imm_, rc); | 1175 rldicr(dst, src, 0, 63 - val.immediate(), rc); |
| 1166 } | 1176 } |
| 1167 | 1177 |
| 1168 | 1178 |
| 1169 void Assembler::clrldi(Register dst, Register src, const Operand& val, | 1179 void Assembler::clrldi(Register dst, Register src, const Operand& val, |
| 1170 RCBit rc) { | 1180 RCBit rc) { |
| 1171 DCHECK((64 > val.imm_) && (val.imm_ >= 0)); | 1181 DCHECK((64 > val.immediate()) && (val.immediate() >= 0)); |
| 1172 rldicl(dst, src, 0, val.imm_, rc); | 1182 rldicl(dst, src, 0, val.immediate(), rc); |
| 1173 } | 1183 } |
| 1174 | 1184 |
| 1175 | 1185 |
| 1176 void Assembler::rldimi(Register ra, Register rs, int sh, int mb, RCBit r) { | 1186 void Assembler::rldimi(Register ra, Register rs, int sh, int mb, RCBit r) { |
| 1177 md_form(EXT5 | RLDIMI, ra, rs, sh, mb, r); | 1187 md_form(EXT5 | RLDIMI, ra, rs, sh, mb, r); |
| 1178 } | 1188 } |
| 1179 | 1189 |
| 1180 | 1190 |
| 1181 void Assembler::sradi(Register ra, Register rs, int sh, RCBit r) { | 1191 void Assembler::sradi(Register ra, Register rs, int sh, RCBit r) { |
| 1182 int sh0_4 = sh & 0x1f; | 1192 int sh0_4 = sh & 0x1f; |
| (...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2142 } | 2152 } |
| 2143 | 2153 |
| 2144 void PatchingAssembler::FlushICache(Isolate* isolate) { | 2154 void PatchingAssembler::FlushICache(Isolate* isolate) { |
| 2145 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); | 2155 Assembler::FlushICache(isolate, buffer_, buffer_size_ - kGap); |
| 2146 } | 2156 } |
| 2147 | 2157 |
| 2148 } // namespace internal | 2158 } // namespace internal |
| 2149 } // namespace v8 | 2159 } // namespace v8 |
| 2150 | 2160 |
| 2151 #endif // V8_TARGET_ARCH_PPC | 2161 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |