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

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

Issue 612553002: Make LoadIndexedInstr for Uint32List use kUnboxedUint32 representation (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_mips.cc ('k') | no next file » | 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_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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_mips.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698