Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: src/mips64/macro-assembler-mips64.h

Issue 2829073002: MIPS64: Move load/store instructions to macro-assembler. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/deoptimizer-mips64.cc ('k') | src/mips64/macro-assembler-mips64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/globals.h" 9 #include "src/globals.h"
10 #include "src/mips64/assembler-mips64.h" 10 #include "src/mips64/assembler-mips64.h"
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 709
710 void Ulwc1(FPURegister fd, const MemOperand& rs, Register scratch); 710 void Ulwc1(FPURegister fd, const MemOperand& rs, Register scratch);
711 void Uswc1(FPURegister fd, const MemOperand& rs, Register scratch); 711 void Uswc1(FPURegister fd, const MemOperand& rs, Register scratch);
712 712
713 void Uldc1(FPURegister fd, const MemOperand& rs, Register scratch); 713 void Uldc1(FPURegister fd, const MemOperand& rs, Register scratch);
714 void Usdc1(FPURegister fd, const MemOperand& rs, Register scratch); 714 void Usdc1(FPURegister fd, const MemOperand& rs, Register scratch);
715 715
716 void LoadWordPair(Register rd, const MemOperand& rs, Register scratch = at); 716 void LoadWordPair(Register rd, const MemOperand& rs, Register scratch = at);
717 void StoreWordPair(Register rd, const MemOperand& rs, Register scratch = at); 717 void StoreWordPair(Register rd, const MemOperand& rs, Register scratch = at);
718 718
719 void Lb(Register rd, const MemOperand& rs);
720 void Lbu(Register rd, const MemOperand& rs);
721 void Sb(Register rd, const MemOperand& rs);
722
723 void Lh(Register rd, const MemOperand& rs);
724 void Lhu(Register rd, const MemOperand& rs);
725 void Sh(Register rd, const MemOperand& rs);
726
727 void Lw(Register rd, const MemOperand& rs);
728 void Lwu(Register rd, const MemOperand& rs);
729 void Sw(Register rd, const MemOperand& rs);
730
731 void Ld(Register rd, const MemOperand& rs);
732 void Sd(Register rd, const MemOperand& rs);
733
734 void Lwc1(FPURegister fd, const MemOperand& src);
735 void Swc1(FPURegister fs, const MemOperand& dst);
736
737 void Ldc1(FPURegister fd, const MemOperand& src);
738 void Sdc1(FPURegister fs, const MemOperand& dst);
739
719 // Load int32 in the rd register. 740 // Load int32 in the rd register.
720 void li(Register rd, Operand j, LiFlags mode = OPTIMIZE_SIZE); 741 void li(Register rd, Operand j, LiFlags mode = OPTIMIZE_SIZE);
721 inline bool LiLower32BitHelper(Register rd, Operand j); 742 inline bool LiLower32BitHelper(Register rd, Operand j);
722 inline void li(Register rd, int64_t j, LiFlags mode = OPTIMIZE_SIZE) { 743 inline void li(Register rd, int64_t j, LiFlags mode = OPTIMIZE_SIZE) {
723 li(rd, Operand(j), mode); 744 li(rd, Operand(j), mode);
724 } 745 }
725 void li(Register dst, Handle<Object> value, LiFlags mode = OPTIMIZE_SIZE); 746 void li(Register dst, Handle<Object> value, LiFlags mode = OPTIMIZE_SIZE);
726 747
727 // Push multiple registers on the stack. 748 // Push multiple registers on the stack.
728 // Registers are saved in numerical order, with higher numbered registers 749 // Registers are saved in numerical order, with higher numbered registers
729 // saved in higher memory addresses. 750 // saved in higher memory addresses.
730 void MultiPush(RegList regs); 751 void MultiPush(RegList regs);
731 void MultiPushReversed(RegList regs); 752 void MultiPushReversed(RegList regs);
732 753
733 void MultiPushFPU(RegList regs); 754 void MultiPushFPU(RegList regs);
734 void MultiPushReversedFPU(RegList regs); 755 void MultiPushReversedFPU(RegList regs);
735 756
736 void push(Register src) { 757 void push(Register src) {
737 Daddu(sp, sp, Operand(-kPointerSize)); 758 Daddu(sp, sp, Operand(-kPointerSize));
738 sd(src, MemOperand(sp, 0)); 759 Sd(src, MemOperand(sp, 0));
739 } 760 }
740 void Push(Register src) { push(src); } 761 void Push(Register src) { push(src); }
741 762
742 // Push a handle. 763 // Push a handle.
743 void Push(Handle<Object> handle); 764 void Push(Handle<Object> handle);
744 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } 765 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); }
745 766
746 // Push two registers. Pushes leftmost register first (to highest address). 767 // Push two registers. Pushes leftmost register first (to highest address).
747 void Push(Register src1, Register src2) { 768 void Push(Register src1, Register src2) {
748 Dsubu(sp, sp, Operand(2 * kPointerSize)); 769 Dsubu(sp, sp, Operand(2 * kPointerSize));
749 sd(src1, MemOperand(sp, 1 * kPointerSize)); 770 Sd(src1, MemOperand(sp, 1 * kPointerSize));
750 sd(src2, MemOperand(sp, 0 * kPointerSize)); 771 Sd(src2, MemOperand(sp, 0 * kPointerSize));
751 } 772 }
752 773
753 // Push three registers. Pushes leftmost register first (to highest address). 774 // Push three registers. Pushes leftmost register first (to highest address).
754 void Push(Register src1, Register src2, Register src3) { 775 void Push(Register src1, Register src2, Register src3) {
755 Dsubu(sp, sp, Operand(3 * kPointerSize)); 776 Dsubu(sp, sp, Operand(3 * kPointerSize));
756 sd(src1, MemOperand(sp, 2 * kPointerSize)); 777 Sd(src1, MemOperand(sp, 2 * kPointerSize));
757 sd(src2, MemOperand(sp, 1 * kPointerSize)); 778 Sd(src2, MemOperand(sp, 1 * kPointerSize));
758 sd(src3, MemOperand(sp, 0 * kPointerSize)); 779 Sd(src3, MemOperand(sp, 0 * kPointerSize));
759 } 780 }
760 781
761 // Push four registers. Pushes leftmost register first (to highest address). 782 // Push four registers. Pushes leftmost register first (to highest address).
762 void Push(Register src1, Register src2, Register src3, Register src4) { 783 void Push(Register src1, Register src2, Register src3, Register src4) {
763 Dsubu(sp, sp, Operand(4 * kPointerSize)); 784 Dsubu(sp, sp, Operand(4 * kPointerSize));
764 sd(src1, MemOperand(sp, 3 * kPointerSize)); 785 Sd(src1, MemOperand(sp, 3 * kPointerSize));
765 sd(src2, MemOperand(sp, 2 * kPointerSize)); 786 Sd(src2, MemOperand(sp, 2 * kPointerSize));
766 sd(src3, MemOperand(sp, 1 * kPointerSize)); 787 Sd(src3, MemOperand(sp, 1 * kPointerSize));
767 sd(src4, MemOperand(sp, 0 * kPointerSize)); 788 Sd(src4, MemOperand(sp, 0 * kPointerSize));
768 } 789 }
769 790
770 // Push five registers. Pushes leftmost register first (to highest address). 791 // Push five registers. Pushes leftmost register first (to highest address).
771 void Push(Register src1, Register src2, Register src3, Register src4, 792 void Push(Register src1, Register src2, Register src3, Register src4,
772 Register src5) { 793 Register src5) {
773 Dsubu(sp, sp, Operand(5 * kPointerSize)); 794 Dsubu(sp, sp, Operand(5 * kPointerSize));
774 sd(src1, MemOperand(sp, 4 * kPointerSize)); 795 Sd(src1, MemOperand(sp, 4 * kPointerSize));
775 sd(src2, MemOperand(sp, 3 * kPointerSize)); 796 Sd(src2, MemOperand(sp, 3 * kPointerSize));
776 sd(src3, MemOperand(sp, 2 * kPointerSize)); 797 Sd(src3, MemOperand(sp, 2 * kPointerSize));
777 sd(src4, MemOperand(sp, 1 * kPointerSize)); 798 Sd(src4, MemOperand(sp, 1 * kPointerSize));
778 sd(src5, MemOperand(sp, 0 * kPointerSize)); 799 Sd(src5, MemOperand(sp, 0 * kPointerSize));
779 } 800 }
780 801
781 void Push(Register src, Condition cond, Register tst1, Register tst2) { 802 void Push(Register src, Condition cond, Register tst1, Register tst2) {
782 // Since we don't have conditional execution we use a Branch. 803 // Since we don't have conditional execution we use a Branch.
783 Branch(3, cond, tst1, Operand(tst2)); 804 Branch(3, cond, tst1, Operand(tst2));
784 Dsubu(sp, sp, Operand(kPointerSize)); 805 Dsubu(sp, sp, Operand(kPointerSize));
785 sd(src, MemOperand(sp, 0)); 806 Sd(src, MemOperand(sp, 0));
786 } 807 }
787 808
788 void PushRegisterAsTwoSmis(Register src, Register scratch = at); 809 void PushRegisterAsTwoSmis(Register src, Register scratch = at);
789 void PopRegisterAsTwoSmis(Register dst, Register scratch = at); 810 void PopRegisterAsTwoSmis(Register dst, Register scratch = at);
790 811
791 // Pops multiple values from the stack and load them in the 812 // Pops multiple values from the stack and load them in the
792 // registers specified in regs. Pop order is the opposite as in MultiPush. 813 // registers specified in regs. Pop order is the opposite as in MultiPush.
793 void MultiPop(RegList regs); 814 void MultiPop(RegList regs);
794 void MultiPopReversed(RegList regs); 815 void MultiPopReversed(RegList regs);
795 816
796 void MultiPopFPU(RegList regs); 817 void MultiPopFPU(RegList regs);
797 void MultiPopReversedFPU(RegList regs); 818 void MultiPopReversedFPU(RegList regs);
798 819
799 void pop(Register dst) { 820 void pop(Register dst) {
800 ld(dst, MemOperand(sp, 0)); 821 Ld(dst, MemOperand(sp, 0));
801 Daddu(sp, sp, Operand(kPointerSize)); 822 Daddu(sp, sp, Operand(kPointerSize));
802 } 823 }
803 void Pop(Register dst) { pop(dst); } 824 void Pop(Register dst) { pop(dst); }
804 825
805 // Pop two registers. Pops rightmost register first (from lower address). 826 // Pop two registers. Pops rightmost register first (from lower address).
806 void Pop(Register src1, Register src2) { 827 void Pop(Register src1, Register src2) {
807 DCHECK(!src1.is(src2)); 828 DCHECK(!src1.is(src2));
808 ld(src2, MemOperand(sp, 0 * kPointerSize)); 829 Ld(src2, MemOperand(sp, 0 * kPointerSize));
809 ld(src1, MemOperand(sp, 1 * kPointerSize)); 830 Ld(src1, MemOperand(sp, 1 * kPointerSize));
810 Daddu(sp, sp, 2 * kPointerSize); 831 Daddu(sp, sp, 2 * kPointerSize);
811 } 832 }
812 833
813 // Pop three registers. Pops rightmost register first (from lower address). 834 // Pop three registers. Pops rightmost register first (from lower address).
814 void Pop(Register src1, Register src2, Register src3) { 835 void Pop(Register src1, Register src2, Register src3) {
815 ld(src3, MemOperand(sp, 0 * kPointerSize)); 836 Ld(src3, MemOperand(sp, 0 * kPointerSize));
816 ld(src2, MemOperand(sp, 1 * kPointerSize)); 837 Ld(src2, MemOperand(sp, 1 * kPointerSize));
817 ld(src1, MemOperand(sp, 2 * kPointerSize)); 838 Ld(src1, MemOperand(sp, 2 * kPointerSize));
818 Daddu(sp, sp, 3 * kPointerSize); 839 Daddu(sp, sp, 3 * kPointerSize);
819 } 840 }
820 841
821 void Pop(uint32_t count = 1) { 842 void Pop(uint32_t count = 1) {
822 Daddu(sp, sp, Operand(count * kPointerSize)); 843 Daddu(sp, sp, Operand(count * kPointerSize));
823 } 844 }
824 845
825 // Push a fixed frame, consisting of ra, fp. 846 // Push a fixed frame, consisting of ra, fp.
826 void PushCommonFrame(Register marker_reg = no_reg); 847 void PushCommonFrame(Register marker_reg = no_reg);
827 848
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 // Machine code version of Map::GetConstructor(). 1177 // Machine code version of Map::GetConstructor().
1157 // |temp| holds |result|'s map when done, and |temp2| its instance type. 1178 // |temp| holds |result|'s map when done, and |temp2| its instance type.
1158 void GetMapConstructor(Register result, Register map, Register temp, 1179 void GetMapConstructor(Register result, Register map, Register temp,
1159 Register temp2); 1180 Register temp2);
1160 1181
1161 void GetObjectType(Register function, 1182 void GetObjectType(Register function,
1162 Register map, 1183 Register map,
1163 Register type_reg); 1184 Register type_reg);
1164 1185
1165 void GetInstanceType(Register object_map, Register object_instance_type) { 1186 void GetInstanceType(Register object_map, Register object_instance_type) {
1166 lbu(object_instance_type, 1187 Lbu(object_instance_type,
1167 FieldMemOperand(object_map, Map::kInstanceTypeOffset)); 1188 FieldMemOperand(object_map, Map::kInstanceTypeOffset));
1168 } 1189 }
1169 1190
1170 // Compare an object's map with the specified map and its transitioned 1191 // Compare an object's map with the specified map and its transitioned
1171 // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Jumps to 1192 // elements maps if mode is ALLOW_ELEMENT_TRANSITION_MAPS. Jumps to
1172 // "branch_to" if the result of the comparison is "cond". If multiple map 1193 // "branch_to" if the result of the comparison is "cond". If multiple map
1173 // compares are required, the compare sequences branches to early_success. 1194 // compares are required, the compare sequences branches to early_success.
1174 void CompareMapAndBranch(Register obj, 1195 void CompareMapAndBranch(Register obj,
1175 Register scratch, 1196 Register scratch,
1176 Handle<Map> map, 1197 Handle<Map> map,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1213 // Load the value of the weak cell in the value register. Branch to the 1234 // Load the value of the weak cell in the value register. Branch to the
1214 // given miss label is the weak cell was cleared. 1235 // given miss label is the weak cell was cleared.
1215 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss); 1236 void LoadWeakValue(Register value, Handle<WeakCell> cell, Label* miss);
1216 1237
1217 // Load and check the instance type of an object for being a string. 1238 // Load and check the instance type of an object for being a string.
1218 // Loads the type into the second argument register. 1239 // Loads the type into the second argument register.
1219 // Returns a condition that will be enabled if the object was a string. 1240 // Returns a condition that will be enabled if the object was a string.
1220 Condition IsObjectStringType(Register obj, 1241 Condition IsObjectStringType(Register obj,
1221 Register type, 1242 Register type,
1222 Register result) { 1243 Register result) {
1223 ld(type, FieldMemOperand(obj, HeapObject::kMapOffset)); 1244 Ld(type, FieldMemOperand(obj, HeapObject::kMapOffset));
1224 lbu(type, FieldMemOperand(type, Map::kInstanceTypeOffset)); 1245 Lbu(type, FieldMemOperand(type, Map::kInstanceTypeOffset));
1225 And(type, type, Operand(kIsNotStringMask)); 1246 And(type, type, Operand(kIsNotStringMask));
1226 DCHECK_EQ(0u, kStringTag); 1247 DCHECK_EQ(0u, kStringTag);
1227 return eq; 1248 return eq;
1228 } 1249 }
1229 1250
1230 // Get the number of least significant bits from a register. 1251 // Get the number of least significant bits from a register.
1231 void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits); 1252 void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits);
1232 void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits); 1253 void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits);
1233 1254
1234 // Load the value of a number object into a FPU double register. If the 1255 // Load the value of a number object into a FPU double register. If the
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 // Needs a scratch register to do some arithmetic. This register will be 1479 // Needs a scratch register to do some arithmetic. This register will be
1459 // trashed. 1480 // trashed.
1460 void PrepareCallCFunction(int num_reg_arguments, 1481 void PrepareCallCFunction(int num_reg_arguments,
1461 int num_double_registers, 1482 int num_double_registers,
1462 Register scratch); 1483 Register scratch);
1463 void PrepareCallCFunction(int num_reg_arguments, 1484 void PrepareCallCFunction(int num_reg_arguments,
1464 Register scratch); 1485 Register scratch);
1465 1486
1466 // Arguments 1-4 are placed in registers a0 thru a3 respectively. 1487 // Arguments 1-4 are placed in registers a0 thru a3 respectively.
1467 // Arguments 5..n are stored to stack using following: 1488 // Arguments 5..n are stored to stack using following:
1468 // sw(a4, CFunctionArgumentOperand(5)); 1489 // Sw(a4, CFunctionArgumentOperand(5));
1469 1490
1470 // Calls a C function and cleans up the space for arguments allocated 1491 // Calls a C function and cleans up the space for arguments allocated
1471 // by PrepareCallCFunction. The called function is not allowed to trigger a 1492 // by PrepareCallCFunction. The called function is not allowed to trigger a
1472 // garbage collection, since that might move the code and invalidate the 1493 // garbage collection, since that might move the code and invalidate the
1473 // return address (unless this is somehow accounted for by the called 1494 // return address (unless this is somehow accounted for by the called
1474 // function). 1495 // function).
1475 void CallCFunction(ExternalReference function, int num_arguments); 1496 void CallCFunction(ExternalReference function, int num_arguments);
1476 void CallCFunction(Register function, int num_arguments); 1497 void CallCFunction(Register function, int num_arguments);
1477 void CallCFunction(ExternalReference function, 1498 void CallCFunction(ExternalReference function,
1478 int num_reg_arguments, 1499 int num_reg_arguments,
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 // the position of the first bit. Leaves addr_reg unchanged. 1875 // the position of the first bit. Leaves addr_reg unchanged.
1855 inline void GetMarkBits(Register addr_reg, 1876 inline void GetMarkBits(Register addr_reg,
1856 Register bitmap_reg, 1877 Register bitmap_reg,
1857 Register mask_reg); 1878 Register mask_reg);
1858 1879
1859 // Compute memory operands for safepoint stack slots. 1880 // Compute memory operands for safepoint stack slots.
1860 static int SafepointRegisterStackIndex(int reg_code); 1881 static int SafepointRegisterStackIndex(int reg_code);
1861 MemOperand SafepointRegisterSlot(Register reg); 1882 MemOperand SafepointRegisterSlot(Register reg);
1862 MemOperand SafepointRegistersAndDoublesSlot(Register reg); 1883 MemOperand SafepointRegistersAndDoublesSlot(Register reg);
1863 1884
1885 // Helpers.
1886 void LoadRegPlusOffsetToAt(const MemOperand& src);
1887 int32_t LoadRegPlusUpperOffsetPartToAt(const MemOperand& src);
1888
1864 bool generating_stub_; 1889 bool generating_stub_;
1865 bool has_frame_; 1890 bool has_frame_;
1866 bool has_double_zero_reg_set_; 1891 bool has_double_zero_reg_set_;
1867 Isolate* isolate_; 1892 Isolate* isolate_;
1868 // This handle will be patched with the code object on installation. 1893 // This handle will be patched with the code object on installation.
1869 Handle<Object> code_object_; 1894 Handle<Object> code_object_;
1870 1895
1871 // Needs access to SafepointRegisterStackIndex for compiled frame 1896 // Needs access to SafepointRegisterStackIndex for compiled frame
1872 // traversal. 1897 // traversal.
1873 friend class StandardFrame; 1898 friend class StandardFrame;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 // addresses. 1942 // addresses.
1918 if (kArchVariant >= kMips64r6) { 1943 if (kArchVariant >= kMips64r6) {
1919 BlockTrampolinePoolFor(static_cast<int>(case_count) * 2 + 1944 BlockTrampolinePoolFor(static_cast<int>(case_count) * 2 +
1920 kSwitchTablePrologueSize); 1945 kSwitchTablePrologueSize);
1921 // Opposite of Align(8) as we have odd number of instructions in this case. 1946 // Opposite of Align(8) as we have odd number of instructions in this case.
1922 if ((pc_offset() & 7) == 0) { 1947 if ((pc_offset() & 7) == 0) {
1923 nop(); 1948 nop();
1924 } 1949 }
1925 addiupc(at, 5); 1950 addiupc(at, 5);
1926 Dlsa(at, at, index, kPointerSizeLog2); 1951 Dlsa(at, at, index, kPointerSizeLog2);
1927 ld(at, MemOperand(at)); 1952 Ld(at, MemOperand(at));
1928 } else { 1953 } else {
1929 Label here; 1954 Label here;
1930 BlockTrampolinePoolFor(static_cast<int>(case_count) * 2 + 1955 BlockTrampolinePoolFor(static_cast<int>(case_count) * 2 +
1931 kSwitchTablePrologueSize); 1956 kSwitchTablePrologueSize);
1932 Align(8); 1957 Align(8);
1933 push(ra); 1958 push(ra);
1934 bal(&here); 1959 bal(&here);
1935 dsll(at, index, kPointerSizeLog2); // Branch delay slot. 1960 dsll(at, index, kPointerSizeLog2); // Branch delay slot.
1936 bind(&here); 1961 bind(&here);
1937 daddu(at, at, ra); 1962 daddu(at, at, ra);
1938 pop(ra); 1963 pop(ra);
1939 ld(at, MemOperand(at, 6 * v8::internal::Assembler::kInstrSize)); 1964 Ld(at, MemOperand(at, 6 * v8::internal::Assembler::kInstrSize));
1940 } 1965 }
1941 jr(at); 1966 jr(at);
1942 nop(); // Branch delay slot nop. 1967 nop(); // Branch delay slot nop.
1943 for (size_t index = 0; index < case_count; ++index) { 1968 for (size_t index = 0; index < case_count; ++index) {
1944 dd(GetLabelFunction(index)); 1969 dd(GetLabelFunction(index));
1945 } 1970 }
1946 } 1971 }
1947 1972
1948 #define ACCESS_MASM(masm) masm-> 1973 #define ACCESS_MASM(masm) masm->
1949 1974
1950 } // namespace internal 1975 } // namespace internal
1951 } // namespace v8 1976 } // namespace v8
1952 1977
1953 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 1978 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips64/deoptimizer-mips64.cc ('k') | src/mips64/macro-assembler-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698