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

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 10735020: Optimize Smi keys for KeyedLoads (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: merge with latest Created 8 years, 5 months 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 | Annotate | Revision Log
OLDNEW
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 2483 matching lines...) Expand 10 before | Expand all | Expand 10 after
2494 DeoptimizeIf(below_equal, instr->environment()); 2494 DeoptimizeIf(below_equal, instr->environment());
2495 2495
2496 // There are two words between the frame pointer and the last argument. 2496 // There are two words between the frame pointer and the last argument.
2497 // Subtracting from length accounts for one of them add one more. 2497 // Subtracting from length accounts for one of them add one more.
2498 __ movq(result, Operand(arguments, length, times_pointer_size, kPointerSize)); 2498 __ movq(result, Operand(arguments, length, times_pointer_size, kPointerSize));
2499 } 2499 }
2500 2500
2501 2501
2502 void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) { 2502 void LCodeGen::DoLoadKeyedFastElement(LLoadKeyedFastElement* instr) {
2503 Register result = ToRegister(instr->result()); 2503 Register result = ToRegister(instr->result());
2504 2504 LOperand* key = instr->key();
2505 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) { 2505 if (!key->IsConstantOperand()) {
2506 // Sign extend key because it could be a 32 bit negative value 2506 Register key_reg = ToRegister(key);
2507 // and the dehoisted address computation happens in 64 bits. 2507 if (instr->hydrogen()->key()->representation().IsTagged()) {
2508 Register key_reg = ToRegister(instr->key()); 2508 __ SmiToInteger64(key_reg, key_reg);
2509 __ movsxlq(key_reg, key_reg); 2509 } else if (instr->hydrogen()->IsDehoisted()) {
2510 // Sign extend key because it could be a 32 bit negative value
2511 // and the dehoisted address computation happens in 64 bits
2512 __ movsxlq(key_reg, key_reg);
2513 }
2510 } 2514 }
2511 2515
2512 // Load the result. 2516 // Load the result.
2513 __ movq(result, 2517 __ movq(result,
2514 BuildFastArrayOperand(instr->elements(), 2518 BuildFastArrayOperand(instr->elements(),
2515 instr->key(), 2519 key,
2516 FAST_ELEMENTS, 2520 FAST_ELEMENTS,
2517 FixedArray::kHeaderSize - kHeapObjectTag, 2521 FixedArray::kHeaderSize - kHeapObjectTag,
2518 instr->additional_index())); 2522 instr->additional_index()));
2519 2523
2520 // Check for the hole value. 2524 // Check for the hole value.
2521 if (instr->hydrogen()->RequiresHoleCheck()) { 2525 if (instr->hydrogen()->RequiresHoleCheck()) {
2522 if (IsFastSmiElementsKind(instr->hydrogen()->elements_kind())) { 2526 if (IsFastSmiElementsKind(instr->hydrogen()->elements_kind())) {
2523 Condition smi = __ CheckSmi(result); 2527 Condition smi = __ CheckSmi(result);
2524 DeoptimizeIf(NegateCondition(smi), instr->environment()); 2528 DeoptimizeIf(NegateCondition(smi), instr->environment());
2525 } else { 2529 } else {
2526 __ CompareRoot(result, Heap::kTheHoleValueRootIndex); 2530 __ CompareRoot(result, Heap::kTheHoleValueRootIndex);
2527 DeoptimizeIf(equal, instr->environment()); 2531 DeoptimizeIf(equal, instr->environment());
2528 } 2532 }
2529 } 2533 }
2530 } 2534 }
2531 2535
2532 2536
2533 void LCodeGen::DoLoadKeyedFastDoubleElement( 2537 void LCodeGen::DoLoadKeyedFastDoubleElement(
2534 LLoadKeyedFastDoubleElement* instr) { 2538 LLoadKeyedFastDoubleElement* instr) {
2535 XMMRegister result(ToDoubleRegister(instr->result())); 2539 XMMRegister result(ToDoubleRegister(instr->result()));
2536 2540 LOperand* key = instr->key();
2537 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) { 2541 if (!key->IsConstantOperand()) {
2538 // Sign extend key because it could be a 32 bit negative value 2542 Register key_reg = ToRegister(key);
2539 // and the dehoisted address computation happens in 64 bits 2543 if (instr->hydrogen()->key()->representation().IsTagged()) {
2540 Register key_reg = ToRegister(instr->key()); 2544 __ SmiToInteger64(key_reg, key_reg);
2541 __ movsxlq(key_reg, key_reg); 2545 } else if (instr->hydrogen()->IsDehoisted()) {
2546 // Sign extend key because it could be a 32 bit negative value
2547 // and the dehoisted address computation happens in 64 bits
2548 __ movsxlq(key_reg, key_reg);
2549 }
2542 } 2550 }
2543 2551
2544 if (instr->hydrogen()->RequiresHoleCheck()) { 2552 if (instr->hydrogen()->RequiresHoleCheck()) {
2545 int offset = FixedDoubleArray::kHeaderSize - kHeapObjectTag + 2553 int offset = FixedDoubleArray::kHeaderSize - kHeapObjectTag +
2546 sizeof(kHoleNanLower32); 2554 sizeof(kHoleNanLower32);
2547 Operand hole_check_operand = BuildFastArrayOperand( 2555 Operand hole_check_operand = BuildFastArrayOperand(
2548 instr->elements(), 2556 instr->elements(),
2549 instr->key(), 2557 key,
2550 FAST_DOUBLE_ELEMENTS, 2558 FAST_DOUBLE_ELEMENTS,
2551 offset, 2559 offset,
2552 instr->additional_index()); 2560 instr->additional_index());
2553 __ cmpl(hole_check_operand, Immediate(kHoleNanUpper32)); 2561 __ cmpl(hole_check_operand, Immediate(kHoleNanUpper32));
2554 DeoptimizeIf(equal, instr->environment()); 2562 DeoptimizeIf(equal, instr->environment());
2555 } 2563 }
2556 2564
2557 Operand double_load_operand = BuildFastArrayOperand( 2565 Operand double_load_operand = BuildFastArrayOperand(
2558 instr->elements(), 2566 instr->elements(),
2559 instr->key(), 2567 key,
2560 FAST_DOUBLE_ELEMENTS, 2568 FAST_DOUBLE_ELEMENTS,
2561 FixedDoubleArray::kHeaderSize - kHeapObjectTag, 2569 FixedDoubleArray::kHeaderSize - kHeapObjectTag,
2562 instr->additional_index()); 2570 instr->additional_index());
2563 __ movsd(result, double_load_operand); 2571 __ movsd(result, double_load_operand);
2564 } 2572 }
2565 2573
2566 2574
2567 Operand LCodeGen::BuildFastArrayOperand( 2575 Operand LCodeGen::BuildFastArrayOperand(
2568 LOperand* elements_pointer, 2576 LOperand* elements_pointer,
2569 LOperand* key, 2577 LOperand* key,
(...skipping 16 matching lines...) Expand all
2586 ToRegister(key), 2594 ToRegister(key),
2587 scale_factor, 2595 scale_factor,
2588 offset + (additional_index << shift_size)); 2596 offset + (additional_index << shift_size));
2589 } 2597 }
2590 } 2598 }
2591 2599
2592 2600
2593 void LCodeGen::DoLoadKeyedSpecializedArrayElement( 2601 void LCodeGen::DoLoadKeyedSpecializedArrayElement(
2594 LLoadKeyedSpecializedArrayElement* instr) { 2602 LLoadKeyedSpecializedArrayElement* instr) {
2595 ElementsKind elements_kind = instr->elements_kind(); 2603 ElementsKind elements_kind = instr->elements_kind();
2596 Operand operand(BuildFastArrayOperand(instr->external_pointer(), 2604 LOperand* key = instr->key();
2597 instr->key(), 2605 if (!key->IsConstantOperand()) {
2598 elements_kind, 2606 Register key_reg = ToRegister(key);
2599 0, 2607 if (instr->hydrogen()->key()->representation().IsTagged()) {
2600 instr->additional_index())); 2608 __ SmiToInteger64(key_reg, key_reg);
2601 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) { 2609 } else if (instr->hydrogen()->IsDehoisted()) {
2602 // Sign extend key because it could be a 32 bit negative value 2610 // Sign extend key because it could be a 32 bit negative value
2603 // and the dehoisted address computation happens in 64 bits 2611 // and the dehoisted address computation happens in 64 bits
2604 Register key_reg = ToRegister(instr->key()); 2612 __ movsxlq(key_reg, key_reg);
2605 __ movsxlq(key_reg, key_reg); 2613 }
2606 } 2614 }
2615 Operand operand(BuildFastArrayOperand(
2616 instr->external_pointer(),
2617 key,
2618 elements_kind,
2619 0,
2620 instr->additional_index()));
2607 2621
2608 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) { 2622 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) {
2609 XMMRegister result(ToDoubleRegister(instr->result())); 2623 XMMRegister result(ToDoubleRegister(instr->result()));
2610 __ movss(result, operand); 2624 __ movss(result, operand);
2611 __ cvtss2sd(result, result); 2625 __ cvtss2sd(result, result);
2612 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) { 2626 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
2613 __ movsd(ToDoubleRegister(instr->result()), operand); 2627 __ movsd(ToDoubleRegister(instr->result()), operand);
2614 } else { 2628 } else {
2615 Register result(ToRegister(instr->result())); 2629 Register result(ToRegister(instr->result()));
2616 switch (elements_kind) { 2630 switch (elements_kind) {
(...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after
3529 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode) 3543 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode)
3530 ? isolate()->builtins()->StoreIC_Initialize_Strict() 3544 ? isolate()->builtins()->StoreIC_Initialize_Strict()
3531 : isolate()->builtins()->StoreIC_Initialize(); 3545 : isolate()->builtins()->StoreIC_Initialize();
3532 CallCode(ic, RelocInfo::CODE_TARGET, instr); 3546 CallCode(ic, RelocInfo::CODE_TARGET, instr);
3533 } 3547 }
3534 3548
3535 3549
3536 void LCodeGen::DoStoreKeyedSpecializedArrayElement( 3550 void LCodeGen::DoStoreKeyedSpecializedArrayElement(
3537 LStoreKeyedSpecializedArrayElement* instr) { 3551 LStoreKeyedSpecializedArrayElement* instr) {
3538 ElementsKind elements_kind = instr->elements_kind(); 3552 ElementsKind elements_kind = instr->elements_kind();
3539 Operand operand(BuildFastArrayOperand(instr->external_pointer(), 3553 LOperand* key = instr->key();
3540 instr->key(), 3554 if (!key->IsConstantOperand()) {
3541 elements_kind, 3555 Register key_reg = ToRegister(key);
3542 0, 3556 if (instr->hydrogen()->key()->representation().IsTagged()) {
3543 instr->additional_index())); 3557 __ SmiToInteger64(key_reg, key_reg);
3544 3558 } else if (instr->hydrogen()->IsDehoisted()) {
3545 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) { 3559 // Sign extend key because it could be a 32 bit negative value
3546 // Sign extend key because it could be a 32 bit negative value 3560 // and the dehoisted address computation happens in 64 bits
3547 // and the dehoisted address computation happens in 64 bits 3561 __ movsxlq(key_reg, key_reg);
3548 Register key_reg = ToRegister(instr->key()); 3562 }
3549 __ movsxlq(key_reg, key_reg);
3550 } 3563 }
3564 Operand operand(BuildFastArrayOperand(
3565 instr->external_pointer(),
3566 key,
3567 elements_kind,
3568 0,
3569 instr->additional_index()));
3551 3570
3552 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) { 3571 if (elements_kind == EXTERNAL_FLOAT_ELEMENTS) {
3553 XMMRegister value(ToDoubleRegister(instr->value())); 3572 XMMRegister value(ToDoubleRegister(instr->value()));
3554 __ cvtsd2ss(value, value); 3573 __ cvtsd2ss(value, value);
3555 __ movss(operand, value); 3574 __ movss(operand, value);
3556 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) { 3575 } else if (elements_kind == EXTERNAL_DOUBLE_ELEMENTS) {
3557 __ movsd(operand, ToDoubleRegister(instr->value())); 3576 __ movsd(operand, ToDoubleRegister(instr->value()));
3558 } else { 3577 } else {
3559 Register value(ToRegister(instr->value())); 3578 Register value(ToRegister(instr->value()));
3560 switch (elements_kind) { 3579 switch (elements_kind) {
(...skipping 23 matching lines...) Expand all
3584 UNREACHABLE(); 3603 UNREACHABLE();
3585 break; 3604 break;
3586 } 3605 }
3587 } 3606 }
3588 } 3607 }
3589 3608
3590 3609
3591 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) { 3610 void LCodeGen::DoBoundsCheck(LBoundsCheck* instr) {
3592 if (instr->length()->IsRegister()) { 3611 if (instr->length()->IsRegister()) {
3593 Register reg = ToRegister(instr->length()); 3612 Register reg = ToRegister(instr->length());
3594 if (FLAG_debug_code) { 3613 if (FLAG_debug_code &&
3614 !instr->hydrogen()->index()->representation().IsTagged()) {
3595 __ AbortIfNotZeroExtended(reg); 3615 __ AbortIfNotZeroExtended(reg);
3596 } 3616 }
3597 if (instr->index()->IsConstantOperand()) { 3617 if (instr->index()->IsConstantOperand()) {
3598 __ cmpq(reg, 3618 __ cmpq(reg,
3599 Immediate(ToInteger32(LConstantOperand::cast(instr->index())))); 3619 Immediate(ToInteger32(LConstantOperand::cast(instr->index()))));
3600 } else { 3620 } else {
3601 Register reg2 = ToRegister(instr->index()); 3621 Register reg2 = ToRegister(instr->index());
3602 if (FLAG_debug_code) { 3622 if (FLAG_debug_code &&
3623 !instr->hydrogen()->index()->representation().IsTagged()) {
3603 __ AbortIfNotZeroExtended(reg2); 3624 __ AbortIfNotZeroExtended(reg2);
3604 } 3625 }
3605 __ cmpq(reg, reg2); 3626 __ cmpq(reg, reg2);
3606 } 3627 }
3607 } else { 3628 } else {
3608 if (instr->index()->IsConstantOperand()) { 3629 if (instr->index()->IsConstantOperand()) {
3609 __ cmpq(ToOperand(instr->length()), 3630 __ cmpq(ToOperand(instr->length()),
3610 Immediate(ToInteger32(LConstantOperand::cast(instr->index())))); 3631 Immediate(ToInteger32(LConstantOperand::cast(instr->index()))));
3611 } else { 3632 } else {
3612 __ cmpq(ToOperand(instr->length()), ToRegister(instr->index())); 3633 __ cmpq(ToOperand(instr->length()), ToRegister(instr->index()));
3613 } 3634 }
3614 } 3635 }
3615 DeoptimizeIf(below_equal, instr->environment()); 3636 DeoptimizeIf(below_equal, instr->environment());
3616 } 3637 }
3617 3638
3618 3639
3619 void LCodeGen::DoStoreKeyedFastElement(LStoreKeyedFastElement* instr) { 3640 void LCodeGen::DoStoreKeyedFastElement(LStoreKeyedFastElement* instr) {
3620 Register value = ToRegister(instr->value()); 3641 Register value = ToRegister(instr->value());
3621 Register elements = ToRegister(instr->object()); 3642 Register elements = ToRegister(instr->object());
3622 Register key = instr->key()->IsRegister() ? ToRegister(instr->key()) : no_reg; 3643 LOperand* key = instr->key();
3644 if (!key->IsConstantOperand()) {
3645 Register key_reg = ToRegister(key);
3646 if (instr->hydrogen()->key()->representation().IsTagged()) {
3647 __ SmiToInteger64(key_reg, key_reg);
3648 } else if (instr->hydrogen()->IsDehoisted()) {
3649 // Sign extend key because it could be a 32 bit negative value
3650 // and the dehoisted address computation happens in 64 bits
3651 __ movsxlq(key_reg, key_reg);
3652 }
3653 }
3623 3654
3624 Operand operand = 3655 Operand operand =
3625 BuildFastArrayOperand(instr->object(), 3656 BuildFastArrayOperand(instr->object(),
3626 instr->key(), 3657 key,
3627 FAST_ELEMENTS, 3658 FAST_ELEMENTS,
3628 FixedArray::kHeaderSize - kHeapObjectTag, 3659 FixedArray::kHeaderSize - kHeapObjectTag,
3629 instr->additional_index()); 3660 instr->additional_index());
3630 3661
3631 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) {
3632 // Sign extend key because it could be a 32 bit negative value
3633 // and the dehoisted address computation happens in 64 bits
3634 Register key_reg = ToRegister(instr->key());
3635 __ movsxlq(key_reg, key_reg);
3636 }
3637
3638 __ movq(operand, value);
3639
3640 if (instr->hydrogen()->NeedsWriteBarrier()) { 3662 if (instr->hydrogen()->NeedsWriteBarrier()) {
3641 ASSERT(!instr->key()->IsConstantOperand()); 3663 ASSERT(!instr->key()->IsConstantOperand());
3642 HType type = instr->hydrogen()->value()->type(); 3664 HType type = instr->hydrogen()->value()->type();
3643 SmiCheck check_needed = 3665 SmiCheck check_needed =
3644 type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK; 3666 type.IsHeapObject() ? OMIT_SMI_CHECK : INLINE_SMI_CHECK;
3645 // Compute address of modified element and store it into key register. 3667 // Compute address of modified element and store it into key register.
3646 __ lea(key, operand); 3668 Register key_reg(ToRegister(key));
3669 __ lea(key_reg, operand);
3670 __ movq(Operand(key_reg, 0), value);
3647 __ RecordWrite(elements, 3671 __ RecordWrite(elements,
3648 key, 3672 key_reg,
3649 value, 3673 value,
3650 kSaveFPRegs, 3674 kSaveFPRegs,
3651 EMIT_REMEMBERED_SET, 3675 EMIT_REMEMBERED_SET,
3652 check_needed); 3676 check_needed);
3677 } else {
3678 __ movq(operand, value);
3653 } 3679 }
3654 } 3680 }
3655 3681
3656 3682
3657 void LCodeGen::DoStoreKeyedFastDoubleElement( 3683 void LCodeGen::DoStoreKeyedFastDoubleElement(
3658 LStoreKeyedFastDoubleElement* instr) { 3684 LStoreKeyedFastDoubleElement* instr) {
3659 XMMRegister value = ToDoubleRegister(instr->value()); 3685 XMMRegister value = ToDoubleRegister(instr->value());
3686 LOperand* key = instr->key();
3687 if (!key->IsConstantOperand()) {
3688 Register key_reg = ToRegister(key);
3689 if (instr->hydrogen()->key()->representation().IsTagged()) {
3690 __ SmiToInteger64(key_reg, key_reg);
3691 } else if (instr->hydrogen()->IsDehoisted()) {
3692 // Sign extend key because it could be a 32 bit negative value
3693 // and the dehoisted address computation happens in 64 bits
3694 __ movsxlq(key_reg, key_reg);
3695 }
3696 }
3660 3697
3661 if (instr->NeedsCanonicalization()) { 3698 if (instr->NeedsCanonicalization()) {
3662 Label have_value; 3699 Label have_value;
3663 3700
3664 __ ucomisd(value, value); 3701 __ ucomisd(value, value);
3665 __ j(parity_odd, &have_value); // NaN. 3702 __ j(parity_odd, &have_value); // NaN.
3666 3703
3667 __ Set(kScratchRegister, BitCast<uint64_t>( 3704 __ Set(kScratchRegister, BitCast<uint64_t>(
3668 FixedDoubleArray::canonical_not_the_hole_nan_as_double())); 3705 FixedDoubleArray::canonical_not_the_hole_nan_as_double()));
3669 __ movq(value, kScratchRegister); 3706 __ movq(value, kScratchRegister);
3670 3707
3671 __ bind(&have_value); 3708 __ bind(&have_value);
3672 } 3709 }
3673 3710
3674 Operand double_store_operand = BuildFastArrayOperand( 3711 Operand double_store_operand = BuildFastArrayOperand(
3675 instr->elements(), 3712 instr->elements(),
3676 instr->key(), 3713 key,
3677 FAST_DOUBLE_ELEMENTS, 3714 FAST_DOUBLE_ELEMENTS,
3678 FixedDoubleArray::kHeaderSize - kHeapObjectTag, 3715 FixedDoubleArray::kHeaderSize - kHeapObjectTag,
3679 instr->additional_index()); 3716 instr->additional_index());
3680 3717
3681 if (instr->hydrogen()->IsDehoisted() && !instr->key()->IsConstantOperand()) {
3682 // Sign extend key because it could be a 32 bit negative value
3683 // and the dehoisted address computation happens in 64 bits
3684 Register key_reg = ToRegister(instr->key());
3685 __ movsxlq(key_reg, key_reg);
3686 }
3687
3688 __ movsd(double_store_operand, value); 3718 __ movsd(double_store_operand, value);
3689 } 3719 }
3690 3720
3691 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 3721 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
3692 ASSERT(ToRegister(instr->object()).is(rdx)); 3722 ASSERT(ToRegister(instr->object()).is(rdx));
3693 ASSERT(ToRegister(instr->key()).is(rcx)); 3723 ASSERT(ToRegister(instr->key()).is(rcx));
3694 ASSERT(ToRegister(instr->value()).is(rax)); 3724 ASSERT(ToRegister(instr->value()).is(rax));
3695 3725
3696 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode) 3726 Handle<Code> ic = (instr->strict_mode_flag() == kStrictMode)
3697 ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict() 3727 ? isolate()->builtins()->KeyedStoreIC_Initialize_Strict()
(...skipping 1347 matching lines...) Expand 10 before | Expand all | Expand 10 after
5045 FixedArray::kHeaderSize - kPointerSize)); 5075 FixedArray::kHeaderSize - kPointerSize));
5046 __ bind(&done); 5076 __ bind(&done);
5047 } 5077 }
5048 5078
5049 5079
5050 #undef __ 5080 #undef __
5051 5081
5052 } } // namespace v8::internal 5082 } } // namespace v8::internal
5053 5083
5054 #endif // V8_TARGET_ARCH_X64 5084 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698