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 #include "src/arm/lithium-codegen-arm.h" | 9 #include "src/arm/lithium-codegen-arm.h" |
10 #include "src/hydrogen-osr.h" | 10 #include "src/hydrogen-osr.h" |
(...skipping 2216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2227 } else { | 2227 } else { |
2228 DCHECK( | 2228 DCHECK( |
2229 (instr->representation().IsInteger32() && | 2229 (instr->representation().IsInteger32() && |
2230 !IsDoubleOrFloatElementsKind(elements_kind)) || | 2230 !IsDoubleOrFloatElementsKind(elements_kind)) || |
2231 (instr->representation().IsDouble() && | 2231 (instr->representation().IsDouble() && |
2232 IsDoubleOrFloatElementsKind(elements_kind))); | 2232 IsDoubleOrFloatElementsKind(elements_kind))); |
2233 LOperand* backing_store = UseRegister(instr->elements()); | 2233 LOperand* backing_store = UseRegister(instr->elements()); |
2234 result = DefineAsRegister(new(zone()) LLoadKeyed(backing_store, key)); | 2234 result = DefineAsRegister(new(zone()) LLoadKeyed(backing_store, key)); |
2235 } | 2235 } |
2236 | 2236 |
2237 if ((instr->is_external() || instr->is_fixed_typed_array()) ? | 2237 bool needs_environment; |
2238 // see LCodeGen::DoLoadKeyedExternalArray | 2238 if (instr->is_external() || instr->is_fixed_typed_array()) { |
2239 ((elements_kind == EXTERNAL_UINT32_ELEMENTS || | 2239 // see LCodeGen::DoLoadKeyedExternalArray |
2240 elements_kind == UINT32_ELEMENTS) && | 2240 needs_environment = (elements_kind == EXTERNAL_UINT32_ELEMENTS || |
2241 !instr->CheckFlag(HInstruction::kUint32)) : | 2241 elements_kind == UINT32_ELEMENTS) && |
2242 // see LCodeGen::DoLoadKeyedFixedDoubleArray and | 2242 !instr->CheckFlag(HInstruction::kUint32); |
2243 // LCodeGen::DoLoadKeyedFixedArray | 2243 } else { |
2244 instr->RequiresHoleCheck()) { | 2244 // see LCodeGen::DoLoadKeyedFixedDoubleArray and |
| 2245 // LCodeGen::DoLoadKeyedFixedArray |
| 2246 needs_environment = |
| 2247 instr->RequiresHoleCheck() || |
| 2248 (instr->hole_mode() == CONVERT_HOLE_TO_UNDEFINED && info()->IsStub()); |
| 2249 } |
| 2250 |
| 2251 if (needs_environment) { |
2245 result = AssignEnvironment(result); | 2252 result = AssignEnvironment(result); |
2246 } | 2253 } |
2247 return result; | 2254 return result; |
2248 } | 2255 } |
2249 | 2256 |
2250 | 2257 |
2251 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 2258 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { |
2252 LOperand* context = UseFixed(instr->context(), cp); | 2259 LOperand* context = UseFixed(instr->context(), cp); |
2253 LOperand* object = | 2260 LOperand* object = |
2254 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 2261 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2648 LInstruction* LChunkBuilder::DoAllocateBlockContext( | 2655 LInstruction* LChunkBuilder::DoAllocateBlockContext( |
2649 HAllocateBlockContext* instr) { | 2656 HAllocateBlockContext* instr) { |
2650 LOperand* context = UseFixed(instr->context(), cp); | 2657 LOperand* context = UseFixed(instr->context(), cp); |
2651 LOperand* function = UseRegisterAtStart(instr->function()); | 2658 LOperand* function = UseRegisterAtStart(instr->function()); |
2652 LAllocateBlockContext* result = | 2659 LAllocateBlockContext* result = |
2653 new(zone()) LAllocateBlockContext(context, function); | 2660 new(zone()) LAllocateBlockContext(context, function); |
2654 return MarkAsCall(DefineFixed(result, cp), instr); | 2661 return MarkAsCall(DefineFixed(result, cp), instr); |
2655 } | 2662 } |
2656 | 2663 |
2657 } } // namespace v8::internal | 2664 } } // namespace v8::internal |
OLD | NEW |