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

Side by Side Diff: runtime/vm/intermediate_language_arm.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.h ('k') | runtime/vm/intermediate_language_arm64.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_ARM. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM.
6 #if defined(TARGET_ARCH_ARM) 6 #if defined(TARGET_ARCH_ARM)
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 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 ExternalLabel label(entry); 961 ExternalLabel label(entry);
962 __ LoadNativeEntry(R9, &label, link_lazily() ? kPatchable : kNotPatchable); 962 __ LoadNativeEntry(R9, &label, link_lazily() ? kPatchable : kNotPatchable);
963 compiler->GenerateCall(token_pos(), 963 compiler->GenerateCall(token_pos(),
964 *stub_entry, 964 *stub_entry,
965 RawPcDescriptors::kOther, 965 RawPcDescriptors::kOther,
966 locs()); 966 locs());
967 __ Pop(result); 967 __ Pop(result);
968 } 968 }
969 969
970 970
971 LocationSummary* StringFromCharCodeInstr::MakeLocationSummary(Zone* zone, 971 LocationSummary* OneByteStringFromCharCodeInstr::MakeLocationSummary(
972 bool opt) const { 972 Zone* zone, bool opt) const {
973 const intptr_t kNumInputs = 1; 973 const intptr_t kNumInputs = 1;
974 // TODO(fschneider): Allow immediate operands for the char code. 974 // TODO(fschneider): Allow immediate operands for the char code.
975 return LocationSummary::Make(zone, 975 return LocationSummary::Make(zone,
976 kNumInputs, 976 kNumInputs,
977 Location::RequiresRegister(), 977 Location::RequiresRegister(),
978 LocationSummary::kNoCall); 978 LocationSummary::kNoCall);
979 } 979 }
980 980
981 981
982 void StringFromCharCodeInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 982 void OneByteStringFromCharCodeInstr::EmitNativeCode(
983 FlowGraphCompiler* compiler) {
983 ASSERT(compiler->is_optimizing()); 984 ASSERT(compiler->is_optimizing());
984 const Register char_code = locs()->in(0).reg(); 985 const Register char_code = locs()->in(0).reg();
985 const Register result = locs()->out(0).reg(); 986 const Register result = locs()->out(0).reg();
986 987
987 __ ldr(result, Address(THR, Thread::predefined_symbols_address_offset())); 988 __ ldr(result, Address(THR, Thread::predefined_symbols_address_offset()));
988 __ AddImmediate(result, Symbols::kNullCharCodeSymbolOffset * kWordSize); 989 __ AddImmediate(result, Symbols::kNullCharCodeSymbolOffset * kWordSize);
989 __ ldr(result, Address(result, char_code, LSL, 1)); // Char code is a smi. 990 __ ldr(result, Address(result, char_code, LSL, 1)); // Char code is a smi.
990 } 991 }
991 992
992 993
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 1105
1105 case kTypedDataInt8ArrayCid: 1106 case kTypedDataInt8ArrayCid:
1106 case kTypedDataUint8ArrayCid: 1107 case kTypedDataUint8ArrayCid:
1107 case kTypedDataUint8ClampedArrayCid: 1108 case kTypedDataUint8ClampedArrayCid:
1108 case kExternalTypedDataUint8ArrayCid: 1109 case kExternalTypedDataUint8ArrayCid:
1109 case kExternalTypedDataUint8ClampedArrayCid: 1110 case kExternalTypedDataUint8ClampedArrayCid:
1110 case kTypedDataInt16ArrayCid: 1111 case kTypedDataInt16ArrayCid:
1111 case kTypedDataUint16ArrayCid: 1112 case kTypedDataUint16ArrayCid:
1112 case kOneByteStringCid: 1113 case kOneByteStringCid:
1113 case kTwoByteStringCid: 1114 case kTwoByteStringCid:
1115 case kExternalOneByteStringCid:
1116 case kExternalTwoByteStringCid:
1114 return CompileType::FromCid(kSmiCid); 1117 return CompileType::FromCid(kSmiCid);
1115 1118
1116 case kTypedDataInt32ArrayCid: 1119 case kTypedDataInt32ArrayCid:
1117 case kTypedDataUint32ArrayCid: 1120 case kTypedDataUint32ArrayCid:
1118 return CompileType::Int(); 1121 return CompileType::Int();
1119 1122
1120 default: 1123 default:
1121 UNREACHABLE(); 1124 UNREACHABLE();
1122 return CompileType::Dynamic(); 1125 return CompileType::Dynamic();
1123 } 1126 }
1124 } 1127 }
1125 1128
1126 1129
1127 Representation LoadIndexedInstr::representation() const { 1130 Representation LoadIndexedInstr::representation() const {
1128 switch (class_id_) { 1131 switch (class_id_) {
1129 case kArrayCid: 1132 case kArrayCid:
1130 case kImmutableArrayCid: 1133 case kImmutableArrayCid:
1131 case kTypedDataInt8ArrayCid: 1134 case kTypedDataInt8ArrayCid:
1132 case kTypedDataUint8ArrayCid: 1135 case kTypedDataUint8ArrayCid:
1133 case kTypedDataUint8ClampedArrayCid: 1136 case kTypedDataUint8ClampedArrayCid:
1134 case kExternalTypedDataUint8ArrayCid: 1137 case kExternalTypedDataUint8ArrayCid:
1135 case kExternalTypedDataUint8ClampedArrayCid: 1138 case kExternalTypedDataUint8ClampedArrayCid:
1136 case kTypedDataInt16ArrayCid: 1139 case kTypedDataInt16ArrayCid:
1137 case kTypedDataUint16ArrayCid: 1140 case kTypedDataUint16ArrayCid:
1138 case kOneByteStringCid: 1141 case kOneByteStringCid:
1139 case kTwoByteStringCid: 1142 case kTwoByteStringCid:
1143 case kExternalOneByteStringCid:
1144 case kExternalTwoByteStringCid:
1140 return kTagged; 1145 return kTagged;
1141 case kTypedDataInt32ArrayCid: 1146 case kTypedDataInt32ArrayCid:
1142 return kUnboxedInt32; 1147 return kUnboxedInt32;
1143 case kTypedDataUint32ArrayCid: 1148 case kTypedDataUint32ArrayCid:
1144 return kUnboxedUint32; 1149 return kUnboxedUint32;
1145 case kTypedDataFloat32ArrayCid: 1150 case kTypedDataFloat32ArrayCid:
1146 case kTypedDataFloat64ArrayCid: 1151 case kTypedDataFloat64ArrayCid:
1147 return kUnboxedDouble; 1152 return kUnboxedDouble;
1148 case kTypedDataInt32x4ArrayCid: 1153 case kTypedDataInt32x4ArrayCid:
1149 return kUnboxedInt32x4; 1154 return kUnboxedInt32x4;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 case kTypedDataInt8ArrayCid: 1312 case kTypedDataInt8ArrayCid:
1308 ASSERT(index_scale() == 1); 1313 ASSERT(index_scale() == 1);
1309 __ ldrsb(result, element_address); 1314 __ ldrsb(result, element_address);
1310 __ SmiTag(result); 1315 __ SmiTag(result);
1311 break; 1316 break;
1312 case kTypedDataUint8ArrayCid: 1317 case kTypedDataUint8ArrayCid:
1313 case kTypedDataUint8ClampedArrayCid: 1318 case kTypedDataUint8ClampedArrayCid:
1314 case kExternalTypedDataUint8ArrayCid: 1319 case kExternalTypedDataUint8ArrayCid:
1315 case kExternalTypedDataUint8ClampedArrayCid: 1320 case kExternalTypedDataUint8ClampedArrayCid:
1316 case kOneByteStringCid: 1321 case kOneByteStringCid:
1322 case kExternalOneByteStringCid:
1317 ASSERT(index_scale() == 1); 1323 ASSERT(index_scale() == 1);
1318 __ ldrb(result, element_address); 1324 __ ldrb(result, element_address);
1319 __ SmiTag(result); 1325 __ SmiTag(result);
1320 break; 1326 break;
1321 case kTypedDataInt16ArrayCid: 1327 case kTypedDataInt16ArrayCid:
1322 __ ldrsh(result, element_address); 1328 __ ldrsh(result, element_address);
1323 __ SmiTag(result); 1329 __ SmiTag(result);
1324 break; 1330 break;
1325 case kTypedDataUint16ArrayCid: 1331 case kTypedDataUint16ArrayCid:
1326 case kTwoByteStringCid: 1332 case kTwoByteStringCid:
1333 case kExternalTwoByteStringCid:
1327 __ ldrh(result, element_address); 1334 __ ldrh(result, element_address);
1328 __ SmiTag(result); 1335 __ SmiTag(result);
1329 break; 1336 break;
1330 default: 1337 default:
1331 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); 1338 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
1332 __ ldr(result, element_address); 1339 __ ldr(result, element_address);
1333 break; 1340 break;
1334 } 1341 }
1335 } 1342 }
1336 1343
(...skipping 5607 matching lines...) Expand 10 before | Expand all | Expand 10 after
6944 1, 6951 1,
6945 locs()); 6952 locs());
6946 __ Drop(1); 6953 __ Drop(1);
6947 __ Pop(result); 6954 __ Pop(result);
6948 } 6955 }
6949 6956
6950 6957
6951 } // namespace dart 6958 } // namespace dart
6952 6959
6953 #endif // defined TARGET_ARCH_ARM 6960 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language.h ('k') | runtime/vm/intermediate_language_arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698