| 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_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
| 6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 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 950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 961 case kImmutableArrayCid: | 961 case kImmutableArrayCid: |
| 962 case kTypedDataInt8ArrayCid: | 962 case kTypedDataInt8ArrayCid: |
| 963 case kTypedDataUint8ArrayCid: | 963 case kTypedDataUint8ArrayCid: |
| 964 case kTypedDataUint8ClampedArrayCid: | 964 case kTypedDataUint8ClampedArrayCid: |
| 965 case kExternalTypedDataUint8ArrayCid: | 965 case kExternalTypedDataUint8ArrayCid: |
| 966 case kExternalTypedDataUint8ClampedArrayCid: | 966 case kExternalTypedDataUint8ClampedArrayCid: |
| 967 case kTypedDataInt16ArrayCid: | 967 case kTypedDataInt16ArrayCid: |
| 968 case kTypedDataUint16ArrayCid: | 968 case kTypedDataUint16ArrayCid: |
| 969 case kOneByteStringCid: | 969 case kOneByteStringCid: |
| 970 case kTwoByteStringCid: | 970 case kTwoByteStringCid: |
| 971 return kTagged; |
| 971 case kTypedDataInt32ArrayCid: | 972 case kTypedDataInt32ArrayCid: |
| 973 return kUnboxedInt32; |
| 972 case kTypedDataUint32ArrayCid: | 974 case kTypedDataUint32ArrayCid: |
| 973 return kTagged; | 975 return kUnboxedUint32; |
| 974 case kTypedDataFloat32ArrayCid: | 976 case kTypedDataFloat32ArrayCid: |
| 975 case kTypedDataFloat64ArrayCid: | 977 case kTypedDataFloat64ArrayCid: |
| 976 return kUnboxedDouble; | 978 return kUnboxedDouble; |
| 977 case kTypedDataInt32x4ArrayCid: | 979 case kTypedDataInt32x4ArrayCid: |
| 978 return kUnboxedInt32x4; | 980 return kUnboxedInt32x4; |
| 979 case kTypedDataFloat32x4ArrayCid: | 981 case kTypedDataFloat32x4ArrayCid: |
| 980 return kUnboxedFloat32x4; | 982 return kUnboxedFloat32x4; |
| 981 case kTypedDataFloat64x2ArrayCid: | 983 case kTypedDataFloat64x2ArrayCid: |
| 982 return kUnboxedFloat64x2; | 984 return kUnboxedFloat64x2; |
| 983 default: | 985 default: |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1045 __ movsd(result, element_address); | 1047 __ movsd(result, element_address); |
| 1046 } else { | 1048 } else { |
| 1047 ASSERT((class_id() == kTypedDataInt32x4ArrayCid) || | 1049 ASSERT((class_id() == kTypedDataInt32x4ArrayCid) || |
| 1048 (class_id() == kTypedDataFloat32x4ArrayCid) || | 1050 (class_id() == kTypedDataFloat32x4ArrayCid) || |
| 1049 (class_id() == kTypedDataFloat64x2ArrayCid)); | 1051 (class_id() == kTypedDataFloat64x2ArrayCid)); |
| 1050 __ movups(result, element_address); | 1052 __ movups(result, element_address); |
| 1051 } | 1053 } |
| 1052 return; | 1054 return; |
| 1053 } | 1055 } |
| 1054 | 1056 |
| 1057 if ((representation() == kUnboxedUint32) || |
| 1058 (representation() == kUnboxedInt32)) { |
| 1059 if ((index_scale() == 1) && index.IsRegister()) { |
| 1060 __ SmiUntag(index.reg()); |
| 1061 } |
| 1062 Register result = locs()->out(0).reg(); |
| 1063 switch (class_id()) { |
| 1064 case kTypedDataInt32ArrayCid: |
| 1065 ASSERT(representation() == kUnboxedInt32); |
| 1066 __ movsxd(result, element_address); |
| 1067 break; |
| 1068 case kTypedDataUint32ArrayCid: |
| 1069 ASSERT(representation() == kUnboxedUint32); |
| 1070 __ movl(result, element_address); |
| 1071 break; |
| 1072 default: |
| 1073 UNREACHABLE(); |
| 1074 } |
| 1075 return; |
| 1076 } |
| 1077 |
| 1078 ASSERT(representation() == kTagged); |
| 1079 |
| 1055 if ((index_scale() == 1) && index.IsRegister()) { | 1080 if ((index_scale() == 1) && index.IsRegister()) { |
| 1056 __ SmiUntag(index.reg()); | 1081 __ SmiUntag(index.reg()); |
| 1057 } | 1082 } |
| 1058 Register result = locs()->out(0).reg(); | 1083 Register result = locs()->out(0).reg(); |
| 1059 switch (class_id()) { | 1084 switch (class_id()) { |
| 1060 case kTypedDataInt8ArrayCid: | 1085 case kTypedDataInt8ArrayCid: |
| 1061 __ movsxb(result, element_address); | 1086 __ movsxb(result, element_address); |
| 1062 __ SmiTag(result); | 1087 __ SmiTag(result); |
| 1063 break; | 1088 break; |
| 1064 case kTypedDataUint8ArrayCid: | 1089 case kTypedDataUint8ArrayCid: |
| 1065 case kTypedDataUint8ClampedArrayCid: | 1090 case kTypedDataUint8ClampedArrayCid: |
| 1066 case kExternalTypedDataUint8ArrayCid: | 1091 case kExternalTypedDataUint8ArrayCid: |
| 1067 case kExternalTypedDataUint8ClampedArrayCid: | 1092 case kExternalTypedDataUint8ClampedArrayCid: |
| 1068 case kOneByteStringCid: | 1093 case kOneByteStringCid: |
| 1069 __ movzxb(result, element_address); | 1094 __ movzxb(result, element_address); |
| 1070 __ SmiTag(result); | 1095 __ SmiTag(result); |
| 1071 break; | 1096 break; |
| 1072 case kTypedDataInt16ArrayCid: | 1097 case kTypedDataInt16ArrayCid: |
| 1073 __ movsxw(result, element_address); | 1098 __ movsxw(result, element_address); |
| 1074 __ SmiTag(result); | 1099 __ SmiTag(result); |
| 1075 break; | 1100 break; |
| 1076 case kTypedDataUint16ArrayCid: | 1101 case kTypedDataUint16ArrayCid: |
| 1077 case kTwoByteStringCid: | 1102 case kTwoByteStringCid: |
| 1078 __ movzxw(result, element_address); | 1103 __ movzxw(result, element_address); |
| 1079 __ SmiTag(result); | 1104 __ SmiTag(result); |
| 1080 break; | 1105 break; |
| 1081 case kTypedDataInt32ArrayCid: | |
| 1082 __ movsxd(result, element_address); | |
| 1083 __ SmiTag(result); | |
| 1084 break; | |
| 1085 case kTypedDataUint32ArrayCid: | |
| 1086 __ movl(result, element_address); | |
| 1087 __ SmiTag(result); | |
| 1088 break; | |
| 1089 default: | 1106 default: |
| 1090 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); | 1107 ASSERT((class_id() == kArrayCid) || (class_id() == kImmutableArrayCid)); |
| 1091 __ movq(result, element_address); | 1108 __ movq(result, element_address); |
| 1092 break; | 1109 break; |
| 1093 } | 1110 } |
| 1094 } | 1111 } |
| 1095 | 1112 |
| 1096 | 1113 |
| 1097 Representation StoreIndexedInstr::RequiredInputRepresentation( | 1114 Representation StoreIndexedInstr::RequiredInputRepresentation( |
| 1098 intptr_t idx) const { | 1115 intptr_t idx) const { |
| (...skipping 4828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5927 __ movq(R10, Immediate(kInvalidObjectPointer)); | 5944 __ movq(R10, Immediate(kInvalidObjectPointer)); |
| 5928 __ movq(RBX, Immediate(kInvalidObjectPointer)); | 5945 __ movq(RBX, Immediate(kInvalidObjectPointer)); |
| 5929 #endif | 5946 #endif |
| 5930 } | 5947 } |
| 5931 | 5948 |
| 5932 } // namespace dart | 5949 } // namespace dart |
| 5933 | 5950 |
| 5934 #undef __ | 5951 #undef __ |
| 5935 | 5952 |
| 5936 #endif // defined TARGET_ARCH_X64 | 5953 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |