| 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_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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |