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 |