| 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/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 ExternalLabel label(entry); | 1012 ExternalLabel label(entry); |
| 1013 __ LoadNativeEntry(T5, &label, kNotPatchable); | 1013 __ LoadNativeEntry(T5, &label, kNotPatchable); |
| 1014 compiler->GenerateCall(token_pos(), | 1014 compiler->GenerateCall(token_pos(), |
| 1015 *stub_entry, | 1015 *stub_entry, |
| 1016 RawPcDescriptors::kOther, | 1016 RawPcDescriptors::kOther, |
| 1017 locs()); | 1017 locs()); |
| 1018 __ Pop(result); | 1018 __ Pop(result); |
| 1019 } | 1019 } |
| 1020 | 1020 |
| 1021 | 1021 |
| 1022 LocationSummary* StringFromCharCodeInstr::MakeLocationSummary(Zone* zone, | 1022 LocationSummary* OneByteStringFromCharCodeInstr::MakeLocationSummary( |
| 1023 bool opt) const { | 1023 Zone* zone, bool opt) const { |
| 1024 const intptr_t kNumInputs = 1; | 1024 const intptr_t kNumInputs = 1; |
| 1025 // TODO(fschneider): Allow immediate operands for the char code. | 1025 // TODO(fschneider): Allow immediate operands for the char code. |
| 1026 return LocationSummary::Make(zone, | 1026 return LocationSummary::Make(zone, |
| 1027 kNumInputs, | 1027 kNumInputs, |
| 1028 Location::RequiresRegister(), | 1028 Location::RequiresRegister(), |
| 1029 LocationSummary::kNoCall); | 1029 LocationSummary::kNoCall); |
| 1030 } | 1030 } |
| 1031 | 1031 |
| 1032 | 1032 |
| 1033 void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 1033 void OneByteStringFromCharCodeInstr::EmitNativeCode( |
| 1034 FlowGraphCompiler* compiler) { |
| 1034 ASSERT(compiler->is_optimizing()); | 1035 ASSERT(compiler->is_optimizing()); |
| 1035 Register char_code = locs()->in(0).reg(); | 1036 Register char_code = locs()->in(0).reg(); |
| 1036 Register result = locs()->out(0).reg(); | 1037 Register result = locs()->out(0).reg(); |
| 1037 | 1038 |
| 1038 __ Comment("StringFromCharCodeInstr"); | |
| 1039 | |
| 1040 __ lw(result, Address(THR, Thread::predefined_symbols_address_offset())); | 1039 __ lw(result, Address(THR, Thread::predefined_symbols_address_offset())); |
| 1041 __ AddImmediate(result, Symbols::kNullCharCodeSymbolOffset * kWordSize); | 1040 __ AddImmediate(result, Symbols::kNullCharCodeSymbolOffset * kWordSize); |
| 1042 __ sll(TMP, char_code, 1); // Char code is a smi. | 1041 __ sll(TMP, char_code, 1); // Char code is a smi. |
| 1043 __ addu(TMP, TMP, result); | 1042 __ addu(TMP, TMP, result); |
| 1044 __ lw(result, Address(TMP)); | 1043 __ lw(result, Address(TMP)); |
| 1045 } | 1044 } |
| 1046 | 1045 |
| 1047 | 1046 |
| 1048 LocationSummary* StringToCharCodeInstr::MakeLocationSummary(Zone* zone, | 1047 LocationSummary* StringToCharCodeInstr::MakeLocationSummary(Zone* zone, |
| 1049 bool opt) const { | 1048 bool opt) const { |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1162 | 1161 |
| 1163 case kTypedDataInt8ArrayCid: | 1162 case kTypedDataInt8ArrayCid: |
| 1164 case kTypedDataUint8ArrayCid: | 1163 case kTypedDataUint8ArrayCid: |
| 1165 case kTypedDataUint8ClampedArrayCid: | 1164 case kTypedDataUint8ClampedArrayCid: |
| 1166 case kExternalTypedDataUint8ArrayCid: | 1165 case kExternalTypedDataUint8ArrayCid: |
| 1167 case kExternalTypedDataUint8ClampedArrayCid: | 1166 case kExternalTypedDataUint8ClampedArrayCid: |
| 1168 case kTypedDataInt16ArrayCid: | 1167 case kTypedDataInt16ArrayCid: |
| 1169 case kTypedDataUint16ArrayCid: | 1168 case kTypedDataUint16ArrayCid: |
| 1170 case kOneByteStringCid: | 1169 case kOneByteStringCid: |
| 1171 case kTwoByteStringCid: | 1170 case kTwoByteStringCid: |
| 1171 case kExternalOneByteStringCid: |
| 1172 case kExternalTwoByteStringCid: |
| 1172 return CompileType::FromCid(kSmiCid); | 1173 return CompileType::FromCid(kSmiCid); |
| 1173 | 1174 |
| 1174 case kTypedDataInt32ArrayCid: | 1175 case kTypedDataInt32ArrayCid: |
| 1175 case kTypedDataUint32ArrayCid: | 1176 case kTypedDataUint32ArrayCid: |
| 1176 return CompileType::Int(); | 1177 return CompileType::Int(); |
| 1177 | 1178 |
| 1178 default: | 1179 default: |
| 1179 UNIMPLEMENTED(); | 1180 UNIMPLEMENTED(); |
| 1180 return CompileType::Dynamic(); | 1181 return CompileType::Dynamic(); |
| 1181 } | 1182 } |
| 1182 } | 1183 } |
| 1183 | 1184 |
| 1184 | 1185 |
| 1185 Representation LoadIndexedInstr::representation() const { | 1186 Representation LoadIndexedInstr::representation() const { |
| 1186 switch (class_id_) { | 1187 switch (class_id_) { |
| 1187 case kArrayCid: | 1188 case kArrayCid: |
| 1188 case kImmutableArrayCid: | 1189 case kImmutableArrayCid: |
| 1189 case kTypedDataInt8ArrayCid: | 1190 case kTypedDataInt8ArrayCid: |
| 1190 case kTypedDataUint8ArrayCid: | 1191 case kTypedDataUint8ArrayCid: |
| 1191 case kTypedDataUint8ClampedArrayCid: | 1192 case kTypedDataUint8ClampedArrayCid: |
| 1192 case kExternalTypedDataUint8ArrayCid: | 1193 case kExternalTypedDataUint8ArrayCid: |
| 1193 case kExternalTypedDataUint8ClampedArrayCid: | 1194 case kExternalTypedDataUint8ClampedArrayCid: |
| 1194 case kTypedDataInt16ArrayCid: | 1195 case kTypedDataInt16ArrayCid: |
| 1195 case kTypedDataUint16ArrayCid: | 1196 case kTypedDataUint16ArrayCid: |
| 1196 case kOneByteStringCid: | 1197 case kOneByteStringCid: |
| 1197 case kTwoByteStringCid: | 1198 case kTwoByteStringCid: |
| 1199 case kExternalOneByteStringCid: |
| 1200 case kExternalTwoByteStringCid: |
| 1198 return kTagged; | 1201 return kTagged; |
| 1199 case kTypedDataInt32ArrayCid: | 1202 case kTypedDataInt32ArrayCid: |
| 1200 return kUnboxedInt32; | 1203 return kUnboxedInt32; |
| 1201 case kTypedDataUint32ArrayCid: | 1204 case kTypedDataUint32ArrayCid: |
| 1202 return kUnboxedUint32; | 1205 return kUnboxedUint32; |
| 1203 case kTypedDataFloat32ArrayCid: | 1206 case kTypedDataFloat32ArrayCid: |
| 1204 case kTypedDataFloat64ArrayCid: | 1207 case kTypedDataFloat64ArrayCid: |
| 1205 return kUnboxedDouble; | 1208 return kUnboxedDouble; |
| 1206 case kTypedDataInt32x4ArrayCid: | 1209 case kTypedDataInt32x4ArrayCid: |
| 1207 return kUnboxedInt32x4; | 1210 return kUnboxedInt32x4; |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1314 case kTypedDataInt8ArrayCid: | 1317 case kTypedDataInt8ArrayCid: |
| 1315 ASSERT(index_scale() == 1); | 1318 ASSERT(index_scale() == 1); |
| 1316 __ lb(result, element_address); | 1319 __ lb(result, element_address); |
| 1317 __ SmiTag(result); | 1320 __ SmiTag(result); |
| 1318 break; | 1321 break; |
| 1319 case kTypedDataUint8ArrayCid: | 1322 case kTypedDataUint8ArrayCid: |
| 1320 case kTypedDataUint8ClampedArrayCid: | 1323 case kTypedDataUint8ClampedArrayCid: |
| 1321 case kExternalTypedDataUint8ArrayCid: | 1324 case kExternalTypedDataUint8ArrayCid: |
| 1322 case kExternalTypedDataUint8ClampedArrayCid: | 1325 case kExternalTypedDataUint8ClampedArrayCid: |
| 1323 case kOneByteStringCid: | 1326 case kOneByteStringCid: |
| 1327 case kExternalOneByteStringCid: |
| 1324 ASSERT(index_scale() == 1); | 1328 ASSERT(index_scale() == 1); |
| 1325 __ lbu(result, element_address); | 1329 __ lbu(result, element_address); |
| 1326 __ SmiTag(result); | 1330 __ SmiTag(result); |
| 1327 break; | 1331 break; |
| 1328 case kTypedDataInt16ArrayCid: | 1332 case kTypedDataInt16ArrayCid: |
| 1329 __ lh(result, element_address); | 1333 __ lh(result, element_address); |
| 1330 __ SmiTag(result); | 1334 __ SmiTag(result); |
| 1331 break; | 1335 break; |
| 1332 case kTypedDataUint16ArrayCid: | 1336 case kTypedDataUint16ArrayCid: |
| 1333 case kTwoByteStringCid: | 1337 case kTwoByteStringCid: |
| 1338 case kExternalTwoByteStringCid: |
| 1334 __ lhu(result, element_address); | 1339 __ lhu(result, element_address); |
| 1335 __ SmiTag(result); | 1340 __ SmiTag(result); |
| 1336 break; | 1341 break; |
| 1337 default: | 1342 default: |
| 1338 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); | 1343 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); |
| 1339 __ lw(result, element_address); | 1344 __ lw(result, element_address); |
| 1340 break; | 1345 break; |
| 1341 } | 1346 } |
| 1342 } | 1347 } |
| 1343 | 1348 |
| (...skipping 4375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5719 1, | 5724 1, |
| 5720 locs()); | 5725 locs()); |
| 5721 __ lw(result, Address(SP, 1 * kWordSize)); | 5726 __ lw(result, Address(SP, 1 * kWordSize)); |
| 5722 __ addiu(SP, SP, Immediate(2 * kWordSize)); | 5727 __ addiu(SP, SP, Immediate(2 * kWordSize)); |
| 5723 } | 5728 } |
| 5724 | 5729 |
| 5725 | 5730 |
| 5726 } // namespace dart | 5731 } // namespace dart |
| 5727 | 5732 |
| 5728 #endif // defined TARGET_ARCH_MIPS | 5733 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |