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

Side by Side Diff: src/ia32/lithium-ia32.cc

Issue 767743002: Hydrogen code stubs for vector-based ICs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 6 years 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
« no previous file with comments | « src/ia32/lithium-ia32.h ('k') | src/ic/access-compiler.h » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <sstream> 5 #include <sstream>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #if V8_TARGET_ARCH_IA32 9 #if V8_TARGET_ARCH_IA32
10 10
(...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 } 1131 }
1132 1132
1133 1133
1134 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( 1134 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache(
1135 HTailCallThroughMegamorphicCache* instr) { 1135 HTailCallThroughMegamorphicCache* instr) {
1136 LOperand* context = UseFixed(instr->context(), esi); 1136 LOperand* context = UseFixed(instr->context(), esi);
1137 LOperand* receiver_register = 1137 LOperand* receiver_register =
1138 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); 1138 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister());
1139 LOperand* name_register = 1139 LOperand* name_register =
1140 UseFixed(instr->name(), LoadDescriptor::NameRegister()); 1140 UseFixed(instr->name(), LoadDescriptor::NameRegister());
1141 LOperand* slot = NULL;
1142 LOperand* vector = NULL;
1143 if (FLAG_vector_ics) {
1144 slot = UseFixed(instr->slot(), VectorLoadICDescriptor::SlotRegister());
1145 vector =
1146 UseFixed(instr->vector(), VectorLoadICDescriptor::VectorRegister());
1147 }
1148
1141 // Not marked as call. It can't deoptimize, and it never returns. 1149 // Not marked as call. It can't deoptimize, and it never returns.
1142 return new (zone()) LTailCallThroughMegamorphicCache( 1150 return new (zone()) LTailCallThroughMegamorphicCache(
1143 context, receiver_register, name_register); 1151 context, receiver_register, name_register, slot, vector);
1144 } 1152 }
1145 1153
1146 1154
1147 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { 1155 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) {
1148 LOperand* context = UseFixed(instr->context(), esi); 1156 LOperand* context = UseFixed(instr->context(), esi);
1149 LOperand* function = UseFixed(instr->function(), edi); 1157 LOperand* function = UseFixed(instr->function(), edi);
1150 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); 1158 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function);
1151 return MarkAsCall(DefineFixed(result, eax), instr, CANNOT_DEOPTIMIZE_EAGERLY); 1159 return MarkAsCall(DefineFixed(result, eax), instr, CANNOT_DEOPTIMIZE_EAGERLY);
1152 } 1160 }
1153 1161
(...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 ? AssignEnvironment(DefineAsRegister(result)) 2116 ? AssignEnvironment(DefineAsRegister(result))
2109 : DefineAsRegister(result); 2117 : DefineAsRegister(result);
2110 } 2118 }
2111 2119
2112 2120
2113 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { 2121 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) {
2114 LOperand* context = UseFixed(instr->context(), esi); 2122 LOperand* context = UseFixed(instr->context(), esi);
2115 LOperand* global_object = 2123 LOperand* global_object =
2116 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); 2124 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister());
2117 LOperand* vector = NULL; 2125 LOperand* vector = NULL;
2118 if (FLAG_vector_ics) { 2126 if (instr->HasVectorAndSlot()) {
2119 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); 2127 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister());
2120 } 2128 }
2121 2129
2122 LLoadGlobalGeneric* result = 2130 LLoadGlobalGeneric* result =
2123 new(zone()) LLoadGlobalGeneric(context, global_object, vector); 2131 new(zone()) LLoadGlobalGeneric(context, global_object, vector);
2124 return MarkAsCall(DefineFixed(result, eax), instr); 2132 return MarkAsCall(DefineFixed(result, eax), instr);
2125 } 2133 }
2126 2134
2127 2135
2128 LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) { 2136 LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2169 : UseRegisterAtStart(instr->object()); 2177 : UseRegisterAtStart(instr->object());
2170 return DefineAsRegister(new(zone()) LLoadNamedField(obj)); 2178 return DefineAsRegister(new(zone()) LLoadNamedField(obj));
2171 } 2179 }
2172 2180
2173 2181
2174 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { 2182 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) {
2175 LOperand* context = UseFixed(instr->context(), esi); 2183 LOperand* context = UseFixed(instr->context(), esi);
2176 LOperand* object = 2184 LOperand* object =
2177 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); 2185 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister());
2178 LOperand* vector = NULL; 2186 LOperand* vector = NULL;
2179 if (FLAG_vector_ics) { 2187 if (instr->HasVectorAndSlot()) {
2180 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); 2188 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister());
2181 } 2189 }
2182 LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric( 2190 LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric(
2183 context, object, vector); 2191 context, object, vector);
2184 return MarkAsCall(DefineFixed(result, eax), instr); 2192 return MarkAsCall(DefineFixed(result, eax), instr);
2185 } 2193 }
2186 2194
2187 2195
2188 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( 2196 LInstruction* LChunkBuilder::DoLoadFunctionPrototype(
2189 HLoadFunctionPrototype* instr) { 2197 HLoadFunctionPrototype* instr) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2234 return result; 2242 return result;
2235 } 2243 }
2236 2244
2237 2245
2238 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { 2246 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) {
2239 LOperand* context = UseFixed(instr->context(), esi); 2247 LOperand* context = UseFixed(instr->context(), esi);
2240 LOperand* object = 2248 LOperand* object =
2241 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); 2249 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister());
2242 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); 2250 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister());
2243 LOperand* vector = NULL; 2251 LOperand* vector = NULL;
2244 if (FLAG_vector_ics) { 2252 if (instr->HasVectorAndSlot()) {
2245 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); 2253 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister());
2246 } 2254 }
2247 LLoadKeyedGeneric* result = 2255 LLoadKeyedGeneric* result =
2248 new(zone()) LLoadKeyedGeneric(context, object, key, vector); 2256 new(zone()) LLoadKeyedGeneric(context, object, key, vector);
2249 return MarkAsCall(DefineFixed(result, eax), instr); 2257 return MarkAsCall(DefineFixed(result, eax), instr);
2250 } 2258 }
2251 2259
2252 2260
2253 LOperand* LChunkBuilder::GetStoreKeyedValueOperand(HStoreKeyed* instr) { 2261 LOperand* LChunkBuilder::GetStoreKeyedValueOperand(HStoreKeyed* instr) {
2254 ElementsKind elements_kind = instr->elements_kind(); 2262 ElementsKind elements_kind = instr->elements_kind();
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
2705 LOperand* function = UseRegisterAtStart(instr->function()); 2713 LOperand* function = UseRegisterAtStart(instr->function());
2706 LAllocateBlockContext* result = 2714 LAllocateBlockContext* result =
2707 new(zone()) LAllocateBlockContext(context, function); 2715 new(zone()) LAllocateBlockContext(context, function);
2708 return MarkAsCall(DefineFixed(result, esi), instr); 2716 return MarkAsCall(DefineFixed(result, esi), instr);
2709 } 2717 }
2710 2718
2711 2719
2712 } } // namespace v8::internal 2720 } } // namespace v8::internal
2713 2721
2714 #endif // V8_TARGET_ARCH_IA32 2722 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/lithium-ia32.h ('k') | src/ic/access-compiler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698