| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 // Possibly allocate a local context. | 204 // Possibly allocate a local context. |
| 205 int heap_slots = info()->num_heap_slots() - Context::MIN_CONTEXT_SLOTS; | 205 int heap_slots = info()->num_heap_slots() - Context::MIN_CONTEXT_SLOTS; |
| 206 if (heap_slots > 0) { | 206 if (heap_slots > 0) { |
| 207 Comment(";;; Allocate local context"); | 207 Comment(";;; Allocate local context"); |
| 208 // Argument to NewContext is the function, which is in r1. | 208 // Argument to NewContext is the function, which is in r1. |
| 209 if (heap_slots <= FastNewContextStub::kMaximumSlots) { | 209 if (heap_slots <= FastNewContextStub::kMaximumSlots) { |
| 210 FastNewContextStub stub(heap_slots); | 210 FastNewContextStub stub(heap_slots); |
| 211 __ CallStub(&stub); | 211 __ CallStub(&stub); |
| 212 } else { | 212 } else { |
| 213 __ push(r1); | 213 __ push(r1); |
| 214 __ CallRuntime(Runtime::kNewFunctionContext, 1); | 214 __ CallRuntime(Runtime::kHiddenNewFunctionContext, 1); |
| 215 } | 215 } |
| 216 RecordSafepoint(Safepoint::kNoLazyDeopt); | 216 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 217 // Context is returned in both r0 and cp. It replaces the context | 217 // Context is returned in both r0 and cp. It replaces the context |
| 218 // passed to us. It's saved in the stack and kept live in cp. | 218 // passed to us. It's saved in the stack and kept live in cp. |
| 219 __ mov(cp, r0); | 219 __ mov(cp, r0); |
| 220 __ str(r0, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 220 __ str(r0, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 221 // Copy any necessary parameters into the context. | 221 // Copy any necessary parameters into the context. |
| 222 int num_parameters = scope()->num_parameters(); | 222 int num_parameters = scope()->num_parameters(); |
| 223 for (int i = 0; i < num_parameters; i++) { | 223 for (int i = 0; i < num_parameters; i++) { |
| 224 Variable* var = scope()->parameter(i); | 224 Variable* var = scope()->parameter(i); |
| (...skipping 3307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3532 } | 3532 } |
| 3533 | 3533 |
| 3534 | 3534 |
| 3535 void LCodeGen::DoDeclareGlobals(LDeclareGlobals* instr) { | 3535 void LCodeGen::DoDeclareGlobals(LDeclareGlobals* instr) { |
| 3536 ASSERT(ToRegister(instr->context()).is(cp)); | 3536 ASSERT(ToRegister(instr->context()).is(cp)); |
| 3537 __ push(cp); // The context is the first argument. | 3537 __ push(cp); // The context is the first argument. |
| 3538 __ Move(scratch0(), instr->hydrogen()->pairs()); | 3538 __ Move(scratch0(), instr->hydrogen()->pairs()); |
| 3539 __ push(scratch0()); | 3539 __ push(scratch0()); |
| 3540 __ mov(scratch0(), Operand(Smi::FromInt(instr->hydrogen()->flags()))); | 3540 __ mov(scratch0(), Operand(Smi::FromInt(instr->hydrogen()->flags()))); |
| 3541 __ push(scratch0()); | 3541 __ push(scratch0()); |
| 3542 CallRuntime(Runtime::kDeclareGlobals, 3, instr); | 3542 CallRuntime(Runtime::kHiddenDeclareGlobals, 3, instr); |
| 3543 } | 3543 } |
| 3544 | 3544 |
| 3545 | 3545 |
| 3546 void LCodeGen::CallKnownFunction(Handle<JSFunction> function, | 3546 void LCodeGen::CallKnownFunction(Handle<JSFunction> function, |
| 3547 int formal_parameter_count, | 3547 int formal_parameter_count, |
| 3548 int arity, | 3548 int arity, |
| 3549 LInstruction* instr, | 3549 LInstruction* instr, |
| 3550 R1State r1_state) { | 3550 R1State r1_state) { |
| 3551 bool dont_adapt_arguments = | 3551 bool dont_adapt_arguments = |
| 3552 formal_parameter_count == SharedFunctionInfo::kDontAdaptArgumentsSentinel; | 3552 formal_parameter_count == SharedFunctionInfo::kDontAdaptArgumentsSentinel; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3623 // exponent: floating point exponent value. | 3623 // exponent: floating point exponent value. |
| 3624 | 3624 |
| 3625 Label allocated, slow; | 3625 Label allocated, slow; |
| 3626 __ LoadRoot(tmp4, Heap::kHeapNumberMapRootIndex); | 3626 __ LoadRoot(tmp4, Heap::kHeapNumberMapRootIndex); |
| 3627 __ AllocateHeapNumber(tmp1, tmp2, tmp3, tmp4, &slow); | 3627 __ AllocateHeapNumber(tmp1, tmp2, tmp3, tmp4, &slow); |
| 3628 __ b(&allocated); | 3628 __ b(&allocated); |
| 3629 | 3629 |
| 3630 // Slow case: Call the runtime system to do the number allocation. | 3630 // Slow case: Call the runtime system to do the number allocation. |
| 3631 __ bind(&slow); | 3631 __ bind(&slow); |
| 3632 | 3632 |
| 3633 CallRuntimeFromDeferred(Runtime::kAllocateHeapNumber, 0, instr, | 3633 CallRuntimeFromDeferred(Runtime::kHiddenAllocateHeapNumber, 0, instr, |
| 3634 instr->context()); | 3634 instr->context()); |
| 3635 // Set the pointer to the new heap number in tmp. | 3635 // Set the pointer to the new heap number in tmp. |
| 3636 if (!tmp1.is(r0)) __ mov(tmp1, Operand(r0)); | 3636 if (!tmp1.is(r0)) __ mov(tmp1, Operand(r0)); |
| 3637 // Restore input_reg after call to runtime. | 3637 // Restore input_reg after call to runtime. |
| 3638 __ LoadFromSafepointRegisterSlot(input, input); | 3638 __ LoadFromSafepointRegisterSlot(input, input); |
| 3639 __ ldr(exponent, FieldMemOperand(input, HeapNumber::kExponentOffset)); | 3639 __ ldr(exponent, FieldMemOperand(input, HeapNumber::kExponentOffset)); |
| 3640 | 3640 |
| 3641 __ bind(&allocated); | 3641 __ bind(&allocated); |
| 3642 // exponent: floating point exponent value. | 3642 // exponent: floating point exponent value. |
| 3643 // tmp1: allocated heap number. | 3643 // tmp1: allocated heap number. |
| (...skipping 999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4643 // TODO(3095996): Put a valid pointer value in the stack slot where the | 4643 // TODO(3095996): Put a valid pointer value in the stack slot where the |
| 4644 // result register is stored, as this register is in the pointer map, but | 4644 // result register is stored, as this register is in the pointer map, but |
| 4645 // contains an integer value. | 4645 // contains an integer value. |
| 4646 __ mov(dst, Operand::Zero()); | 4646 __ mov(dst, Operand::Zero()); |
| 4647 | 4647 |
| 4648 // Preserve the value of all registers. | 4648 // Preserve the value of all registers. |
| 4649 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); | 4649 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); |
| 4650 | 4650 |
| 4651 // NumberTagI and NumberTagD use the context from the frame, rather than | 4651 // NumberTagI and NumberTagD use the context from the frame, rather than |
| 4652 // the environment's HContext or HInlinedContext value. | 4652 // the environment's HContext or HInlinedContext value. |
| 4653 // They only call Runtime::kAllocateHeapNumber. | 4653 // They only call Runtime::kHiddenAllocateHeapNumber. |
| 4654 // The corresponding HChange instructions are added in a phase that does | 4654 // The corresponding HChange instructions are added in a phase that does |
| 4655 // not have easy access to the local context. | 4655 // not have easy access to the local context. |
| 4656 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 4656 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 4657 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber); | 4657 __ CallRuntimeSaveDoubles(Runtime::kHiddenAllocateHeapNumber); |
| 4658 RecordSafepointWithRegisters( | 4658 RecordSafepointWithRegisters( |
| 4659 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); | 4659 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); |
| 4660 __ sub(r0, r0, Operand(kHeapObjectTag)); | 4660 __ sub(r0, r0, Operand(kHeapObjectTag)); |
| 4661 __ StoreToSafepointRegisterSlot(r0, dst); | 4661 __ StoreToSafepointRegisterSlot(r0, dst); |
| 4662 } | 4662 } |
| 4663 | 4663 |
| 4664 // Done. Put the value in dbl_scratch into the value of the allocated heap | 4664 // Done. Put the value in dbl_scratch into the value of the allocated heap |
| 4665 // number. | 4665 // number. |
| 4666 __ bind(&done); | 4666 __ bind(&done); |
| 4667 __ vstr(dbl_scratch, dst, HeapNumber::kValueOffset); | 4667 __ vstr(dbl_scratch, dst, HeapNumber::kValueOffset); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4707 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { | 4707 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { |
| 4708 // TODO(3095996): Get rid of this. For now, we need to make the | 4708 // TODO(3095996): Get rid of this. For now, we need to make the |
| 4709 // result register contain a valid pointer because it is already | 4709 // result register contain a valid pointer because it is already |
| 4710 // contained in the register pointer map. | 4710 // contained in the register pointer map. |
| 4711 Register reg = ToRegister(instr->result()); | 4711 Register reg = ToRegister(instr->result()); |
| 4712 __ mov(reg, Operand::Zero()); | 4712 __ mov(reg, Operand::Zero()); |
| 4713 | 4713 |
| 4714 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); | 4714 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); |
| 4715 // NumberTagI and NumberTagD use the context from the frame, rather than | 4715 // NumberTagI and NumberTagD use the context from the frame, rather than |
| 4716 // the environment's HContext or HInlinedContext value. | 4716 // the environment's HContext or HInlinedContext value. |
| 4717 // They only call Runtime::kAllocateHeapNumber. | 4717 // They only call Runtime::kHiddenAllocateHeapNumber. |
| 4718 // The corresponding HChange instructions are added in a phase that does | 4718 // The corresponding HChange instructions are added in a phase that does |
| 4719 // not have easy access to the local context. | 4719 // not have easy access to the local context. |
| 4720 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 4720 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 4721 __ CallRuntimeSaveDoubles(Runtime::kAllocateHeapNumber); | 4721 __ CallRuntimeSaveDoubles(Runtime::kHiddenAllocateHeapNumber); |
| 4722 RecordSafepointWithRegisters( | 4722 RecordSafepointWithRegisters( |
| 4723 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); | 4723 instr->pointer_map(), 0, Safepoint::kNoLazyDeopt); |
| 4724 __ sub(r0, r0, Operand(kHeapObjectTag)); | 4724 __ sub(r0, r0, Operand(kHeapObjectTag)); |
| 4725 __ StoreToSafepointRegisterSlot(r0, reg); | 4725 __ StoreToSafepointRegisterSlot(r0, reg); |
| 4726 } | 4726 } |
| 4727 | 4727 |
| 4728 | 4728 |
| 4729 void LCodeGen::DoSmiTag(LSmiTag* instr) { | 4729 void LCodeGen::DoSmiTag(LSmiTag* instr) { |
| 4730 HChange* hchange = instr->hydrogen(); | 4730 HChange* hchange = instr->hydrogen(); |
| 4731 Register input = ToRegister(instr->value()); | 4731 Register input = ToRegister(instr->value()); |
| (...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5312 flags = AllocateTargetSpace::update(flags, OLD_POINTER_SPACE); | 5312 flags = AllocateTargetSpace::update(flags, OLD_POINTER_SPACE); |
| 5313 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) { | 5313 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) { |
| 5314 ASSERT(!instr->hydrogen()->IsNewSpaceAllocation()); | 5314 ASSERT(!instr->hydrogen()->IsNewSpaceAllocation()); |
| 5315 flags = AllocateTargetSpace::update(flags, OLD_DATA_SPACE); | 5315 flags = AllocateTargetSpace::update(flags, OLD_DATA_SPACE); |
| 5316 } else { | 5316 } else { |
| 5317 flags = AllocateTargetSpace::update(flags, NEW_SPACE); | 5317 flags = AllocateTargetSpace::update(flags, NEW_SPACE); |
| 5318 } | 5318 } |
| 5319 __ Push(Smi::FromInt(flags)); | 5319 __ Push(Smi::FromInt(flags)); |
| 5320 | 5320 |
| 5321 CallRuntimeFromDeferred( | 5321 CallRuntimeFromDeferred( |
| 5322 Runtime::kAllocateInTargetSpace, 2, instr, instr->context()); | 5322 Runtime::kHiddenAllocateInTargetSpace, 2, instr, instr->context()); |
| 5323 __ StoreToSafepointRegisterSlot(r0, result); | 5323 __ StoreToSafepointRegisterSlot(r0, result); |
| 5324 } | 5324 } |
| 5325 | 5325 |
| 5326 | 5326 |
| 5327 void LCodeGen::DoToFastProperties(LToFastProperties* instr) { | 5327 void LCodeGen::DoToFastProperties(LToFastProperties* instr) { |
| 5328 ASSERT(ToRegister(instr->value()).is(r0)); | 5328 ASSERT(ToRegister(instr->value()).is(r0)); |
| 5329 __ push(r0); | 5329 __ push(r0); |
| 5330 CallRuntime(Runtime::kToFastProperties, 1, instr); | 5330 CallRuntime(Runtime::kToFastProperties, 1, instr); |
| 5331 } | 5331 } |
| 5332 | 5332 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 5346 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); | 5346 __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); |
| 5347 __ cmp(r1, ip); | 5347 __ cmp(r1, ip); |
| 5348 __ b(ne, &materialized); | 5348 __ b(ne, &materialized); |
| 5349 | 5349 |
| 5350 // Create regexp literal using runtime function | 5350 // Create regexp literal using runtime function |
| 5351 // Result will be in r0. | 5351 // Result will be in r0. |
| 5352 __ mov(r5, Operand(Smi::FromInt(instr->hydrogen()->literal_index()))); | 5352 __ mov(r5, Operand(Smi::FromInt(instr->hydrogen()->literal_index()))); |
| 5353 __ mov(r4, Operand(instr->hydrogen()->pattern())); | 5353 __ mov(r4, Operand(instr->hydrogen()->pattern())); |
| 5354 __ mov(r3, Operand(instr->hydrogen()->flags())); | 5354 __ mov(r3, Operand(instr->hydrogen()->flags())); |
| 5355 __ Push(r6, r5, r4, r3); | 5355 __ Push(r6, r5, r4, r3); |
| 5356 CallRuntime(Runtime::kMaterializeRegExpLiteral, 4, instr); | 5356 CallRuntime(Runtime::kHiddenMaterializeRegExpLiteral, 4, instr); |
| 5357 __ mov(r1, r0); | 5357 __ mov(r1, r0); |
| 5358 | 5358 |
| 5359 __ bind(&materialized); | 5359 __ bind(&materialized); |
| 5360 int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize; | 5360 int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize; |
| 5361 Label allocated, runtime_allocate; | 5361 Label allocated, runtime_allocate; |
| 5362 | 5362 |
| 5363 __ Allocate(size, r0, r2, r3, &runtime_allocate, TAG_OBJECT); | 5363 __ Allocate(size, r0, r2, r3, &runtime_allocate, TAG_OBJECT); |
| 5364 __ jmp(&allocated); | 5364 __ jmp(&allocated); |
| 5365 | 5365 |
| 5366 __ bind(&runtime_allocate); | 5366 __ bind(&runtime_allocate); |
| 5367 __ mov(r0, Operand(Smi::FromInt(size))); | 5367 __ mov(r0, Operand(Smi::FromInt(size))); |
| 5368 __ Push(r1, r0); | 5368 __ Push(r1, r0); |
| 5369 CallRuntime(Runtime::kAllocateInNewSpace, 1, instr); | 5369 CallRuntime(Runtime::kHiddenAllocateInNewSpace, 1, instr); |
| 5370 __ pop(r1); | 5370 __ pop(r1); |
| 5371 | 5371 |
| 5372 __ bind(&allocated); | 5372 __ bind(&allocated); |
| 5373 // Copy the content into the newly allocated memory. | 5373 // Copy the content into the newly allocated memory. |
| 5374 __ CopyFields(r0, r1, double_scratch0(), size / kPointerSize); | 5374 __ CopyFields(r0, r1, double_scratch0(), size / kPointerSize); |
| 5375 } | 5375 } |
| 5376 | 5376 |
| 5377 | 5377 |
| 5378 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { | 5378 void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) { |
| 5379 ASSERT(ToRegister(instr->context()).is(cp)); | 5379 ASSERT(ToRegister(instr->context()).is(cp)); |
| 5380 // Use the fast case closure allocation code that allocates in new | 5380 // Use the fast case closure allocation code that allocates in new |
| 5381 // space for nested functions that don't need literals cloning. | 5381 // space for nested functions that don't need literals cloning. |
| 5382 bool pretenure = instr->hydrogen()->pretenure(); | 5382 bool pretenure = instr->hydrogen()->pretenure(); |
| 5383 if (!pretenure && instr->hydrogen()->has_no_literals()) { | 5383 if (!pretenure && instr->hydrogen()->has_no_literals()) { |
| 5384 FastNewClosureStub stub(instr->hydrogen()->strict_mode(), | 5384 FastNewClosureStub stub(instr->hydrogen()->strict_mode(), |
| 5385 instr->hydrogen()->is_generator()); | 5385 instr->hydrogen()->is_generator()); |
| 5386 __ mov(r2, Operand(instr->hydrogen()->shared_info())); | 5386 __ mov(r2, Operand(instr->hydrogen()->shared_info())); |
| 5387 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); | 5387 CallCode(stub.GetCode(isolate()), RelocInfo::CODE_TARGET, instr); |
| 5388 } else { | 5388 } else { |
| 5389 __ mov(r2, Operand(instr->hydrogen()->shared_info())); | 5389 __ mov(r2, Operand(instr->hydrogen()->shared_info())); |
| 5390 __ mov(r1, Operand(pretenure ? factory()->true_value() | 5390 __ mov(r1, Operand(pretenure ? factory()->true_value() |
| 5391 : factory()->false_value())); | 5391 : factory()->false_value())); |
| 5392 __ Push(cp, r2, r1); | 5392 __ Push(cp, r2, r1); |
| 5393 CallRuntime(Runtime::kNewClosure, 3, instr); | 5393 CallRuntime(Runtime::kHiddenNewClosure, 3, instr); |
| 5394 } | 5394 } |
| 5395 } | 5395 } |
| 5396 | 5396 |
| 5397 | 5397 |
| 5398 void LCodeGen::DoTypeof(LTypeof* instr) { | 5398 void LCodeGen::DoTypeof(LTypeof* instr) { |
| 5399 Register input = ToRegister(instr->value()); | 5399 Register input = ToRegister(instr->value()); |
| 5400 __ push(input); | 5400 __ push(input); |
| 5401 CallRuntime(Runtime::kTypeof, 1, instr); | 5401 CallRuntime(Runtime::kTypeof, 1, instr); |
| 5402 } | 5402 } |
| 5403 | 5403 |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5568 | 5568 |
| 5569 | 5569 |
| 5570 void LCodeGen::DoDummyUse(LDummyUse* instr) { | 5570 void LCodeGen::DoDummyUse(LDummyUse* instr) { |
| 5571 // Nothing to see here, move on! | 5571 // Nothing to see here, move on! |
| 5572 } | 5572 } |
| 5573 | 5573 |
| 5574 | 5574 |
| 5575 void LCodeGen::DoDeferredStackCheck(LStackCheck* instr) { | 5575 void LCodeGen::DoDeferredStackCheck(LStackCheck* instr) { |
| 5576 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); | 5576 PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters); |
| 5577 LoadContextFromDeferred(instr->context()); | 5577 LoadContextFromDeferred(instr->context()); |
| 5578 __ CallRuntimeSaveDoubles(Runtime::kStackGuard); | 5578 __ CallRuntimeSaveDoubles(Runtime::kHiddenStackGuard); |
| 5579 RecordSafepointWithLazyDeopt( | 5579 RecordSafepointWithLazyDeopt( |
| 5580 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); | 5580 instr, RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS); |
| 5581 ASSERT(instr->HasEnvironment()); | 5581 ASSERT(instr->HasEnvironment()); |
| 5582 LEnvironment* env = instr->environment(); | 5582 LEnvironment* env = instr->environment(); |
| 5583 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); | 5583 safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); |
| 5584 } | 5584 } |
| 5585 | 5585 |
| 5586 | 5586 |
| 5587 void LCodeGen::DoStackCheck(LStackCheck* instr) { | 5587 void LCodeGen::DoStackCheck(LStackCheck* instr) { |
| 5588 class DeferredStackCheck V8_FINAL : public LDeferredCode { | 5588 class DeferredStackCheck V8_FINAL : public LDeferredCode { |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5738 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); | 5738 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); |
| 5739 __ ldr(result, FieldMemOperand(scratch, | 5739 __ ldr(result, FieldMemOperand(scratch, |
| 5740 FixedArray::kHeaderSize - kPointerSize)); | 5740 FixedArray::kHeaderSize - kPointerSize)); |
| 5741 __ bind(&done); | 5741 __ bind(&done); |
| 5742 } | 5742 } |
| 5743 | 5743 |
| 5744 | 5744 |
| 5745 #undef __ | 5745 #undef __ |
| 5746 | 5746 |
| 5747 } } // namespace v8::internal | 5747 } } // namespace v8::internal |
| OLD | NEW |