OLD | NEW |
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_X64 | 9 #if V8_TARGET_ARCH_X64 |
10 | 10 |
(...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1111 } | 1111 } |
1112 | 1112 |
1113 | 1113 |
1114 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( | 1114 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( |
1115 HTailCallThroughMegamorphicCache* instr) { | 1115 HTailCallThroughMegamorphicCache* instr) { |
1116 LOperand* context = UseFixed(instr->context(), rsi); | 1116 LOperand* context = UseFixed(instr->context(), rsi); |
1117 LOperand* receiver_register = | 1117 LOperand* receiver_register = |
1118 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); | 1118 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); |
1119 LOperand* name_register = | 1119 LOperand* name_register = |
1120 UseFixed(instr->name(), LoadDescriptor::NameRegister()); | 1120 UseFixed(instr->name(), LoadDescriptor::NameRegister()); |
| 1121 LOperand* slot = NULL; |
| 1122 LOperand* vector = NULL; |
| 1123 if (FLAG_vector_ics) { |
| 1124 slot = UseFixed(instr->slot(), VectorLoadICDescriptor::SlotRegister()); |
| 1125 vector = |
| 1126 UseFixed(instr->vector(), VectorLoadICDescriptor::VectorRegister()); |
| 1127 } |
| 1128 |
1121 // Not marked as call. It can't deoptimize, and it never returns. | 1129 // Not marked as call. It can't deoptimize, and it never returns. |
1122 return new (zone()) LTailCallThroughMegamorphicCache( | 1130 return new (zone()) LTailCallThroughMegamorphicCache( |
1123 context, receiver_register, name_register); | 1131 context, receiver_register, name_register, slot, vector); |
1124 } | 1132 } |
1125 | 1133 |
1126 | 1134 |
1127 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { | 1135 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { |
1128 LOperand* context = UseFixed(instr->context(), rsi); | 1136 LOperand* context = UseFixed(instr->context(), rsi); |
1129 LOperand* function = UseFixed(instr->function(), rdi); | 1137 LOperand* function = UseFixed(instr->function(), rdi); |
1130 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); | 1138 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); |
1131 return MarkAsCall(DefineFixed(result, rax), instr, CANNOT_DEOPTIMIZE_EAGERLY); | 1139 return MarkAsCall(DefineFixed(result, rax), instr, CANNOT_DEOPTIMIZE_EAGERLY); |
1132 } | 1140 } |
1133 | 1141 |
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2060 ? AssignEnvironment(DefineAsRegister(result)) | 2068 ? AssignEnvironment(DefineAsRegister(result)) |
2061 : DefineAsRegister(result); | 2069 : DefineAsRegister(result); |
2062 } | 2070 } |
2063 | 2071 |
2064 | 2072 |
2065 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { | 2073 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { |
2066 LOperand* context = UseFixed(instr->context(), rsi); | 2074 LOperand* context = UseFixed(instr->context(), rsi); |
2067 LOperand* global_object = | 2075 LOperand* global_object = |
2068 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); | 2076 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); |
2069 LOperand* vector = NULL; | 2077 LOperand* vector = NULL; |
2070 if (FLAG_vector_ics) { | 2078 if (instr->HasVectorAndSlot()) { |
2071 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 2079 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
2072 } | 2080 } |
2073 | 2081 |
2074 LLoadGlobalGeneric* result = | 2082 LLoadGlobalGeneric* result = |
2075 new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 2083 new(zone()) LLoadGlobalGeneric(context, global_object, vector); |
2076 return MarkAsCall(DefineFixed(result, rax), instr); | 2084 return MarkAsCall(DefineFixed(result, rax), instr); |
2077 } | 2085 } |
2078 | 2086 |
2079 | 2087 |
2080 LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) { | 2088 LInstruction* LChunkBuilder::DoStoreGlobalCell(HStoreGlobalCell* instr) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2133 LOperand* obj = UseRegisterAtStart(instr->object()); | 2141 LOperand* obj = UseRegisterAtStart(instr->object()); |
2134 return DefineAsRegister(new(zone()) LLoadNamedField(obj)); | 2142 return DefineAsRegister(new(zone()) LLoadNamedField(obj)); |
2135 } | 2143 } |
2136 | 2144 |
2137 | 2145 |
2138 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { | 2146 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { |
2139 LOperand* context = UseFixed(instr->context(), rsi); | 2147 LOperand* context = UseFixed(instr->context(), rsi); |
2140 LOperand* object = | 2148 LOperand* object = |
2141 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 2149 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
2142 LOperand* vector = NULL; | 2150 LOperand* vector = NULL; |
2143 if (FLAG_vector_ics) { | 2151 if (instr->HasVectorAndSlot()) { |
2144 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 2152 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
2145 } | 2153 } |
2146 LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric( | 2154 LLoadNamedGeneric* result = new(zone()) LLoadNamedGeneric( |
2147 context, object, vector); | 2155 context, object, vector); |
2148 return MarkAsCall(DefineFixed(result, rax), instr); | 2156 return MarkAsCall(DefineFixed(result, rax), instr); |
2149 } | 2157 } |
2150 | 2158 |
2151 | 2159 |
2152 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( | 2160 LInstruction* LChunkBuilder::DoLoadFunctionPrototype( |
2153 HLoadFunctionPrototype* instr) { | 2161 HLoadFunctionPrototype* instr) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2226 return result; | 2234 return result; |
2227 } | 2235 } |
2228 | 2236 |
2229 | 2237 |
2230 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 2238 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { |
2231 LOperand* context = UseFixed(instr->context(), rsi); | 2239 LOperand* context = UseFixed(instr->context(), rsi); |
2232 LOperand* object = | 2240 LOperand* object = |
2233 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 2241 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
2234 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); | 2242 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); |
2235 LOperand* vector = NULL; | 2243 LOperand* vector = NULL; |
2236 if (FLAG_vector_ics) { | 2244 if (instr->HasVectorAndSlot()) { |
2237 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 2245 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
2238 } | 2246 } |
2239 | 2247 |
2240 LLoadKeyedGeneric* result = | 2248 LLoadKeyedGeneric* result = |
2241 new(zone()) LLoadKeyedGeneric(context, object, key, vector); | 2249 new(zone()) LLoadKeyedGeneric(context, object, key, vector); |
2242 return MarkAsCall(DefineFixed(result, rax), instr); | 2250 return MarkAsCall(DefineFixed(result, rax), instr); |
2243 } | 2251 } |
2244 | 2252 |
2245 | 2253 |
2246 LInstruction* LChunkBuilder::DoStoreKeyed(HStoreKeyed* instr) { | 2254 LInstruction* LChunkBuilder::DoStoreKeyed(HStoreKeyed* instr) { |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2682 LOperand* function = UseRegisterAtStart(instr->function()); | 2690 LOperand* function = UseRegisterAtStart(instr->function()); |
2683 LAllocateBlockContext* result = | 2691 LAllocateBlockContext* result = |
2684 new(zone()) LAllocateBlockContext(context, function); | 2692 new(zone()) LAllocateBlockContext(context, function); |
2685 return MarkAsCall(DefineFixed(result, rsi), instr); | 2693 return MarkAsCall(DefineFixed(result, rsi), instr); |
2686 } | 2694 } |
2687 | 2695 |
2688 | 2696 |
2689 } } // namespace v8::internal | 2697 } } // namespace v8::internal |
2690 | 2698 |
2691 #endif // V8_TARGET_ARCH_X64 | 2699 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |