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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM | 7 #if V8_TARGET_ARCH_ARM |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 4351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4362 } | 4362 } |
4363 | 4363 |
4364 | 4364 |
4365 void VectorRawLoadStub::GenerateForTrampoline(MacroAssembler* masm) { | 4365 void VectorRawLoadStub::GenerateForTrampoline(MacroAssembler* masm) { |
4366 GenerateImpl(masm, true); | 4366 GenerateImpl(masm, true); |
4367 } | 4367 } |
4368 | 4368 |
4369 | 4369 |
4370 static void HandleArrayCases(MacroAssembler* masm, Register receiver, | 4370 static void HandleArrayCases(MacroAssembler* masm, Register receiver, |
4371 Register key, Register vector, Register slot, | 4371 Register key, Register vector, Register slot, |
4372 Register feedback, Register scratch1, | 4372 Register feedback, Register receiver_map, |
4373 Register scratch2, Register scratch3, | 4373 Register scratch1, Register scratch2, |
4374 bool is_polymorphic, Label* miss) { | 4374 bool is_polymorphic, Label* miss) { |
4375 // feedback initially contains the feedback array | 4375 // feedback initially contains the feedback array |
4376 Label next_loop, prepare_next; | 4376 Label next_loop, prepare_next; |
4377 Label load_smi_map, compare_map; | |
4378 Label start_polymorphic; | 4377 Label start_polymorphic; |
4379 | 4378 |
4380 Register receiver_map = scratch1; | 4379 Register cached_map = scratch1; |
4381 Register cached_map = scratch2; | |
4382 | 4380 |
4383 // Receiver might not be a heap object. | |
4384 __ JumpIfSmi(receiver, &load_smi_map); | |
4385 __ ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | |
4386 __ bind(&compare_map); | |
4387 __ ldr(cached_map, | 4381 __ ldr(cached_map, |
4388 FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(0))); | 4382 FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(0))); |
4389 __ ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); | 4383 __ ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); |
4390 __ cmp(receiver_map, cached_map); | 4384 __ cmp(receiver_map, cached_map); |
4391 __ b(ne, &start_polymorphic); | 4385 __ b(ne, &start_polymorphic); |
4392 // found, now call handler. | 4386 // found, now call handler. |
4393 Register handler = feedback; | 4387 Register handler = feedback; |
4394 __ ldr(handler, FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(1))); | 4388 __ ldr(handler, FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(1))); |
4395 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); | 4389 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); |
4396 | 4390 |
4397 | 4391 |
4398 Register length = scratch3; | 4392 Register length = scratch2; |
4399 __ bind(&start_polymorphic); | 4393 __ bind(&start_polymorphic); |
4400 __ ldr(length, FieldMemOperand(feedback, FixedArray::kLengthOffset)); | 4394 __ ldr(length, FieldMemOperand(feedback, FixedArray::kLengthOffset)); |
4401 if (!is_polymorphic) { | 4395 if (!is_polymorphic) { |
4402 // If the IC could be monomorphic we have to make sure we don't go past the | 4396 // If the IC could be monomorphic we have to make sure we don't go past the |
4403 // end of the feedback array. | 4397 // end of the feedback array. |
4404 __ cmp(length, Operand(Smi::FromInt(2))); | 4398 __ cmp(length, Operand(Smi::FromInt(2))); |
4405 __ b(eq, miss); | 4399 __ b(eq, miss); |
4406 } | 4400 } |
4407 | 4401 |
4408 Register too_far = length; | 4402 Register too_far = length; |
4409 Register pointer_reg = feedback; | 4403 Register pointer_reg = feedback; |
4410 | 4404 |
4411 // +-----+------+------+-----+-----+ ... ----+ | 4405 // +-----+------+------+-----+-----+ ... ----+ |
4412 // | map | len | wm0 | h0 | wm1 | hN | | 4406 // | map | len | wm0 | h0 | wm1 | hN | |
4413 // +-----+------+------+-----+-----+ ... ----+ | 4407 // +-----+------+------+-----+-----+ ... ----+ |
4414 // 0 1 2 len-1 | 4408 // 0 1 2 len-1 |
4415 // ^ ^ | 4409 // ^ ^ |
4416 // | | | 4410 // | | |
4417 // pointer_reg too_far | 4411 // pointer_reg too_far |
4418 // aka feedback scratch3 | 4412 // aka feedback scratch2 |
4419 // also need receiver_map (aka scratch1) | 4413 // also need receiver_map |
4420 // use cached_map (scratch2) to look in the weak map values. | 4414 // use cached_map (scratch1) to look in the weak map values. |
4421 __ add(too_far, feedback, Operand::PointerOffsetFromSmiKey(length)); | 4415 __ add(too_far, feedback, Operand::PointerOffsetFromSmiKey(length)); |
4422 __ add(too_far, too_far, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); | 4416 __ add(too_far, too_far, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); |
4423 __ add(pointer_reg, feedback, | 4417 __ add(pointer_reg, feedback, |
4424 Operand(FixedArray::OffsetOfElementAt(2) - kHeapObjectTag)); | 4418 Operand(FixedArray::OffsetOfElementAt(2) - kHeapObjectTag)); |
4425 | 4419 |
4426 __ bind(&next_loop); | 4420 __ bind(&next_loop); |
4427 __ ldr(cached_map, MemOperand(pointer_reg)); | 4421 __ ldr(cached_map, MemOperand(pointer_reg)); |
4428 __ ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); | 4422 __ ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); |
4429 __ cmp(receiver_map, cached_map); | 4423 __ cmp(receiver_map, cached_map); |
4430 __ b(ne, &prepare_next); | 4424 __ b(ne, &prepare_next); |
4431 __ ldr(handler, MemOperand(pointer_reg, kPointerSize)); | 4425 __ ldr(handler, MemOperand(pointer_reg, kPointerSize)); |
4432 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); | 4426 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); |
4433 | 4427 |
4434 __ bind(&prepare_next); | 4428 __ bind(&prepare_next); |
4435 __ add(pointer_reg, pointer_reg, Operand(kPointerSize * 2)); | 4429 __ add(pointer_reg, pointer_reg, Operand(kPointerSize * 2)); |
4436 __ cmp(pointer_reg, too_far); | 4430 __ cmp(pointer_reg, too_far); |
4437 __ b(lt, &next_loop); | 4431 __ b(lt, &next_loop); |
4438 | 4432 |
4439 // We exhausted our array of map handler pairs. | 4433 // We exhausted our array of map handler pairs. |
4440 __ jmp(miss); | 4434 __ jmp(miss); |
4441 | |
4442 __ bind(&load_smi_map); | |
4443 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); | |
4444 __ jmp(&compare_map); | |
4445 } | 4435 } |
4446 | 4436 |
4447 | 4437 |
4448 static void HandleMonomorphicCase(MacroAssembler* masm, Register receiver, | 4438 static void HandleMonomorphicCase(MacroAssembler* masm, Register receiver, |
4449 Register key, Register vector, Register slot, | 4439 Register receiver_map, Register feedback, |
4450 Register weak_cell, Register scratch, | 4440 Register vector, Register slot, |
4451 Label* miss) { | 4441 Register scratch, Label* compare_map, |
4452 // feedback initially contains the feedback array | 4442 Label* load_smi_map, Label* try_array) { |
4453 Label compare_smi_map; | 4443 __ JumpIfSmi(receiver, load_smi_map); |
4454 Register receiver_map = scratch; | 4444 __ ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); |
4455 Register cached_map = weak_cell; | 4445 __ bind(compare_map); |
4456 | 4446 Register cached_map = scratch; |
4457 // Move the weak map into the weak_cell register. | 4447 // Move the weak map into the weak_cell register. |
4458 __ ldr(cached_map, FieldMemOperand(weak_cell, WeakCell::kValueOffset)); | 4448 __ ldr(cached_map, FieldMemOperand(feedback, WeakCell::kValueOffset)); |
4459 | |
4460 // Receiver might not be a heap object. | |
4461 __ JumpIfSmi(receiver, &compare_smi_map); | |
4462 __ ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | |
4463 __ cmp(cached_map, receiver_map); | 4449 __ cmp(cached_map, receiver_map); |
4464 __ b(ne, miss); | 4450 __ b(ne, try_array); |
4465 | 4451 Register handler = feedback; |
4466 Register handler = weak_cell; | |
4467 __ add(handler, vector, Operand::PointerOffsetFromSmiKey(slot)); | 4452 __ add(handler, vector, Operand::PointerOffsetFromSmiKey(slot)); |
4468 __ ldr(handler, | 4453 __ ldr(handler, |
4469 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); | 4454 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); |
4470 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); | |
4471 | |
4472 // In microbenchmarks, it made sense to unroll this code so that the call to | |
4473 // the handler is duplicated for a HeapObject receiver and a Smi receiver. | |
4474 __ bind(&compare_smi_map); | |
4475 __ CompareRoot(weak_cell, Heap::kHeapNumberMapRootIndex); | |
4476 __ b(ne, miss); | |
4477 __ add(handler, vector, Operand::PointerOffsetFromSmiKey(slot)); | |
4478 __ ldr(handler, | |
4479 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); | |
4480 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); | 4455 __ add(pc, handler, Operand(Code::kHeaderSize - kHeapObjectTag)); |
4481 } | 4456 } |
4482 | 4457 |
4483 | 4458 |
4484 void VectorRawLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | 4459 void VectorRawLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
4485 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // r1 | 4460 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // r1 |
4486 Register name = VectorLoadICDescriptor::NameRegister(); // r2 | 4461 Register name = VectorLoadICDescriptor::NameRegister(); // r2 |
4487 Register vector = VectorLoadICDescriptor::VectorRegister(); // r3 | 4462 Register vector = VectorLoadICDescriptor::VectorRegister(); // r3 |
4488 Register slot = VectorLoadICDescriptor::SlotRegister(); // r0 | 4463 Register slot = VectorLoadICDescriptor::SlotRegister(); // r0 |
4489 Register feedback = r4; | 4464 Register feedback = r4; |
4490 Register scratch1 = r5; | 4465 Register receiver_map = r5; |
| 4466 Register scratch1 = r8; |
4491 | 4467 |
4492 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); | 4468 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); |
4493 __ ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); | 4469 __ ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); |
4494 | 4470 |
4495 // Is it a weak cell? | 4471 // Try to quickly handle the monomorphic case without knowing for sure |
4496 Label try_array; | 4472 // if we have a weak cell in feedback. We do know it's safe to look |
4497 Label not_array, smi_key, key_okay, miss; | 4473 // at WeakCell::kValueOffset. |
4498 __ ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); | 4474 Label try_array, load_smi_map, compare_map; |
4499 __ CompareRoot(scratch1, Heap::kWeakCellMapRootIndex); | 4475 Label not_array, miss; |
4500 __ b(ne, &try_array); | 4476 HandleMonomorphicCase(masm, receiver, receiver_map, feedback, vector, slot, |
4501 HandleMonomorphicCase(masm, receiver, name, vector, slot, feedback, scratch1, | 4477 scratch1, &compare_map, &load_smi_map, &try_array); |
4502 &miss); | |
4503 | 4478 |
4504 // Is it a fixed array? | 4479 // Is it a fixed array? |
4505 __ bind(&try_array); | 4480 __ bind(&try_array); |
| 4481 __ ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); |
4506 __ CompareRoot(scratch1, Heap::kFixedArrayMapRootIndex); | 4482 __ CompareRoot(scratch1, Heap::kFixedArrayMapRootIndex); |
4507 __ b(ne, ¬_array); | 4483 __ b(ne, ¬_array); |
4508 HandleArrayCases(masm, receiver, name, vector, slot, feedback, scratch1, r8, | 4484 HandleArrayCases(masm, receiver, name, vector, slot, feedback, receiver_map, |
4509 r9, true, &miss); | 4485 scratch1, r9, true, &miss); |
4510 | 4486 |
4511 __ bind(¬_array); | 4487 __ bind(¬_array); |
4512 __ CompareRoot(feedback, Heap::kmegamorphic_symbolRootIndex); | 4488 __ CompareRoot(feedback, Heap::kmegamorphic_symbolRootIndex); |
4513 __ b(ne, &miss); | 4489 __ b(ne, &miss); |
4514 Code::Flags code_flags = Code::RemoveTypeAndHolderFromFlags( | 4490 Code::Flags code_flags = Code::RemoveTypeAndHolderFromFlags( |
4515 Code::ComputeHandlerFlags(Code::LOAD_IC)); | 4491 Code::ComputeHandlerFlags(Code::LOAD_IC)); |
4516 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::LOAD_IC, code_flags, | 4492 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::LOAD_IC, code_flags, |
4517 false, receiver, name, feedback, | 4493 false, receiver, name, feedback, |
4518 scratch1, r8, r9); | 4494 receiver_map, scratch1, r9); |
4519 | 4495 |
4520 __ bind(&miss); | 4496 __ bind(&miss); |
4521 LoadIC::GenerateMiss(masm); | 4497 LoadIC::GenerateMiss(masm); |
| 4498 |
| 4499 |
| 4500 __ bind(&load_smi_map); |
| 4501 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
| 4502 __ jmp(&compare_map); |
4522 } | 4503 } |
4523 | 4504 |
4524 | 4505 |
4525 void VectorRawKeyedLoadStub::Generate(MacroAssembler* masm) { | 4506 void VectorRawKeyedLoadStub::Generate(MacroAssembler* masm) { |
4526 GenerateImpl(masm, false); | 4507 GenerateImpl(masm, false); |
4527 } | 4508 } |
4528 | 4509 |
4529 | 4510 |
4530 void VectorRawKeyedLoadStub::GenerateForTrampoline(MacroAssembler* masm) { | 4511 void VectorRawKeyedLoadStub::GenerateForTrampoline(MacroAssembler* masm) { |
4531 GenerateImpl(masm, true); | 4512 GenerateImpl(masm, true); |
4532 } | 4513 } |
4533 | 4514 |
4534 | 4515 |
4535 void VectorRawKeyedLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | 4516 void VectorRawKeyedLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
4536 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // r1 | 4517 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // r1 |
4537 Register key = VectorLoadICDescriptor::NameRegister(); // r2 | 4518 Register key = VectorLoadICDescriptor::NameRegister(); // r2 |
4538 Register vector = VectorLoadICDescriptor::VectorRegister(); // r3 | 4519 Register vector = VectorLoadICDescriptor::VectorRegister(); // r3 |
4539 Register slot = VectorLoadICDescriptor::SlotRegister(); // r0 | 4520 Register slot = VectorLoadICDescriptor::SlotRegister(); // r0 |
4540 Register feedback = r4; | 4521 Register feedback = r4; |
4541 Register scratch1 = r5; | 4522 Register receiver_map = r5; |
| 4523 Register scratch1 = r8; |
4542 | 4524 |
4543 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); | 4525 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); |
4544 __ ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); | 4526 __ ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); |
4545 | 4527 |
4546 // Is it a weak cell? | 4528 // Try to quickly handle the monomorphic case without knowing for sure |
4547 Label try_array; | 4529 // if we have a weak cell in feedback. We do know it's safe to look |
4548 Label not_array, smi_key, key_okay, miss; | 4530 // at WeakCell::kValueOffset. |
4549 __ ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); | 4531 Label try_array, load_smi_map, compare_map; |
4550 __ CompareRoot(scratch1, Heap::kWeakCellMapRootIndex); | 4532 Label not_array, miss; |
4551 __ b(ne, &try_array); | 4533 HandleMonomorphicCase(masm, receiver, receiver_map, feedback, vector, slot, |
4552 HandleMonomorphicCase(masm, receiver, key, vector, slot, feedback, scratch1, | 4534 scratch1, &compare_map, &load_smi_map, &try_array); |
4553 &miss); | |
4554 | 4535 |
4555 __ bind(&try_array); | 4536 __ bind(&try_array); |
4556 // Is it a fixed array? | 4537 // Is it a fixed array? |
| 4538 __ ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); |
4557 __ CompareRoot(scratch1, Heap::kFixedArrayMapRootIndex); | 4539 __ CompareRoot(scratch1, Heap::kFixedArrayMapRootIndex); |
4558 __ b(ne, ¬_array); | 4540 __ b(ne, ¬_array); |
4559 | 4541 |
4560 // We have a polymorphic element handler. | 4542 // We have a polymorphic element handler. |
4561 Label polymorphic, try_poly_name; | 4543 Label polymorphic, try_poly_name; |
4562 __ bind(&polymorphic); | 4544 __ bind(&polymorphic); |
4563 HandleArrayCases(masm, receiver, key, vector, slot, feedback, scratch1, r8, | 4545 HandleArrayCases(masm, receiver, key, vector, slot, feedback, receiver_map, |
4564 r9, true, &miss); | 4546 scratch1, r9, true, &miss); |
4565 | 4547 |
4566 __ bind(¬_array); | 4548 __ bind(¬_array); |
4567 // Is it generic? | 4549 // Is it generic? |
4568 __ CompareRoot(feedback, Heap::kmegamorphic_symbolRootIndex); | 4550 __ CompareRoot(feedback, Heap::kmegamorphic_symbolRootIndex); |
4569 __ b(ne, &try_poly_name); | 4551 __ b(ne, &try_poly_name); |
4570 Handle<Code> megamorphic_stub = | 4552 Handle<Code> megamorphic_stub = |
4571 KeyedLoadIC::ChooseMegamorphicStub(masm->isolate()); | 4553 KeyedLoadIC::ChooseMegamorphicStub(masm->isolate()); |
4572 __ Jump(megamorphic_stub, RelocInfo::CODE_TARGET); | 4554 __ Jump(megamorphic_stub, RelocInfo::CODE_TARGET); |
4573 | 4555 |
4574 __ bind(&try_poly_name); | 4556 __ bind(&try_poly_name); |
4575 // We might have a name in feedback, and a fixed array in the next slot. | 4557 // We might have a name in feedback, and a fixed array in the next slot. |
4576 __ cmp(key, feedback); | 4558 __ cmp(key, feedback); |
4577 __ b(ne, &miss); | 4559 __ b(ne, &miss); |
4578 // If the name comparison succeeded, we know we have a fixed array with | 4560 // If the name comparison succeeded, we know we have a fixed array with |
4579 // at least one map/handler pair. | 4561 // at least one map/handler pair. |
4580 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); | 4562 __ add(feedback, vector, Operand::PointerOffsetFromSmiKey(slot)); |
4581 __ ldr(feedback, | 4563 __ ldr(feedback, |
4582 FieldMemOperand(feedback, FixedArray::kHeaderSize + kPointerSize)); | 4564 FieldMemOperand(feedback, FixedArray::kHeaderSize + kPointerSize)); |
4583 HandleArrayCases(masm, receiver, key, vector, slot, feedback, scratch1, r8, | 4565 HandleArrayCases(masm, receiver, key, vector, slot, feedback, receiver_map, |
4584 r9, false, &miss); | 4566 scratch1, r9, false, &miss); |
4585 | 4567 |
4586 __ bind(&miss); | 4568 __ bind(&miss); |
4587 KeyedLoadIC::GenerateMiss(masm); | 4569 KeyedLoadIC::GenerateMiss(masm); |
| 4570 |
| 4571 __ bind(&load_smi_map); |
| 4572 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
| 4573 __ jmp(&compare_map); |
4588 } | 4574 } |
4589 | 4575 |
4590 | 4576 |
4591 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { | 4577 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { |
4592 if (masm->isolate()->function_entry_hook() != NULL) { | 4578 if (masm->isolate()->function_entry_hook() != NULL) { |
4593 ProfileEntryHookStub stub(masm->isolate()); | 4579 ProfileEntryHookStub stub(masm->isolate()); |
4594 int code_size = masm->CallStubSize(&stub) + 2 * Assembler::kInstrSize; | 4580 int code_size = masm->CallStubSize(&stub) + 2 * Assembler::kInstrSize; |
4595 PredictableCodeSizeScope predictable(masm, code_size); | 4581 PredictableCodeSizeScope predictable(masm, code_size); |
4596 __ push(lr); | 4582 __ push(lr); |
4597 __ CallStub(&stub); | 4583 __ CallStub(&stub); |
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5289 kStackUnwindSpace, NULL, | 5275 kStackUnwindSpace, NULL, |
5290 MemOperand(fp, 6 * kPointerSize), NULL); | 5276 MemOperand(fp, 6 * kPointerSize), NULL); |
5291 } | 5277 } |
5292 | 5278 |
5293 | 5279 |
5294 #undef __ | 5280 #undef __ |
5295 | 5281 |
5296 } } // namespace v8::internal | 5282 } } // namespace v8::internal |
5297 | 5283 |
5298 #endif // V8_TARGET_ARCH_ARM | 5284 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |