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

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

Issue 7060010: Merge bleeding edge into the GC branch up to 7948. The asserts (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: Created 9 years, 7 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
« no previous file with comments | « src/arm/lithium-arm.h ('k') | src/arm/lithium-codegen-arm.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 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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 } 230 }
231 231
232 232
233 void LIsSmiAndBranch::PrintDataTo(StringStream* stream) { 233 void LIsSmiAndBranch::PrintDataTo(StringStream* stream) {
234 stream->Add("if is_smi("); 234 stream->Add("if is_smi(");
235 InputAt(0)->PrintTo(stream); 235 InputAt(0)->PrintTo(stream);
236 stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); 236 stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
237 } 237 }
238 238
239 239
240 void LIsUndetectableAndBranch::PrintDataTo(StringStream* stream) {
241 stream->Add("if is_undetectable(");
242 InputAt(0)->PrintTo(stream);
243 stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
244 }
245
246
240 void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) { 247 void LHasInstanceTypeAndBranch::PrintDataTo(StringStream* stream) {
241 stream->Add("if has_instance_type("); 248 stream->Add("if has_instance_type(");
242 InputAt(0)->PrintTo(stream); 249 InputAt(0)->PrintTo(stream);
243 stream->Add(") then B%d else B%d", true_block_id(), false_block_id()); 250 stream->Add(") then B%d else B%d", true_block_id(), false_block_id());
244 } 251 }
245 252
246 253
247 void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) { 254 void LHasCachedArrayIndexAndBranch::PrintDataTo(StringStream* stream) {
248 stream->Add("if has_cached_array_index("); 255 stream->Add("if has_cached_array_index(");
249 InputAt(0)->PrintTo(stream); 256 InputAt(0)->PrintTo(stream);
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 ASSERT(ast_id != AstNode::kNoNumber); 1015 ASSERT(ast_id != AstNode::kNoNumber);
1009 int value_count = hydrogen_env->length(); 1016 int value_count = hydrogen_env->length();
1010 LEnvironment* result = new LEnvironment(hydrogen_env->closure(), 1017 LEnvironment* result = new LEnvironment(hydrogen_env->closure(),
1011 ast_id, 1018 ast_id,
1012 hydrogen_env->parameter_count(), 1019 hydrogen_env->parameter_count(),
1013 argument_count_, 1020 argument_count_,
1014 value_count, 1021 value_count,
1015 outer); 1022 outer);
1016 int argument_index = 0; 1023 int argument_index = 0;
1017 for (int i = 0; i < value_count; ++i) { 1024 for (int i = 0; i < value_count; ++i) {
1025 if (hydrogen_env->is_special_index(i)) continue;
1026
1018 HValue* value = hydrogen_env->values()->at(i); 1027 HValue* value = hydrogen_env->values()->at(i);
1019 LOperand* op = NULL; 1028 LOperand* op = NULL;
1020 if (value->IsArgumentsObject()) { 1029 if (value->IsArgumentsObject()) {
1021 op = NULL; 1030 op = NULL;
1022 } else if (value->IsPushArgument()) { 1031 } else if (value->IsPushArgument()) {
1023 op = new LArgument(argument_index++); 1032 op = new LArgument(argument_index++);
1024 } else { 1033 } else {
1025 op = UseAny(value); 1034 op = UseAny(value);
1026 } 1035 }
1027 result->AddValue(op, value->representation()); 1036 result->AddValue(op, value->representation());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 LOperand* right_operand = UseFixed(right, reversed ? r1 : r0); 1081 LOperand* right_operand = UseFixed(right, reversed ? r1 : r0);
1073 LInstruction* result = new LCmpTAndBranch(left_operand, 1082 LInstruction* result = new LCmpTAndBranch(left_operand,
1074 right_operand); 1083 right_operand);
1075 return MarkAsCall(result, instr); 1084 return MarkAsCall(result, instr);
1076 } 1085 }
1077 } else if (v->IsIsSmi()) { 1086 } else if (v->IsIsSmi()) {
1078 HIsSmi* compare = HIsSmi::cast(v); 1087 HIsSmi* compare = HIsSmi::cast(v);
1079 ASSERT(compare->value()->representation().IsTagged()); 1088 ASSERT(compare->value()->representation().IsTagged());
1080 1089
1081 return new LIsSmiAndBranch(Use(compare->value())); 1090 return new LIsSmiAndBranch(Use(compare->value()));
1091 } else if (v->IsIsUndetectable()) {
1092 HIsUndetectable* compare = HIsUndetectable::cast(v);
1093 ASSERT(compare->value()->representation().IsTagged());
1094
1095 return new LIsUndetectableAndBranch(UseRegisterAtStart(compare->value()),
1096 TempRegister());
1082 } else if (v->IsHasInstanceType()) { 1097 } else if (v->IsHasInstanceType()) {
1083 HHasInstanceType* compare = HHasInstanceType::cast(v); 1098 HHasInstanceType* compare = HHasInstanceType::cast(v);
1084 ASSERT(compare->value()->representation().IsTagged()); 1099 ASSERT(compare->value()->representation().IsTagged());
1085 return new LHasInstanceTypeAndBranch( 1100 return new LHasInstanceTypeAndBranch(
1086 UseRegisterAtStart(compare->value())); 1101 UseRegisterAtStart(compare->value()));
1087 } else if (v->IsHasCachedArrayIndex()) { 1102 } else if (v->IsHasCachedArrayIndex()) {
1088 HHasCachedArrayIndex* compare = HHasCachedArrayIndex::cast(v); 1103 HHasCachedArrayIndex* compare = HHasCachedArrayIndex::cast(v);
1089 ASSERT(compare->value()->representation().IsTagged()); 1104 ASSERT(compare->value()->representation().IsTagged());
1090 1105
1091 return new LHasCachedArrayIndexAndBranch( 1106 return new LHasCachedArrayIndexAndBranch(
1092 UseRegisterAtStart(compare->value())); 1107 UseRegisterAtStart(compare->value()));
1093 } else if (v->IsIsNull()) { 1108 } else if (v->IsIsNull()) {
1094 HIsNull* compare = HIsNull::cast(v); 1109 HIsNull* compare = HIsNull::cast(v);
1095 ASSERT(compare->value()->representation().IsTagged()); 1110 ASSERT(compare->value()->representation().IsTagged());
1096 1111
1097 return new LIsNullAndBranch(UseRegisterAtStart(compare->value())); 1112 return new LIsNullAndBranch(UseRegisterAtStart(compare->value()));
1098 } else if (v->IsIsObject()) { 1113 } else if (v->IsIsObject()) {
1099 HIsObject* compare = HIsObject::cast(v); 1114 HIsObject* compare = HIsObject::cast(v);
1100 ASSERT(compare->value()->representation().IsTagged()); 1115 ASSERT(compare->value()->representation().IsTagged());
1101 1116
1102 LOperand* temp = TempRegister(); 1117 LOperand* temp = TempRegister();
1103 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), temp); 1118 return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), temp);
1104 } else if (v->IsCompareJSObjectEq()) { 1119 } else if (v->IsCompareJSObjectEq()) {
1105 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v); 1120 HCompareJSObjectEq* compare = HCompareJSObjectEq::cast(v);
1106 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()), 1121 return new LCmpJSObjectEqAndBranch(UseRegisterAtStart(compare->left()),
1107 UseRegisterAtStart(compare->right())); 1122 UseRegisterAtStart(compare->right()));
1123 } else if (v->IsCompareSymbolEq()) {
1124 HCompareSymbolEq* compare = HCompareSymbolEq::cast(v);
1125 return new LCmpSymbolEqAndBranch(UseRegisterAtStart(compare->left()),
1126 UseRegisterAtStart(compare->right()));
1108 } else if (v->IsInstanceOf()) { 1127 } else if (v->IsInstanceOf()) {
1109 HInstanceOf* instance_of = HInstanceOf::cast(v); 1128 HInstanceOf* instance_of = HInstanceOf::cast(v);
1110 LInstruction* result = 1129 LInstruction* result =
1111 new LInstanceOfAndBranch(UseFixed(instance_of->left(), r0), 1130 new LInstanceOfAndBranch(UseFixed(instance_of->left(), r0),
1112 UseFixed(instance_of->right(), r1)); 1131 UseFixed(instance_of->right(), r1));
1113 return MarkAsCall(result, instr); 1132 return MarkAsCall(result, instr);
1114 } else if (v->IsTypeofIs()) { 1133 } else if (v->IsTypeofIs()) {
1115 HTypeofIs* typeof_is = HTypeofIs::cast(v); 1134 HTypeofIs* typeof_is = HTypeofIs::cast(v);
1116 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value())); 1135 return new LTypeofIsAndBranch(UseTempRegister(typeof_is->value()));
1117 } else if (v->IsIsConstructCall()) { 1136 } else if (v->IsIsConstructCall()) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1180 1199
1181 1200
1182 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) { 1201 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
1183 ++argument_count_; 1202 ++argument_count_;
1184 LOperand* argument = Use(instr->argument()); 1203 LOperand* argument = Use(instr->argument());
1185 return new LPushArgument(argument); 1204 return new LPushArgument(argument);
1186 } 1205 }
1187 1206
1188 1207
1189 LInstruction* LChunkBuilder::DoContext(HContext* instr) { 1208 LInstruction* LChunkBuilder::DoContext(HContext* instr) {
1190 return DefineAsRegister(new LContext); 1209 return instr->HasNoUses() ? NULL : DefineAsRegister(new LContext);
1191 } 1210 }
1192 1211
1193 1212
1194 LInstruction* LChunkBuilder::DoOuterContext(HOuterContext* instr) { 1213 LInstruction* LChunkBuilder::DoOuterContext(HOuterContext* instr) {
1195 LOperand* context = UseRegisterAtStart(instr->value()); 1214 LOperand* context = UseRegisterAtStart(instr->value());
1196 return DefineAsRegister(new LOuterContext(context)); 1215 return DefineAsRegister(new LOuterContext(context));
1197 } 1216 }
1198 1217
1199 1218
1200 LInstruction* LChunkBuilder::DoGlobalObject(HGlobalObject* instr) { 1219 LInstruction* LChunkBuilder::DoGlobalObject(HGlobalObject* instr) {
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1498 1517
1499 LInstruction* LChunkBuilder::DoCompareJSObjectEq( 1518 LInstruction* LChunkBuilder::DoCompareJSObjectEq(
1500 HCompareJSObjectEq* instr) { 1519 HCompareJSObjectEq* instr) {
1501 LOperand* left = UseRegisterAtStart(instr->left()); 1520 LOperand* left = UseRegisterAtStart(instr->left());
1502 LOperand* right = UseRegisterAtStart(instr->right()); 1521 LOperand* right = UseRegisterAtStart(instr->right());
1503 LCmpJSObjectEq* result = new LCmpJSObjectEq(left, right); 1522 LCmpJSObjectEq* result = new LCmpJSObjectEq(left, right);
1504 return DefineAsRegister(result); 1523 return DefineAsRegister(result);
1505 } 1524 }
1506 1525
1507 1526
1527 LInstruction* LChunkBuilder::DoCompareSymbolEq(
1528 HCompareSymbolEq* instr) {
1529 LOperand* left = UseRegisterAtStart(instr->left());
1530 LOperand* right = UseRegisterAtStart(instr->right());
1531 LCmpSymbolEq* result = new LCmpSymbolEq(left, right);
1532 return DefineAsRegister(result);
1533 }
1534
1535
1508 LInstruction* LChunkBuilder::DoIsNull(HIsNull* instr) { 1536 LInstruction* LChunkBuilder::DoIsNull(HIsNull* instr) {
1509 ASSERT(instr->value()->representation().IsTagged()); 1537 ASSERT(instr->value()->representation().IsTagged());
1510 LOperand* value = UseRegisterAtStart(instr->value()); 1538 LOperand* value = UseRegisterAtStart(instr->value());
1511 1539
1512 return DefineAsRegister(new LIsNull(value)); 1540 return DefineAsRegister(new LIsNull(value));
1513 } 1541 }
1514 1542
1515 1543
1516 LInstruction* LChunkBuilder::DoIsObject(HIsObject* instr) { 1544 LInstruction* LChunkBuilder::DoIsObject(HIsObject* instr) {
1517 ASSERT(instr->value()->representation().IsTagged()); 1545 ASSERT(instr->value()->representation().IsTagged());
1518 LOperand* value = UseRegisterAtStart(instr->value()); 1546 LOperand* value = UseRegisterAtStart(instr->value());
1519 1547
1520 return DefineAsRegister(new LIsObject(value)); 1548 return DefineAsRegister(new LIsObject(value));
1521 } 1549 }
1522 1550
1523 1551
1524 LInstruction* LChunkBuilder::DoIsSmi(HIsSmi* instr) { 1552 LInstruction* LChunkBuilder::DoIsSmi(HIsSmi* instr) {
1525 ASSERT(instr->value()->representation().IsTagged()); 1553 ASSERT(instr->value()->representation().IsTagged());
1526 LOperand* value = UseAtStart(instr->value()); 1554 LOperand* value = UseAtStart(instr->value());
1527 1555
1528 return DefineAsRegister(new LIsSmi(value)); 1556 return DefineAsRegister(new LIsSmi(value));
1529 } 1557 }
1530 1558
1531 1559
1560 LInstruction* LChunkBuilder::DoIsUndetectable(HIsUndetectable* instr) {
1561 ASSERT(instr->value()->representation().IsTagged());
1562 LOperand* value = UseRegisterAtStart(instr->value());
1563
1564 return DefineAsRegister(new LIsUndetectable(value));
1565 }
1566
1567
1532 LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) { 1568 LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) {
1533 ASSERT(instr->value()->representation().IsTagged()); 1569 ASSERT(instr->value()->representation().IsTagged());
1534 LOperand* value = UseRegisterAtStart(instr->value()); 1570 LOperand* value = UseRegisterAtStart(instr->value());
1535 1571
1536 return DefineAsRegister(new LHasInstanceType(value)); 1572 return DefineAsRegister(new LHasInstanceType(value));
1537 } 1573 }
1538 1574
1539 1575
1540 LInstruction* LChunkBuilder::DoGetCachedArrayIndex( 1576 LInstruction* LChunkBuilder::DoGetCachedArrayIndex(
1541 HGetCachedArrayIndex* instr) { 1577 HGetCachedArrayIndex* instr) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 return NULL; 1636 return NULL;
1601 } 1637 }
1602 1638
1603 1639
1604 LInstruction* LChunkBuilder::DoThrow(HThrow* instr) { 1640 LInstruction* LChunkBuilder::DoThrow(HThrow* instr) {
1605 LOperand* value = UseFixed(instr->value(), r0); 1641 LOperand* value = UseFixed(instr->value(), r0);
1606 return MarkAsCall(new LThrow(value), instr); 1642 return MarkAsCall(new LThrow(value), instr);
1607 } 1643 }
1608 1644
1609 1645
1646 LInstruction* LChunkBuilder::DoForceRepresentation(HForceRepresentation* bad) {
1647 // All HForceRepresentation instructions should be eliminated in the
1648 // representation change phase of Hydrogen.
1649 UNREACHABLE();
1650 return NULL;
1651 }
1652
1653
1610 LInstruction* LChunkBuilder::DoChange(HChange* instr) { 1654 LInstruction* LChunkBuilder::DoChange(HChange* instr) {
1611 Representation from = instr->from(); 1655 Representation from = instr->from();
1612 Representation to = instr->to(); 1656 Representation to = instr->to();
1613 if (from.IsTagged()) { 1657 if (from.IsTagged()) {
1614 if (to.IsDouble()) { 1658 if (to.IsDouble()) {
1615 LOperand* value = UseRegister(instr->value()); 1659 LOperand* value = UseRegister(instr->value());
1616 LNumberUntagD* res = new LNumberUntagD(value); 1660 LNumberUntagD* res = new LNumberUntagD(value);
1617 return AssignEnvironment(DefineAsRegister(res)); 1661 return AssignEnvironment(DefineAsRegister(res));
1618 } else { 1662 } else {
1619 ASSERT(to.IsInteger32()); 1663 ASSERT(to.IsInteger32());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1708 } 1752 }
1709 1753
1710 1754
1711 LInstruction* LChunkBuilder::DoCheckMap(HCheckMap* instr) { 1755 LInstruction* LChunkBuilder::DoCheckMap(HCheckMap* instr) {
1712 LOperand* value = UseRegisterAtStart(instr->value()); 1756 LOperand* value = UseRegisterAtStart(instr->value());
1713 LInstruction* result = new LCheckMap(value); 1757 LInstruction* result = new LCheckMap(value);
1714 return AssignEnvironment(result); 1758 return AssignEnvironment(result);
1715 } 1759 }
1716 1760
1717 1761
1762 LInstruction* LChunkBuilder::DoClampToUint8(HClampToUint8* instr) {
1763 HValue* value = instr->value();
1764 Representation input_rep = value->representation();
1765 LOperand* reg = UseRegister(value);
1766 if (input_rep.IsDouble()) {
1767 return DefineAsRegister(new LClampDToUint8(reg, FixedTemp(d1)));
1768 } else if (input_rep.IsInteger32()) {
1769 return DefineAsRegister(new LClampIToUint8(reg));
1770 } else {
1771 ASSERT(input_rep.IsTagged());
1772 // Register allocator doesn't (yet) support allocation of double
1773 // temps. Reserve d1 explicitly.
1774 LClampTToUint8* result = new LClampTToUint8(reg, FixedTemp(d1));
1775 return AssignEnvironment(DefineAsRegister(result));
1776 }
1777 }
1778
1779
1718 LInstruction* LChunkBuilder::DoReturn(HReturn* instr) { 1780 LInstruction* LChunkBuilder::DoReturn(HReturn* instr) {
1719 return new LReturn(UseFixed(instr->value(), r0)); 1781 return new LReturn(UseFixed(instr->value(), r0));
1720 } 1782 }
1721 1783
1722 1784
1723 LInstruction* LChunkBuilder::DoConstant(HConstant* instr) { 1785 LInstruction* LChunkBuilder::DoConstant(HConstant* instr) {
1724 Representation r = instr->representation(); 1786 Representation r = instr->representation();
1725 if (r.IsInteger32()) { 1787 if (r.IsInteger32()) {
1726 return DefineAsRegister(new LConstantI); 1788 return DefineAsRegister(new LConstantI);
1727 } else if (r.IsDouble()) { 1789 } else if (r.IsDouble()) {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 HLoadKeyedSpecializedArrayElement* instr) { 1916 HLoadKeyedSpecializedArrayElement* instr) {
1855 ExternalArrayType array_type = instr->array_type(); 1917 ExternalArrayType array_type = instr->array_type();
1856 Representation representation(instr->representation()); 1918 Representation representation(instr->representation());
1857 ASSERT( 1919 ASSERT(
1858 (representation.IsInteger32() && (array_type != kExternalFloatArray && 1920 (representation.IsInteger32() && (array_type != kExternalFloatArray &&
1859 array_type != kExternalDoubleArray)) || 1921 array_type != kExternalDoubleArray)) ||
1860 (representation.IsDouble() && (array_type == kExternalFloatArray || 1922 (representation.IsDouble() && (array_type == kExternalFloatArray ||
1861 array_type == kExternalDoubleArray))); 1923 array_type == kExternalDoubleArray)));
1862 ASSERT(instr->key()->representation().IsInteger32()); 1924 ASSERT(instr->key()->representation().IsInteger32());
1863 LOperand* external_pointer = UseRegister(instr->external_pointer()); 1925 LOperand* external_pointer = UseRegister(instr->external_pointer());
1864 LOperand* key = UseRegister(instr->key()); 1926 LOperand* key = UseRegisterOrConstant(instr->key());
1865 LLoadKeyedSpecializedArrayElement* result = 1927 LLoadKeyedSpecializedArrayElement* result =
1866 new LLoadKeyedSpecializedArrayElement(external_pointer, key); 1928 new LLoadKeyedSpecializedArrayElement(external_pointer, key);
1867 LInstruction* load_instr = DefineAsRegister(result); 1929 LInstruction* load_instr = DefineAsRegister(result);
1868 // An unsigned int array load might overflow and cause a deopt, make sure it 1930 // An unsigned int array load might overflow and cause a deopt, make sure it
1869 // has an environment. 1931 // has an environment.
1870 return (array_type == kExternalUnsignedIntArray) ? 1932 return (array_type == kExternalUnsignedIntArray) ?
1871 AssignEnvironment(load_instr) : load_instr; 1933 AssignEnvironment(load_instr) : load_instr;
1872 } 1934 }
1873 1935
1874 1936
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1912 array_type == kExternalDoubleArray))); 1974 array_type == kExternalDoubleArray)));
1913 ASSERT(instr->external_pointer()->representation().IsExternal()); 1975 ASSERT(instr->external_pointer()->representation().IsExternal());
1914 ASSERT(instr->key()->representation().IsInteger32()); 1976 ASSERT(instr->key()->representation().IsInteger32());
1915 1977
1916 LOperand* external_pointer = UseRegister(instr->external_pointer()); 1978 LOperand* external_pointer = UseRegister(instr->external_pointer());
1917 bool val_is_temp_register = array_type == kExternalPixelArray || 1979 bool val_is_temp_register = array_type == kExternalPixelArray ||
1918 array_type == kExternalFloatArray; 1980 array_type == kExternalFloatArray;
1919 LOperand* val = val_is_temp_register 1981 LOperand* val = val_is_temp_register
1920 ? UseTempRegister(instr->value()) 1982 ? UseTempRegister(instr->value())
1921 : UseRegister(instr->value()); 1983 : UseRegister(instr->value());
1922 LOperand* key = UseRegister(instr->key()); 1984 LOperand* key = UseRegisterOrConstant(instr->key());
1923 1985
1924 return new LStoreKeyedSpecializedArrayElement(external_pointer, 1986 return new LStoreKeyedSpecializedArrayElement(external_pointer,
1925 key, 1987 key,
1926 val); 1988 val);
1927 } 1989 }
1928 1990
1929 1991
1930 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { 1992 LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) {
1931 LOperand* obj = UseFixed(instr->object(), r2); 1993 LOperand* obj = UseFixed(instr->object(), r2);
1932 LOperand* key = UseFixed(instr->key(), r1); 1994 LOperand* key = UseFixed(instr->key(), r1);
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
2144 2206
2145 LInstruction* LChunkBuilder::DoIn(HIn* instr) { 2207 LInstruction* LChunkBuilder::DoIn(HIn* instr) {
2146 LOperand* key = UseRegisterAtStart(instr->key()); 2208 LOperand* key = UseRegisterAtStart(instr->key());
2147 LOperand* object = UseRegisterAtStart(instr->object()); 2209 LOperand* object = UseRegisterAtStart(instr->object());
2148 LIn* result = new LIn(key, object); 2210 LIn* result = new LIn(key, object);
2149 return MarkAsCall(DefineFixed(result, r0), instr); 2211 return MarkAsCall(DefineFixed(result, r0), instr);
2150 } 2212 }
2151 2213
2152 2214
2153 } } // namespace v8::internal 2215 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/lithium-arm.h ('k') | src/arm/lithium-codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698