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

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

Issue 618353002: Revert r40848 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 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 | « 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/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 1066 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 case kExternalTypedDataUint8ArrayCid: 1077 case kExternalTypedDataUint8ArrayCid:
1078 case kExternalTypedDataUint8ClampedArrayCid: 1078 case kExternalTypedDataUint8ClampedArrayCid:
1079 case kTypedDataInt16ArrayCid: 1079 case kTypedDataInt16ArrayCid:
1080 case kTypedDataUint16ArrayCid: 1080 case kTypedDataUint16ArrayCid:
1081 case kOneByteStringCid: 1081 case kOneByteStringCid:
1082 case kTwoByteStringCid: 1082 case kTwoByteStringCid:
1083 return CompileType::FromCid(kSmiCid); 1083 return CompileType::FromCid(kSmiCid);
1084 1084
1085 case kTypedDataInt32ArrayCid: 1085 case kTypedDataInt32ArrayCid:
1086 case kTypedDataUint32ArrayCid: 1086 case kTypedDataUint32ArrayCid:
1087 return CompileType::Int(); 1087 return Typed32BitIsSmi() ? CompileType::FromCid(kSmiCid)
1088 : CompileType::FromCid(kMintCid);
1088 1089
1089 default: 1090 default:
1090 UNIMPLEMENTED(); 1091 UNIMPLEMENTED();
1091 return CompileType::Dynamic(); 1092 return CompileType::Dynamic();
1092 } 1093 }
1093 } 1094 }
1094 1095
1095 1096
1096 Representation LoadIndexedInstr::representation() const { 1097 Representation LoadIndexedInstr::representation() const {
1097 switch (class_id_) { 1098 switch (class_id_) {
1098 case kArrayCid: 1099 case kArrayCid:
1099 case kImmutableArrayCid: 1100 case kImmutableArrayCid:
1100 case kTypedDataInt8ArrayCid: 1101 case kTypedDataInt8ArrayCid:
1101 case kTypedDataUint8ArrayCid: 1102 case kTypedDataUint8ArrayCid:
1102 case kTypedDataUint8ClampedArrayCid: 1103 case kTypedDataUint8ClampedArrayCid:
1103 case kExternalTypedDataUint8ArrayCid: 1104 case kExternalTypedDataUint8ArrayCid:
1104 case kExternalTypedDataUint8ClampedArrayCid: 1105 case kExternalTypedDataUint8ClampedArrayCid:
1105 case kTypedDataInt16ArrayCid: 1106 case kTypedDataInt16ArrayCid:
1106 case kTypedDataUint16ArrayCid: 1107 case kTypedDataUint16ArrayCid:
1107 case kOneByteStringCid: 1108 case kOneByteStringCid:
1108 case kTwoByteStringCid: 1109 case kTwoByteStringCid:
1109 return kTagged; 1110 return kTagged;
1110 case kTypedDataInt32ArrayCid: 1111 case kTypedDataInt32ArrayCid:
1111 return kUnboxedInt32;
1112 case kTypedDataUint32ArrayCid: 1112 case kTypedDataUint32ArrayCid:
1113 return kUnboxedUint32; 1113 return Typed32BitIsSmi() ? kTagged : kUnboxedMint;
1114 case kTypedDataFloat32ArrayCid: 1114 case kTypedDataFloat32ArrayCid:
1115 case kTypedDataFloat64ArrayCid: 1115 case kTypedDataFloat64ArrayCid:
1116 return kUnboxedDouble; 1116 return kUnboxedDouble;
1117 case kTypedDataInt32x4ArrayCid: 1117 case kTypedDataInt32x4ArrayCid:
1118 return kUnboxedInt32x4; 1118 return kUnboxedInt32x4;
1119 case kTypedDataFloat32x4ArrayCid: 1119 case kTypedDataFloat32x4ArrayCid:
1120 return kUnboxedFloat32x4; 1120 return kUnboxedFloat32x4;
1121 default: 1121 default:
1122 UNIMPLEMENTED(); 1122 UNIMPLEMENTED();
1123 return kTagged; 1123 return kTagged;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1173 Address element_address = index.IsRegister() 1173 Address element_address = index.IsRegister()
1174 ? __ ElementAddressForRegIndex(true, // Load. 1174 ? __ ElementAddressForRegIndex(true, // Load.
1175 IsExternal(), class_id(), index_scale(), 1175 IsExternal(), class_id(), index_scale(),
1176 array, index.reg()) 1176 array, index.reg())
1177 : __ ElementAddressForIntIndex( 1177 : __ ElementAddressForIntIndex(
1178 IsExternal(), class_id(), index_scale(), 1178 IsExternal(), class_id(), index_scale(),
1179 array, Smi::Cast(index.constant()).Value()); 1179 array, Smi::Cast(index.constant()).Value());
1180 // Warning: element_address may use register TMP as base. 1180 // Warning: element_address may use register TMP as base.
1181 1181
1182 if ((representation() == kUnboxedDouble) || 1182 if ((representation() == kUnboxedDouble) ||
1183 (representation() == kUnboxedMint) ||
1183 (representation() == kUnboxedFloat32x4) || 1184 (representation() == kUnboxedFloat32x4) ||
1184 (representation() == kUnboxedInt32x4)) { 1185 (representation() == kUnboxedInt32x4)) {
1185 DRegister result = locs()->out(0).fpu_reg(); 1186 DRegister result = locs()->out(0).fpu_reg();
1186 switch (class_id()) { 1187 switch (class_id()) {
1188 case kTypedDataInt32ArrayCid:
1189 UNIMPLEMENTED();
1190 break;
1191 case kTypedDataUint32ArrayCid:
1192 UNIMPLEMENTED();
1193 break;
1187 case kTypedDataFloat32ArrayCid: 1194 case kTypedDataFloat32ArrayCid:
1188 // Load single precision float. 1195 // Load single precision float.
1189 __ lwc1(EvenFRegisterOf(result), element_address); 1196 __ lwc1(EvenFRegisterOf(result), element_address);
1190 break; 1197 break;
1191 case kTypedDataFloat64ArrayCid: 1198 case kTypedDataFloat64ArrayCid:
1192 __ LoadDFromOffset(result, 1199 __ LoadDFromOffset(result,
1193 element_address.base(), element_address.offset()); 1200 element_address.base(), element_address.offset());
1194 break; 1201 break;
1195 case kTypedDataInt32x4ArrayCid: 1202 case kTypedDataInt32x4ArrayCid:
1196 case kTypedDataFloat32x4ArrayCid: 1203 case kTypedDataFloat32x4ArrayCid:
1197 UNIMPLEMENTED(); 1204 UNIMPLEMENTED();
1198 break; 1205 break;
1199 } 1206 }
1200 return; 1207 return;
1201 } 1208 }
1202 1209
1203 if ((representation() == kUnboxedUint32) ||
1204 (representation() == kUnboxedInt32)) {
1205 const Register result = locs()->out(0).reg();
1206 switch (class_id()) {
1207 case kTypedDataInt32ArrayCid:
1208 ASSERT(representation() == kUnboxedUint32);
1209 __ lw(result, element_address);
1210 break;
1211 case kTypedDataUint32ArrayCid:
1212 ASSERT(representation() == kUnboxedInt32);
1213 __ lw(result, element_address);
1214 break;
1215 default:
1216 UNREACHABLE();
1217 }
1218 return;
1219 }
1220
1221 ASSERT(representation() == kTagged);
1222
1223 const Register result = locs()->out(0).reg(); 1210 const Register result = locs()->out(0).reg();
1224 switch (class_id()) { 1211 switch (class_id()) {
1225 case kTypedDataInt8ArrayCid: 1212 case kTypedDataInt8ArrayCid:
1226 ASSERT(index_scale() == 1); 1213 ASSERT(index_scale() == 1);
1227 __ lb(result, element_address); 1214 __ lb(result, element_address);
1228 __ SmiTag(result); 1215 __ SmiTag(result);
1229 break; 1216 break;
1230 case kTypedDataUint8ArrayCid: 1217 case kTypedDataUint8ArrayCid:
1231 case kTypedDataUint8ClampedArrayCid: 1218 case kTypedDataUint8ClampedArrayCid:
1232 case kExternalTypedDataUint8ArrayCid: 1219 case kExternalTypedDataUint8ArrayCid:
1233 case kExternalTypedDataUint8ClampedArrayCid: 1220 case kExternalTypedDataUint8ClampedArrayCid:
1234 case kOneByteStringCid: 1221 case kOneByteStringCid:
1235 ASSERT(index_scale() == 1); 1222 ASSERT(index_scale() == 1);
1236 __ lbu(result, element_address); 1223 __ lbu(result, element_address);
1237 __ SmiTag(result); 1224 __ SmiTag(result);
1238 break; 1225 break;
1239 case kTypedDataInt16ArrayCid: 1226 case kTypedDataInt16ArrayCid:
1240 __ lh(result, element_address); 1227 __ lh(result, element_address);
1241 __ SmiTag(result); 1228 __ SmiTag(result);
1242 break; 1229 break;
1243 case kTypedDataUint16ArrayCid: 1230 case kTypedDataUint16ArrayCid:
1244 case kTwoByteStringCid: 1231 case kTwoByteStringCid:
1245 __ lhu(result, element_address); 1232 __ lhu(result, element_address);
1246 __ SmiTag(result); 1233 __ SmiTag(result);
1247 break; 1234 break;
1235 case kTypedDataInt32ArrayCid: {
1236 Label* deopt = compiler->AddDeoptStub(deopt_id(),
1237 ICData::kDeoptInt32Load);
1238 __ lw(result, element_address);
1239 // Verify that the signed value in 'result' can fit inside a Smi.
1240 __ BranchSignedLess(result, 0xC0000000, deopt);
1241 __ SmiTag(result);
1242 }
1243 break;
1244 case kTypedDataUint32ArrayCid: {
1245 Label* deopt = compiler->AddDeoptStub(deopt_id(),
1246 ICData::kDeoptUint32Load);
1247 __ lw(result, element_address);
1248 // Verify that the unsigned value in 'result' can fit inside a Smi.
1249 __ LoadImmediate(TMP, 0xC0000000);
1250 __ and_(CMPRES1, result, TMP);
1251 __ bne(CMPRES1, ZR, deopt);
1252 __ SmiTag(result);
1253 }
1254 break;
1248 default: 1255 default:
1249 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); 1256 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid));
1250 __ lw(result, element_address); 1257 __ lw(result, element_address);
1251 break; 1258 break;
1252 } 1259 }
1253 } 1260 }
1254 1261
1255 1262
1256 Representation StoreIndexedInstr::RequiredInputRepresentation( 1263 Representation StoreIndexedInstr::RequiredInputRepresentation(
1257 intptr_t idx) const { 1264 intptr_t idx) const {
(...skipping 3666 matching lines...) Expand 10 before | Expand all | Expand 10 after
4924 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs()); 4931 compiler->GenerateCall(token_pos(), &label, stub_kind_, locs());
4925 #if defined(DEBUG) 4932 #if defined(DEBUG)
4926 __ LoadImmediate(S4, kInvalidObjectPointer); 4933 __ LoadImmediate(S4, kInvalidObjectPointer);
4927 __ LoadImmediate(S5, kInvalidObjectPointer); 4934 __ LoadImmediate(S5, kInvalidObjectPointer);
4928 #endif 4935 #endif
4929 } 4936 }
4930 4937
4931 } // namespace dart 4938 } // namespace dart
4932 4939
4933 #endif // defined TARGET_ARCH_MIPS 4940 #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