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

Side by Side Diff: runtime/vm/intermediate_language_mips.cc

Issue 1961393002: VM: Optimized code for all of [External]{One|Two}ByteString::codeUnitAt. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: addressed comment Created 4 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
« no previous file with comments | « runtime/vm/intermediate_language_ia32.cc ('k') | runtime/vm/intermediate_language_x64.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 (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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_ia32.cc ('k') | runtime/vm/intermediate_language_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698