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

Side by Side Diff: src/ia32/lithium-ia32.cc

Issue 6452001: Allow esi to be an allocatable register on IA32. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 LOperand* temp2 = TempRegister(); 1083 LOperand* temp2 = TempRegister();
1084 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), 1084 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()),
1085 temp1, 1085 temp1,
1086 temp2); 1086 temp2);
1087 } else if (v->IsCompareJSObjectEq()) { 1087 } else if (v->IsCompareJSObjectEq()) {
1088 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v); 1088 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v);
1089 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()), 1089 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()),
1090 UseRegisterAtStart(compare->right())); 1090 UseRegisterAtStart(compare->right()));
1091 } else if (v->IsInstanceOf()) { 1091 } else if (v->IsInstanceOf()) {
1092 HInstanceOf* instance_of = HInstanceOf::cast(v); 1092 HInstanceOf* instance_of = HInstanceOf::cast(v);
1093 LOperand* left = UseFixed(instance_of->left(), InstanceofStub::left());
1094 LOperand* right = UseFixed(instance_of->right(), InstanceofStub::right());
1095 LOperand* context = UseFixed(instance_of->context(), esi);
1093 LInstanceOfAndBranch* result = 1096 LInstanceOfAndBranch* result =
1094 new LInstanceOfAndBranch( 1097 new LInstanceOfAndBranch(context, left, right);
1095 UseFixed(instance_of->left(), InstanceofStub::left()),
1096 UseFixed(instance_of->right(), InstanceofStub::right()));
1097 return MarkAsCall(result, instr); 1098 return MarkAsCall(result, instr);
1098 } else if (v->IsTypeofIs()) { 1099 } else if (v->IsTypeofIs()) {
1099 HTypeofIs* typeof_is = HTypeofIs::cast(v); 1100 HTypeofIs* typeof_is = HTypeofIs::cast(v);
1100 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); 1101 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()));
1101 } else if (v->IsIsConstructCall()) { 1102 } else if (v->IsIsConstructCall()) {
1102 return new LIsConstructCallAndBranch(TempRegister()); 1103 return new LIsConstructCallAndBranch(TempRegister());
1103 } else { 1104 } else {
1104 if (v->IsConstant()) { 1105 if (v->IsConstant()) {
1105 if (HConstant::cast(v)->handle()->IsTrue()) { 1106 if (HConstant::cast(v)->handle()->IsTrue()) {
1106 return new LGoto(instr->FirstSuccessor()->block_id()); 1107 return new LGoto(instr->FirstSuccessor()->block_id());
(...skipping 20 matching lines...) Expand all
1127 return DefineAsRegister(new LArgumentsLength(Use(length->value()))); 1128 return DefineAsRegister(new LArgumentsLength(Use(length->value())));
1128 } 1129 }
1129 1130
1130 1131
1131 LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) { 1132 LInstruction* LChunkBuilder::DoArgumentsElements(HArgumentsElements* elems) {
1132 return DefineAsRegister(new LArgumentsElements); 1133 return DefineAsRegister(new LArgumentsElements);
1133 } 1134 }
1134 1135
1135 1136
1136 LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) { 1137 LInstruction* LChunkBuilder::DoInstanceOf(HInstanceOf* instr) {
1137 LInstanceOf* result = 1138 LOperand* left = UseFixed(instr->left(), InstanceofStub::left());
1138 new LInstanceOf(UseFixed(instr->left(), InstanceofStub::left()), 1139 LOperand* right = UseFixed(instr->right(), InstanceofStub::right());
1139 UseFixed(instr->right(), InstanceofStub::right())); 1140 LOperand* context = UseFixed(instr->context(), esi);
1141 LInstanceOf* result = new LInstanceOf(context, left, right);
1140 return MarkAsCall(DefineFixed(result, eax), instr); 1142 return MarkAsCall(DefineFixed(result, eax), instr);
1141 } 1143 }
1142 1144
1143 1145
1144 LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( 1146 LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal(
1145 HInstanceOfKnownGlobal* instr) { 1147 HInstanceOfKnownGlobal* instr) {
1146 LInstanceOfKnownGlobal* result = 1148 LInstanceOfKnownGlobal* result =
1147 new LInstanceOfKnownGlobal( 1149 new LInstanceOfKnownGlobal(
1148 UseFixed(instr->value(), InstanceofStub::left()), 1150 UseFixed(instr->value(), InstanceofStub::left()),
1149 FixedTemp(edi)); 1151 FixedTemp(edi));
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 default: 1227 default:
1226 UNREACHABLE(); 1228 UNREACHABLE();
1227 return NULL; 1229 return NULL;
1228 } 1230 }
1229 } 1231 }
1230 } 1232 }
1231 1233
1232 1234
1233 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { 1235 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) {
1234 ASSERT(instr->key()->representation().IsTagged()); 1236 ASSERT(instr->key()->representation().IsTagged());
1237 LOperand* context = UseFixed(instr->context(), esi);
fschneider 2011/02/09 13:41:53 I'm not sure if it is worth mentioning the context
1238 LOperand* key = UseFixed(instr->key(), ecx);
1235 argument_count_ -= instr->argument_count(); 1239 argument_count_ -= instr->argument_count();
1236 LOperand* key = UseFixed(instr->key(), ecx); 1240 LCallKeyed* result = new LCallKeyed(context, key);
1237 return MarkAsCall(DefineFixed(new LCallKeyed(key), eax), instr); 1241 return MarkAsCall(DefineFixed(result, eax), instr);
1238 } 1242 }
1239 1243
1240 1244
1241 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) { 1245 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) {
1246 LOperand* context = UseFixed(instr->context(), esi);
1242 argument_count_ -= instr->argument_count(); 1247 argument_count_ -= instr->argument_count();
1243 return MarkAsCall(DefineFixed(new LCallNamed, eax), instr); 1248 LCallNamed* result = new LCallNamed(context);
1249 return MarkAsCall(DefineFixed(result, eax), instr);
1244 } 1250 }
1245 1251
1246 1252
1247 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { 1253 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) {
1254 LOperand* context = UseFixed(instr->context(), esi);
1248 argument_count_ -= instr->argument_count(); 1255 argument_count_ -= instr->argument_count();
1249 return MarkAsCall(DefineFixed(new LCallGlobal, eax), instr); 1256 LCallGlobal* result = new LCallGlobal(context);
1257 return MarkAsCall(DefineFixed(result, eax), instr);
1250 } 1258 }
1251 1259
1252 1260
1253 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { 1261 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) {
1254 argument_count_ -= instr->argument_count(); 1262 argument_count_ -= instr->argument_count();
1255 return MarkAsCall(DefineFixed(new LCallKnownGlobal, eax), instr); 1263 return MarkAsCall(DefineFixed(new LCallKnownGlobal, eax), instr);
1256 } 1264 }
1257 1265
1258 1266
1259 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { 1267 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) {
1268 LOperand* context = UseFixed(instr->context(), esi);
1260 LOperand* constructor = UseFixed(instr->constructor(), edi); 1269 LOperand* constructor = UseFixed(instr->constructor(), edi);
1261 argument_count_ -= instr->argument_count(); 1270 argument_count_ -= instr->argument_count();
1262 LCallNew* result = new LCallNew(constructor); 1271 LCallNew* result = new LCallNew(context, constructor);
1263 return MarkAsCall(DefineFixed(result, eax), instr); 1272 return MarkAsCall(DefineFixed(result, eax), instr);
1264 } 1273 }
1265 1274
1266 1275
1267 LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) { 1276 LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) {
1277 LOperand* context = UseFixed(instr->context(), esi);
1268 argument_count_ -= instr->argument_count(); 1278 argument_count_ -= instr->argument_count();
1269 return MarkAsCall(DefineFixed(new LCallFunction, eax), instr); 1279 LCallFunction* result = new LCallFunction(context);
1280 return MarkAsCall(DefineFixed(result, eax), instr);
1270 } 1281 }
1271 1282
1272 1283
1273 LInstruction* LChunkBuilder::DoCallRuntime(HCallRuntime* instr) { 1284 LInstruction* LChunkBuilder::DoCallRuntime(HCallRuntime* instr) {
1274 argument_count_ -= instr->argument_count(); 1285 argument_count_ -= instr->argument_count();
1275 return MarkAsCall(DefineFixed(new LCallRuntime, eax), instr); 1286 return MarkAsCall(DefineFixed(new LCallRuntime, eax), instr);
1276 } 1287 }
1277 1288
1278 1289
1279 LInstruction* LChunkBuilder::DoShr(HShr* instr) { 1290 LInstruction* LChunkBuilder::DoShr(HShr* instr) {
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
1726 1737
1727 1738
1728 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { 1739 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) {
1729 ASSERT(instr->representation().IsTagged()); 1740 ASSERT(instr->representation().IsTagged());
1730 LOperand* obj = UseRegisterAtStart(instr->object()); 1741 LOperand* obj = UseRegisterAtStart(instr->object());
1731 return DefineAsRegister(new LLoadNamedField(obj)); 1742 return DefineAsRegister(new LLoadNamedField(obj));
1732 } 1743 }
1733 1744
1734 1745
1735 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { 1746 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) {
1747 LOperand* context = UseFixed(instr->context(), esi);
1736 LOperand* object = UseFixed(instr->object(), eax); 1748 LOperand* object = UseFixed(instr->object(), eax);
1737 LLoadNamedGeneric* result = new LLoadNamedGeneric(object); 1749 LLoadNamedGeneric* result = new LLoadNamedGeneric(context, object);
1738 return MarkAsCall(DefineFixed(result, eax), instr); 1750 return MarkAsCall(DefineFixed(result, eax), instr);
1739 } 1751 }
1740 1752
1741 1753
1742 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( 1754 LInstruction* LChunkBuilder::DoLoadFunctionPrototype(
1743 HLoadFunctionPrototype* instr) { 1755 HLoadFunctionPrototype* instr) {
1744 return AssignEnvironment(DefineAsRegister( 1756 return AssignEnvironment(DefineAsRegister(
1745 new LLoadFunctionPrototype(UseRegister(instr->function()), 1757 new LLoadFunctionPrototype(UseRegister(instr->function()),
1746 TempRegister()))); 1758 TempRegister())));
1747 } 1759 }
(...skipping 10 matching lines...) Expand all
1758 ASSERT(instr->representation().IsTagged()); 1770 ASSERT(instr->representation().IsTagged());
1759 ASSERT(instr->key()->representation().IsInteger32()); 1771 ASSERT(instr->key()->representation().IsInteger32());
1760 LOperand* obj = UseRegisterAtStart(instr->object()); 1772 LOperand* obj = UseRegisterAtStart(instr->object());
1761 LOperand* key = UseRegisterAtStart(instr->key()); 1773 LOperand* key = UseRegisterAtStart(instr->key());
1762 LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key); 1774 LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key);
1763 return AssignEnvironment(DefineSameAsFirst(result)); 1775 return AssignEnvironment(DefineSameAsFirst(result));
1764 } 1776 }
1765 1777
1766 1778
1767 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { 1779 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) {
1780 LOperand* context = UseFixed(instr->context(), esi);
1768 LOperand* object = UseFixed(instr->object(), edx); 1781 LOperand* object = UseFixed(instr->object(), edx);
1769 LOperand* key = UseFixed(instr->key(), eax); 1782 LOperand* key = UseFixed(instr->key(), eax);
1770 1783
1771 LLoadKeyedGeneric* result = new LLoadKeyedGeneric(object, key); 1784 LLoadKeyedGeneric* result = new LLoadKeyedGeneric(context, object, key);
1772 return MarkAsCall(DefineFixed(result, eax), instr); 1785 return MarkAsCall(DefineFixed(result, eax), instr);
1773 } 1786 }
1774 1787
1775 1788
1776 LInstruction* LChunkBuilder::DoStoreKeyedFastElement( 1789 LInstruction* LChunkBuilder::DoStoreKeyedFastElement(
1777 HStoreKeyedFastElement* instr) { 1790 HStoreKeyedFastElement* instr) {
1778 bool needs_write_barrier = instr->NeedsWriteBarrier(); 1791 bool needs_write_barrier = instr->NeedsWriteBarrier();
1779 ASSERT(instr->value()->representation().IsTagged()); 1792 ASSERT(instr->value()->representation().IsTagged());
1780 ASSERT(instr->object()->representation().IsTagged()); 1793 ASSERT(instr->object()->representation().IsTagged());
1781 ASSERT(instr->key()->representation().IsInteger32()); 1794 ASSERT(instr->key()->representation().IsInteger32());
1782 1795
1783 LOperand* obj = UseTempRegister(instr->object()); 1796 LOperand* obj = UseTempRegister(instr->object());
1784 LOperand* val = needs_write_barrier 1797 LOperand* val = needs_write_barrier
1785 ? UseTempRegister(instr->value()) 1798 ? UseTempRegister(instr->value())
1786 : UseRegisterAtStart(instr->value()); 1799 : UseRegisterAtStart(instr->value());
1787 LOperand* key = needs_write_barrier 1800 LOperand* key = needs_write_barrier
1788 ? UseTempRegister(instr->key()) 1801 ? UseTempRegister(instr->key())
1789 : UseRegisterOrConstantAtStart(instr->key()); 1802 : UseRegisterOrConstantAtStart(instr->key());
1790 1803
1791 return AssignEnvironment(new LStoreKeyedFastElement(obj, key, val)); 1804 return AssignEnvironment(new LStoreKeyedFastElement(obj, key, val));
1792 } 1805 }
1793 1806
1794 1807
1795 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { 1808 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) {
1796 LOperand* obj = UseFixed(instr->object(), edx); 1809 LOperand* context = UseFixed(instr->context(), esi);
1810 LOperand* object = UseFixed(instr->object(), edx);
1797 LOperand* key = UseFixed(instr->key(), ecx); 1811 LOperand* key = UseFixed(instr->key(), ecx);
1798 LOperand* val = UseFixed(instr->value(), eax); 1812 LOperand* value = UseFixed(instr->value(), eax);
1799 1813
1800 ASSERT(instr->object()->representation().IsTagged()); 1814 ASSERT(instr->object()->representation().IsTagged());
1801 ASSERT(instr->key()->representation().IsTagged()); 1815 ASSERT(instr->key()->representation().IsTagged());
1802 ASSERT(instr->value()->representation().IsTagged()); 1816 ASSERT(instr->value()->representation().IsTagged());
1803 1817
1804 return MarkAsCall(new LStoreKeyedGeneric(obj, key, val), instr); 1818 LStoreKeyedGeneric* result =
1819 new LStoreKeyedGeneric(context, object, key, value);
1820 return MarkAsCall(result, instr);
1805 } 1821 }
1806 1822
1807 1823
1808 LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) { 1824 LInstruction* LChunkBuilder::DoStoreNamedField(HStoreNamedField* instr) {
1809 bool needs_write_barrier = instr->NeedsWriteBarrier(); 1825 bool needs_write_barrier = instr->NeedsWriteBarrier();
1810 1826
1811 LOperand* obj = needs_write_barrier 1827 LOperand* obj = needs_write_barrier
1812 ? UseTempRegister(instr->object()) 1828 ? UseTempRegister(instr->object())
1813 : UseRegisterAtStart(instr->object()); 1829 : UseRegisterAtStart(instr->object());
1814 1830
1815 LOperand* val = needs_write_barrier 1831 LOperand* val = needs_write_barrier
1816 ? UseTempRegister(instr->value()) 1832 ? UseTempRegister(instr->value())
1817 : UseRegister(instr->value()); 1833 : UseRegister(instr->value());
1818 1834
1819 // We only need a scratch register if we have a write barrier or we 1835 // We only need a scratch register if we have a write barrier or we
1820 // have a store into the properties array (not in-object-property). 1836 // have a store into the properties array (not in-object-property).
1821 LOperand* temp = (!instr->is_in_object() || needs_write_barrier) 1837 LOperand* temp = (!instr->is_in_object() || needs_write_barrier)
1822 ? TempRegister() 1838 ? TempRegister()
1823 : NULL; 1839 : NULL;
1824 1840
1825 return new LStoreNamedField(obj, val, temp); 1841 return new LStoreNamedField(obj, val, temp);
1826 } 1842 }
1827 1843
1828 1844
1829 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { 1845 LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) {
1830 LOperand* obj = UseFixed(instr->object(), edx); 1846 LOperand* context = UseFixed(instr->context(), esi);
1831 LOperand* val = UseFixed(instr->value(), eax); 1847 LOperand* object = UseFixed(instr->object(), edx);
1848 LOperand* value = UseFixed(instr->value(), eax);
1832 1849
1833 LStoreNamedGeneric* result = new LStoreNamedGeneric(obj, val); 1850 LStoreNamedGeneric* result = new LStoreNamedGeneric(context, object, value);
1834 return MarkAsCall(result, instr); 1851 return MarkAsCall(result, instr);
1835 } 1852 }
1836 1853
1837 1854
1838 LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) { 1855 LInstruction* LChunkBuilder::DoStringCharCodeAt(HStringCharCodeAt* instr) {
1839 LOperand* string = UseRegister(instr->string()); 1856 LOperand* string = UseRegister(instr->string());
1840 LOperand* index = UseRegisterOrConstant(instr->index()); 1857 LOperand* index = UseRegisterOrConstant(instr->index());
1841 LStringCharCodeAt* result = new LStringCharCodeAt(string, index); 1858 LStringCharCodeAt* result = new LStringCharCodeAt(string, index);
1842 return AssignEnvironment(AssignPointerMap(DefineAsRegister(result))); 1859 return AssignEnvironment(AssignPointerMap(DefineAsRegister(result)));
1843 } 1860 }
1844 1861
1845 1862
1846 LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) { 1863 LInstruction* LChunkBuilder::DoStringLength(HStringLength* instr) {
1847 LOperand* string = UseRegisterAtStart(instr->value()); 1864 LOperand* string = UseRegisterAtStart(instr->value());
1848 return DefineAsRegister(new LStringLength(string)); 1865 return DefineAsRegister(new LStringLength(string));
1849 } 1866 }
1850 1867
1851 1868
1852 LInstruction* LChunkBuilder::DoArrayLiteral(HArrayLiteral* instr) { 1869 LInstruction* LChunkBuilder::DoArrayLiteral(HArrayLiteral* instr) {
1853 return MarkAsCall(DefineFixed(new LArrayLiteral, eax), instr); 1870 return MarkAsCall(DefineFixed(new LArrayLiteral, eax), instr);
1854 } 1871 }
1855 1872
1856 1873
1857 LInstruction* LChunkBuilder::DoObjectLiteral(HObjectLiteral* instr) { 1874 LInstruction* LChunkBuilder::DoObjectLiteral(HObjectLiteral* instr) {
1858 return MarkAsCall(DefineFixed(new LObjectLiteral, eax), instr); 1875 LOperand* context = UseFixed(instr->context(), esi);
1876 return MarkAsCall(DefineFixed(new LObjectLiteral(context), eax), instr);
1859 } 1877 }
1860 1878
1861 1879
1862 LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) { 1880 LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) {
1863 return MarkAsCall(DefineFixed(new LRegExpLiteral, eax), instr); 1881 return MarkAsCall(DefineFixed(new LRegExpLiteral, eax), instr);
1864 } 1882 }
1865 1883
1866 1884
1867 LInstruction* LChunkBuilder::DoFunctionLiteral(HFunctionLiteral* instr) { 1885 LInstruction* LChunkBuilder::DoFunctionLiteral(HFunctionLiteral* instr) {
1868 return MarkAsCall(DefineFixed(new LFunctionLiteral, eax), instr); 1886 return MarkAsCall(DefineFixed(new LFunctionLiteral, eax), instr);
(...skipping 20 matching lines...) Expand all
1889 } 1907 }
1890 1908
1891 1909
1892 LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) { 1910 LInstruction* LChunkBuilder::DoUnknownOSRValue(HUnknownOSRValue* instr) {
1893 int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width. 1911 int spill_index = chunk()->GetNextSpillIndex(false); // Not double-width.
1894 return DefineAsSpilled(new LUnknownOSRValue, spill_index); 1912 return DefineAsSpilled(new LUnknownOSRValue, spill_index);
1895 } 1913 }
1896 1914
1897 1915
1898 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) { 1916 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) {
1917 LOperand* context = UseFixed(instr->context(), esi);
1899 argument_count_ -= instr->argument_count(); 1918 argument_count_ -= instr->argument_count();
1900 return MarkAsCall(DefineFixed(new LCallStub, eax), instr); 1919 LCallStub* result = new LCallStub(context);
1920 return MarkAsCall(DefineFixed(result, eax), instr);
1901 } 1921 }
1902 1922
1903 1923
1904 LInstruction* LChunkBuilder::DoArgumentsObject(HArgumentsObject* instr) { 1924 LInstruction* LChunkBuilder::DoArgumentsObject(HArgumentsObject* instr) {
1905 // There are no real uses of the arguments object (we bail out in all other 1925 // There are no real uses of the arguments object (we bail out in all other
1906 // cases). 1926 // cases).
1907 return NULL; 1927 return NULL;
1908 } 1928 }
1909 1929
1910 1930
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1987 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { 2007 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) {
1988 HEnvironment* outer = current_block_->last_environment()->outer(); 2008 HEnvironment* outer = current_block_->last_environment()->outer();
1989 current_block_->UpdateEnvironment(outer); 2009 current_block_->UpdateEnvironment(outer);
1990 return NULL; 2010 return NULL;
1991 } 2011 }
1992 2012
1993 2013
1994 } } // namespace v8::internal 2014 } } // namespace v8::internal
1995 2015
1996 #endif // V8_TARGET_ARCH_IA32 2016 #endif // V8_TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698