| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. |
| 6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "vm/dart_entry.h" | 10 #include "vm/dart_entry.h" |
| (...skipping 1021 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1032 switch (class_id_) { | 1032 switch (class_id_) { |
| 1033 case kArrayCid: | 1033 case kArrayCid: |
| 1034 case kImmutableArrayCid: | 1034 case kImmutableArrayCid: |
| 1035 return CompileType::Dynamic(); | 1035 return CompileType::Dynamic(); |
| 1036 | 1036 |
| 1037 case kTypedDataFloat32ArrayCid: | 1037 case kTypedDataFloat32ArrayCid: |
| 1038 case kTypedDataFloat64ArrayCid: | 1038 case kTypedDataFloat64ArrayCid: |
| 1039 return CompileType::FromCid(kDoubleCid); | 1039 return CompileType::FromCid(kDoubleCid); |
| 1040 case kTypedDataFloat32x4ArrayCid: | 1040 case kTypedDataFloat32x4ArrayCid: |
| 1041 return CompileType::FromCid(kFloat32x4Cid); | 1041 return CompileType::FromCid(kFloat32x4Cid); |
| 1042 case kTypedDataUint32x4ArrayCid: | 1042 case kTypedDataInt32x4ArrayCid: |
| 1043 return CompileType::FromCid(kUint32x4Cid); | 1043 return CompileType::FromCid(kInt32x4Cid); |
| 1044 | 1044 |
| 1045 case kTypedDataInt8ArrayCid: | 1045 case kTypedDataInt8ArrayCid: |
| 1046 case kTypedDataUint8ArrayCid: | 1046 case kTypedDataUint8ArrayCid: |
| 1047 case kTypedDataUint8ClampedArrayCid: | 1047 case kTypedDataUint8ClampedArrayCid: |
| 1048 case kExternalTypedDataUint8ArrayCid: | 1048 case kExternalTypedDataUint8ArrayCid: |
| 1049 case kExternalTypedDataUint8ClampedArrayCid: | 1049 case kExternalTypedDataUint8ClampedArrayCid: |
| 1050 case kTypedDataInt16ArrayCid: | 1050 case kTypedDataInt16ArrayCid: |
| 1051 case kTypedDataUint16ArrayCid: | 1051 case kTypedDataUint16ArrayCid: |
| 1052 case kOneByteStringCid: | 1052 case kOneByteStringCid: |
| 1053 case kTwoByteStringCid: | 1053 case kTwoByteStringCid: |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1083 case kTwoByteStringCid: | 1083 case kTwoByteStringCid: |
| 1084 return kTagged; | 1084 return kTagged; |
| 1085 case kTypedDataInt32ArrayCid: | 1085 case kTypedDataInt32ArrayCid: |
| 1086 case kTypedDataUint32ArrayCid: | 1086 case kTypedDataUint32ArrayCid: |
| 1087 // Instruction can deoptimize if we optimistically assumed that the result | 1087 // Instruction can deoptimize if we optimistically assumed that the result |
| 1088 // fits into Smi. | 1088 // fits into Smi. |
| 1089 return CanDeoptimize() ? kTagged : kUnboxedMint; | 1089 return CanDeoptimize() ? kTagged : kUnboxedMint; |
| 1090 case kTypedDataFloat32ArrayCid: | 1090 case kTypedDataFloat32ArrayCid: |
| 1091 case kTypedDataFloat64ArrayCid: | 1091 case kTypedDataFloat64ArrayCid: |
| 1092 return kUnboxedDouble; | 1092 return kUnboxedDouble; |
| 1093 case kTypedDataUint32x4ArrayCid: | 1093 case kTypedDataInt32x4ArrayCid: |
| 1094 return kUnboxedUint32x4; | 1094 return kUnboxedInt32x4; |
| 1095 case kTypedDataFloat32x4ArrayCid: | 1095 case kTypedDataFloat32x4ArrayCid: |
| 1096 return kUnboxedFloat32x4; | 1096 return kUnboxedFloat32x4; |
| 1097 default: | 1097 default: |
| 1098 UNIMPLEMENTED(); | 1098 UNIMPLEMENTED(); |
| 1099 return kTagged; | 1099 return kTagged; |
| 1100 } | 1100 } |
| 1101 } | 1101 } |
| 1102 | 1102 |
| 1103 | 1103 |
| 1104 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const { | 1104 LocationSummary* LoadIndexedInstr::MakeLocationSummary() const { |
| 1105 const intptr_t kNumInputs = 2; | 1105 const intptr_t kNumInputs = 2; |
| 1106 const intptr_t kNumTemps = 0; | 1106 const intptr_t kNumTemps = 0; |
| 1107 LocationSummary* locs = | 1107 LocationSummary* locs = |
| 1108 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 1108 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 1109 locs->set_in(0, Location::RequiresRegister()); | 1109 locs->set_in(0, Location::RequiresRegister()); |
| 1110 // The smi index is either untagged (element size == 1), or it is left smi | 1110 // The smi index is either untagged (element size == 1), or it is left smi |
| 1111 // tagged (for all element sizes > 1). | 1111 // tagged (for all element sizes > 1). |
| 1112 // TODO(regis): Revisit and see if the index can be immediate. | 1112 // TODO(regis): Revisit and see if the index can be immediate. |
| 1113 locs->set_in(1, Location::WritableRegister()); | 1113 locs->set_in(1, Location::WritableRegister()); |
| 1114 if ((representation() == kUnboxedDouble) || | 1114 if ((representation() == kUnboxedDouble) || |
| 1115 (representation() == kUnboxedFloat32x4) || | 1115 (representation() == kUnboxedFloat32x4) || |
| 1116 (representation() == kUnboxedUint32x4)) { | 1116 (representation() == kUnboxedInt32x4)) { |
| 1117 locs->set_out(Location::RequiresFpuRegister()); | 1117 locs->set_out(Location::RequiresFpuRegister()); |
| 1118 } else { | 1118 } else { |
| 1119 locs->set_out(Location::RequiresRegister()); | 1119 locs->set_out(Location::RequiresRegister()); |
| 1120 } | 1120 } |
| 1121 return locs; | 1121 return locs; |
| 1122 } | 1122 } |
| 1123 | 1123 |
| 1124 | 1124 |
| 1125 void LoadIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 1125 void LoadIndexedInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 1126 __ TraceSimMsg("LoadIndexedInstr"); | 1126 __ TraceSimMsg("LoadIndexedInstr"); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 // If the data offset doesn't fit into the 18 bits we get for the addressing | 1166 // If the data offset doesn't fit into the 18 bits we get for the addressing |
| 1167 // mode, then we must load the offset into a register and add it to the | 1167 // mode, then we must load the offset into a register and add it to the |
| 1168 // index. | 1168 // index. |
| 1169 element_address = Address(index.reg(), | 1169 element_address = Address(index.reg(), |
| 1170 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); | 1170 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 if ((representation() == kUnboxedDouble) || | 1173 if ((representation() == kUnboxedDouble) || |
| 1174 (representation() == kUnboxedMint) || | 1174 (representation() == kUnboxedMint) || |
| 1175 (representation() == kUnboxedFloat32x4) || | 1175 (representation() == kUnboxedFloat32x4) || |
| 1176 (representation() == kUnboxedUint32x4)) { | 1176 (representation() == kUnboxedInt32x4)) { |
| 1177 DRegister result = locs()->out().fpu_reg(); | 1177 DRegister result = locs()->out().fpu_reg(); |
| 1178 switch (class_id()) { | 1178 switch (class_id()) { |
| 1179 case kTypedDataInt32ArrayCid: | 1179 case kTypedDataInt32ArrayCid: |
| 1180 UNIMPLEMENTED(); | 1180 UNIMPLEMENTED(); |
| 1181 break; | 1181 break; |
| 1182 case kTypedDataUint32ArrayCid: | 1182 case kTypedDataUint32ArrayCid: |
| 1183 UNIMPLEMENTED(); | 1183 UNIMPLEMENTED(); |
| 1184 break; | 1184 break; |
| 1185 case kTypedDataFloat32ArrayCid: | 1185 case kTypedDataFloat32ArrayCid: |
| 1186 // Load single precision float and promote to double. | 1186 // Load single precision float and promote to double. |
| 1187 __ lwc1(STMP1, element_address); | 1187 __ lwc1(STMP1, element_address); |
| 1188 __ cvtds(result, STMP1); | 1188 __ cvtds(result, STMP1); |
| 1189 break; | 1189 break; |
| 1190 case kTypedDataFloat64ArrayCid: | 1190 case kTypedDataFloat64ArrayCid: |
| 1191 __ LoadDFromOffset(result, index.reg(), | 1191 __ LoadDFromOffset(result, index.reg(), |
| 1192 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); | 1192 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); |
| 1193 break; | 1193 break; |
| 1194 case kTypedDataUint32x4ArrayCid: | 1194 case kTypedDataInt32x4ArrayCid: |
| 1195 case kTypedDataFloat32x4ArrayCid: | 1195 case kTypedDataFloat32x4ArrayCid: |
| 1196 UNIMPLEMENTED(); | 1196 UNIMPLEMENTED(); |
| 1197 break; | 1197 break; |
| 1198 } | 1198 } |
| 1199 return; | 1199 return; |
| 1200 } | 1200 } |
| 1201 | 1201 |
| 1202 Register result = locs()->out().reg(); | 1202 Register result = locs()->out().reg(); |
| 1203 switch (class_id()) { | 1203 switch (class_id()) { |
| 1204 case kTypedDataInt8ArrayCid: | 1204 case kTypedDataInt8ArrayCid: |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1268 case kTypedDataUint16ArrayCid: | 1268 case kTypedDataUint16ArrayCid: |
| 1269 return kTagged; | 1269 return kTagged; |
| 1270 case kTypedDataInt32ArrayCid: | 1270 case kTypedDataInt32ArrayCid: |
| 1271 case kTypedDataUint32ArrayCid: | 1271 case kTypedDataUint32ArrayCid: |
| 1272 return value()->IsSmiValue() ? kTagged : kUnboxedMint; | 1272 return value()->IsSmiValue() ? kTagged : kUnboxedMint; |
| 1273 case kTypedDataFloat32ArrayCid: | 1273 case kTypedDataFloat32ArrayCid: |
| 1274 case kTypedDataFloat64ArrayCid: | 1274 case kTypedDataFloat64ArrayCid: |
| 1275 return kUnboxedDouble; | 1275 return kUnboxedDouble; |
| 1276 case kTypedDataFloat32x4ArrayCid: | 1276 case kTypedDataFloat32x4ArrayCid: |
| 1277 return kUnboxedFloat32x4; | 1277 return kUnboxedFloat32x4; |
| 1278 case kTypedDataUint32x4ArrayCid: | 1278 case kTypedDataInt32x4ArrayCid: |
| 1279 return kUnboxedUint32x4; | 1279 return kUnboxedInt32x4; |
| 1280 default: | 1280 default: |
| 1281 UNIMPLEMENTED(); | 1281 UNIMPLEMENTED(); |
| 1282 return kTagged; | 1282 return kTagged; |
| 1283 } | 1283 } |
| 1284 } | 1284 } |
| 1285 | 1285 |
| 1286 | 1286 |
| 1287 LocationSummary* StoreIndexedInstr::MakeLocationSummary() const { | 1287 LocationSummary* StoreIndexedInstr::MakeLocationSummary() const { |
| 1288 const intptr_t kNumInputs = 3; | 1288 const intptr_t kNumInputs = 3; |
| 1289 const intptr_t kNumTemps = 0; | 1289 const intptr_t kNumTemps = 0; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1311 case kTypedDataInt32ArrayCid: | 1311 case kTypedDataInt32ArrayCid: |
| 1312 case kTypedDataUint32ArrayCid: | 1312 case kTypedDataUint32ArrayCid: |
| 1313 locs->set_in(2, Location::WritableRegister()); | 1313 locs->set_in(2, Location::WritableRegister()); |
| 1314 break; | 1314 break; |
| 1315 case kTypedDataFloat32ArrayCid: | 1315 case kTypedDataFloat32ArrayCid: |
| 1316 // TODO(regis): Verify. | 1316 // TODO(regis): Verify. |
| 1317 // Need temp register for float-to-double conversion. | 1317 // Need temp register for float-to-double conversion. |
| 1318 locs->AddTemp(Location::RequiresFpuRegister()); | 1318 locs->AddTemp(Location::RequiresFpuRegister()); |
| 1319 // Fall through. | 1319 // Fall through. |
| 1320 case kTypedDataFloat64ArrayCid: // TODO(srdjan): Support Float64 constants. | 1320 case kTypedDataFloat64ArrayCid: // TODO(srdjan): Support Float64 constants. |
| 1321 case kTypedDataUint32x4ArrayCid: | 1321 case kTypedDataInt32x4ArrayCid: |
| 1322 case kTypedDataFloat32x4ArrayCid: | 1322 case kTypedDataFloat32x4ArrayCid: |
| 1323 locs->set_in(2, Location::RequiresFpuRegister()); | 1323 locs->set_in(2, Location::RequiresFpuRegister()); |
| 1324 break; | 1324 break; |
| 1325 default: | 1325 default: |
| 1326 UNREACHABLE(); | 1326 UNREACHABLE(); |
| 1327 return NULL; | 1327 return NULL; |
| 1328 } | 1328 } |
| 1329 return locs; | 1329 return locs; |
| 1330 } | 1330 } |
| 1331 | 1331 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1451 case kTypedDataFloat32ArrayCid: | 1451 case kTypedDataFloat32ArrayCid: |
| 1452 // Convert to single precision. | 1452 // Convert to single precision. |
| 1453 __ cvtsd(STMP1, locs()->in(2).fpu_reg()); | 1453 __ cvtsd(STMP1, locs()->in(2).fpu_reg()); |
| 1454 // Store. | 1454 // Store. |
| 1455 __ swc1(STMP1, element_address); | 1455 __ swc1(STMP1, element_address); |
| 1456 break; | 1456 break; |
| 1457 case kTypedDataFloat64ArrayCid: | 1457 case kTypedDataFloat64ArrayCid: |
| 1458 __ StoreDToOffset(locs()->in(2).fpu_reg(), index.reg(), | 1458 __ StoreDToOffset(locs()->in(2).fpu_reg(), index.reg(), |
| 1459 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); | 1459 FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag); |
| 1460 break; | 1460 break; |
| 1461 case kTypedDataUint32x4ArrayCid: | 1461 case kTypedDataInt32x4ArrayCid: |
| 1462 case kTypedDataFloat32x4ArrayCid: | 1462 case kTypedDataFloat32x4ArrayCid: |
| 1463 UNIMPLEMENTED(); | 1463 UNIMPLEMENTED(); |
| 1464 break; | 1464 break; |
| 1465 default: | 1465 default: |
| 1466 UNREACHABLE(); | 1466 UNREACHABLE(); |
| 1467 } | 1467 } |
| 1468 } | 1468 } |
| 1469 | 1469 |
| 1470 | 1470 |
| 1471 LocationSummary* GuardFieldInstr::MakeLocationSummary() const { | 1471 LocationSummary* GuardFieldInstr::MakeLocationSummary() const { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1579 // list length here, without this check the list length could change | 1579 // list length here, without this check the list length could change |
| 1580 // without triggering a deoptimization. | 1580 // without triggering a deoptimization. |
| 1581 Label check_array, length_compared, no_fixed_length; | 1581 Label check_array, length_compared, no_fixed_length; |
| 1582 // If length is negative the length guard is either disabled or | 1582 // If length is negative the length guard is either disabled or |
| 1583 // has not been initialized, either way it is safe to skip the | 1583 // has not been initialized, either way it is safe to skip the |
| 1584 // length check. | 1584 // length check. |
| 1585 __ lw(CMPRES1, field_length_operand); | 1585 __ lw(CMPRES1, field_length_operand); |
| 1586 __ BranchSignedLess(CMPRES1, 0, &skip_length_check); | 1586 __ BranchSignedLess(CMPRES1, 0, &skip_length_check); |
| 1587 __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length); | 1587 __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length); |
| 1588 // Check for typed data array. | 1588 // Check for typed data array. |
| 1589 __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid, | 1589 __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid, |
| 1590 &no_fixed_length); | 1590 &no_fixed_length); |
| 1591 __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid, | 1591 __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid, |
| 1592 &check_array); | 1592 &check_array); |
| 1593 __ lw(TMP, FieldAddress(value_reg, TypedData::length_offset())); | 1593 __ lw(TMP, FieldAddress(value_reg, TypedData::length_offset())); |
| 1594 __ lw(CMPRES1, field_length_operand); | 1594 __ lw(CMPRES1, field_length_operand); |
| 1595 __ subu(CMPRES1, TMP, CMPRES1); | 1595 __ subu(CMPRES1, TMP, CMPRES1); |
| 1596 __ b(&length_compared); | 1596 __ b(&length_compared); |
| 1597 // Check for regular array. | 1597 // Check for regular array. |
| 1598 __ Bind(&check_array); | 1598 __ Bind(&check_array); |
| 1599 __ BranchSignedGreater(value_cid_reg, kImmutableArrayCid, | 1599 __ BranchSignedGreater(value_cid_reg, kImmutableArrayCid, |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 __ lw(CMPRES1, field_cid_operand); | 1655 __ lw(CMPRES1, field_cid_operand); |
| 1656 __ BranchNotEqual(CMPRES1, kIllegalCid, fail); | 1656 __ BranchNotEqual(CMPRES1, kIllegalCid, fail); |
| 1657 | 1657 |
| 1658 if (value_cid == kDynamicCid) { | 1658 if (value_cid == kDynamicCid) { |
| 1659 __ sw(value_cid_reg, field_cid_operand); | 1659 __ sw(value_cid_reg, field_cid_operand); |
| 1660 __ sw(value_cid_reg, field_nullability_operand); | 1660 __ sw(value_cid_reg, field_nullability_operand); |
| 1661 if (field_has_length) { | 1661 if (field_has_length) { |
| 1662 Label check_array, length_set, no_fixed_length; | 1662 Label check_array, length_set, no_fixed_length; |
| 1663 __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length); | 1663 __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length); |
| 1664 // Check for typed data array. | 1664 // Check for typed data array. |
| 1665 __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid, | 1665 __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid, |
| 1666 &no_fixed_length); | 1666 &no_fixed_length); |
| 1667 __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid, | 1667 __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid, |
| 1668 &check_array); | 1668 &check_array); |
| 1669 // Destroy value_cid_reg (safe because we are finished with it). | 1669 // Destroy value_cid_reg (safe because we are finished with it). |
| 1670 __ lw(value_cid_reg, | 1670 __ lw(value_cid_reg, |
| 1671 FieldAddress(value_reg, TypedData::length_offset())); | 1671 FieldAddress(value_reg, TypedData::length_offset())); |
| 1672 __ sw(value_cid_reg, field_length_operand); | 1672 __ sw(value_cid_reg, field_length_operand); |
| 1673 // Updated field length typed data array. | 1673 // Updated field length typed data array. |
| 1674 __ b(&length_set); | 1674 __ b(&length_set); |
| 1675 // Check for regular array. | 1675 // Check for regular array. |
| (...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2903 UNIMPLEMENTED(); | 2903 UNIMPLEMENTED(); |
| 2904 return NULL; | 2904 return NULL; |
| 2905 } | 2905 } |
| 2906 | 2906 |
| 2907 | 2907 |
| 2908 void UnboxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2908 void UnboxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2909 UNIMPLEMENTED(); | 2909 UNIMPLEMENTED(); |
| 2910 } | 2910 } |
| 2911 | 2911 |
| 2912 | 2912 |
| 2913 LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const { | 2913 LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const { |
| 2914 UNIMPLEMENTED(); | 2914 UNIMPLEMENTED(); |
| 2915 return NULL; | 2915 return NULL; |
| 2916 } | 2916 } |
| 2917 | 2917 |
| 2918 | 2918 |
| 2919 void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2919 void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2920 UNIMPLEMENTED(); | 2920 UNIMPLEMENTED(); |
| 2921 } | 2921 } |
| 2922 | 2922 |
| 2923 | 2923 |
| 2924 LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const { | 2924 LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const { |
| 2925 UNIMPLEMENTED(); | 2925 UNIMPLEMENTED(); |
| 2926 return NULL; | 2926 return NULL; |
| 2927 } | 2927 } |
| 2928 | 2928 |
| 2929 | 2929 |
| 2930 void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2930 void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2931 UNIMPLEMENTED(); | 2931 UNIMPLEMENTED(); |
| 2932 } | 2932 } |
| 2933 | 2933 |
| 2934 | 2934 |
| 2935 LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary() const { | 2935 LocationSummary* BinaryDoubleOpInstr::MakeLocationSummary() const { |
| 2936 const intptr_t kNumInputs = 2; | 2936 const intptr_t kNumInputs = 2; |
| 2937 const intptr_t kNumTemps = 0; | 2937 const intptr_t kNumTemps = 0; |
| 2938 LocationSummary* summary = | 2938 LocationSummary* summary = |
| 2939 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 2939 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 2940 summary->set_in(0, Location::RequiresFpuRegister()); | 2940 summary->set_in(0, Location::RequiresFpuRegister()); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3095 UNIMPLEMENTED(); | 3095 UNIMPLEMENTED(); |
| 3096 return NULL; | 3096 return NULL; |
| 3097 } | 3097 } |
| 3098 | 3098 |
| 3099 | 3099 |
| 3100 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3100 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3101 UNIMPLEMENTED(); | 3101 UNIMPLEMENTED(); |
| 3102 } | 3102 } |
| 3103 | 3103 |
| 3104 | 3104 |
| 3105 LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const { | 3105 LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const { |
| 3106 UNIMPLEMENTED(); | 3106 UNIMPLEMENTED(); |
| 3107 return NULL; | 3107 return NULL; |
| 3108 } | 3108 } |
| 3109 | 3109 |
| 3110 | 3110 |
| 3111 void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3111 void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3112 UNIMPLEMENTED(); | 3112 UNIMPLEMENTED(); |
| 3113 } | 3113 } |
| 3114 | 3114 |
| 3115 | 3115 |
| 3116 LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const { | 3116 LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const { |
| 3117 UNIMPLEMENTED(); | 3117 UNIMPLEMENTED(); |
| 3118 return NULL; | 3118 return NULL; |
| 3119 } | 3119 } |
| 3120 | 3120 |
| 3121 | 3121 |
| 3122 void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3122 void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3123 UNIMPLEMENTED(); | 3123 UNIMPLEMENTED(); |
| 3124 } | 3124 } |
| 3125 | 3125 |
| 3126 | 3126 |
| 3127 LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const { | 3127 LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const { |
| 3128 UNIMPLEMENTED(); | 3128 UNIMPLEMENTED(); |
| 3129 return NULL; | 3129 return NULL; |
| 3130 } | 3130 } |
| 3131 | 3131 |
| 3132 | 3132 |
| 3133 void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3133 void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3134 UNIMPLEMENTED(); | 3134 UNIMPLEMENTED(); |
| 3135 } | 3135 } |
| 3136 | 3136 |
| 3137 | 3137 |
| 3138 LocationSummary* Simd32x4GetSignMaskInstr::MakeLocationSummary() const { | 3138 LocationSummary* Simd32x4GetSignMaskInstr::MakeLocationSummary() const { |
| 3139 UNIMPLEMENTED(); | 3139 UNIMPLEMENTED(); |
| 3140 return NULL; | 3140 return NULL; |
| 3141 } | 3141 } |
| 3142 | 3142 |
| 3143 | 3143 |
| 3144 void Simd32x4GetSignMaskInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3144 void Simd32x4GetSignMaskInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3145 UNIMPLEMENTED(); | 3145 UNIMPLEMENTED(); |
| 3146 } | 3146 } |
| 3147 | 3147 |
| 3148 | 3148 |
| 3149 LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const { | 3149 LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const { |
| 3150 UNIMPLEMENTED(); | 3150 UNIMPLEMENTED(); |
| 3151 return NULL; | 3151 return NULL; |
| 3152 } | 3152 } |
| 3153 | 3153 |
| 3154 | 3154 |
| 3155 void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3155 void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3156 UNIMPLEMENTED(); | 3156 UNIMPLEMENTED(); |
| 3157 } | 3157 } |
| 3158 | 3158 |
| 3159 | 3159 |
| 3160 LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const { | 3160 LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const { |
| 3161 UNIMPLEMENTED(); | 3161 UNIMPLEMENTED(); |
| 3162 return NULL; | 3162 return NULL; |
| 3163 } | 3163 } |
| 3164 | 3164 |
| 3165 | 3165 |
| 3166 void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3166 void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3167 UNIMPLEMENTED(); | 3167 UNIMPLEMENTED(); |
| 3168 } | 3168 } |
| 3169 | 3169 |
| 3170 | 3170 |
| 3171 LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const { | 3171 LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const { |
| 3172 UNIMPLEMENTED(); | 3172 UNIMPLEMENTED(); |
| 3173 return NULL; | 3173 return NULL; |
| 3174 } | 3174 } |
| 3175 | 3175 |
| 3176 | 3176 |
| 3177 void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3177 void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3178 UNIMPLEMENTED(); | 3178 UNIMPLEMENTED(); |
| 3179 } | 3179 } |
| 3180 | 3180 |
| 3181 | 3181 |
| 3182 LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const { | 3182 LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const { |
| 3183 UNIMPLEMENTED(); | 3183 UNIMPLEMENTED(); |
| 3184 return NULL; | 3184 return NULL; |
| 3185 } | 3185 } |
| 3186 | 3186 |
| 3187 | 3187 |
| 3188 void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3188 void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3189 UNIMPLEMENTED(); | 3189 UNIMPLEMENTED(); |
| 3190 } | 3190 } |
| 3191 | 3191 |
| 3192 | 3192 |
| 3193 LocationSummary* MathUnaryInstr::MakeLocationSummary() const { | 3193 LocationSummary* MathUnaryInstr::MakeLocationSummary() const { |
| 3194 if ((kind() == MethodRecognizer::kMathSin) || | 3194 if ((kind() == MethodRecognizer::kMathSin) || |
| 3195 (kind() == MethodRecognizer::kMathCos)) { | 3195 (kind() == MethodRecognizer::kMathCos)) { |
| 3196 const intptr_t kNumInputs = 1; | 3196 const intptr_t kNumInputs = 1; |
| 3197 const intptr_t kNumTemps = 0; | 3197 const intptr_t kNumTemps = 0; |
| 3198 LocationSummary* summary = | 3198 LocationSummary* summary = |
| (...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4090 compiler->GenerateCall(token_pos(), | 4090 compiler->GenerateCall(token_pos(), |
| 4091 &label, | 4091 &label, |
| 4092 PcDescriptors::kOther, | 4092 PcDescriptors::kOther, |
| 4093 locs()); | 4093 locs()); |
| 4094 __ Drop(2); // Discard type arguments and receiver. | 4094 __ Drop(2); // Discard type arguments and receiver. |
| 4095 } | 4095 } |
| 4096 | 4096 |
| 4097 } // namespace dart | 4097 } // namespace dart |
| 4098 | 4098 |
| 4099 #endif // defined TARGET_ARCH_MIPS | 4099 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |