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

Side by Side Diff: src/ia32/stub-cache-ia32.cc

Issue 7600025: Create a common subclass for arrays (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: review feedback Created 9 years, 4 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
« no previous file with comments | « src/ia32/lithium-ia32.cc ('k') | src/mips/stub-cache-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 3382 matching lines...) Expand 10 before | Expand all | Expand 10 after
3393 // ----------------------------------- 3393 // -----------------------------------
3394 Label miss_force_generic, failed_allocation, slow; 3394 Label miss_force_generic, failed_allocation, slow;
3395 3395
3396 // This stub is meant to be tail-jumped to, the receiver must already 3396 // This stub is meant to be tail-jumped to, the receiver must already
3397 // have been verified by the caller to not be a smi. 3397 // have been verified by the caller to not be a smi.
3398 3398
3399 // Check that the key is a smi. 3399 // Check that the key is a smi.
3400 __ JumpIfNotSmi(eax, &miss_force_generic); 3400 __ JumpIfNotSmi(eax, &miss_force_generic);
3401 3401
3402 // Check that the index is in range. 3402 // Check that the index is in range.
3403 __ mov(ecx, eax);
3404 __ SmiUntag(ecx); // Untag the index.
3405 __ mov(ebx, FieldOperand(edx, JSObject::kElementsOffset)); 3403 __ mov(ebx, FieldOperand(edx, JSObject::kElementsOffset));
3406 __ cmp(ecx, FieldOperand(ebx, ExternalArray::kLengthOffset)); 3404 __ cmp(eax, FieldOperand(ebx, ExternalArray::kLengthOffset));
3407 // Unsigned comparison catches both negative and too-large values. 3405 // Unsigned comparison catches both negative and too-large values.
3408 __ j(above_equal, &miss_force_generic); 3406 __ j(above_equal, &miss_force_generic);
3409 __ mov(ebx, FieldOperand(ebx, ExternalArray::kExternalPointerOffset)); 3407 __ mov(ebx, FieldOperand(ebx, ExternalArray::kExternalPointerOffset));
3410 // ebx: base pointer of external storage 3408 // ebx: base pointer of external storage
3411 switch (elements_kind) { 3409 switch (elements_kind) {
3412 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3410 case JSObject::EXTERNAL_BYTE_ELEMENTS:
3413 __ movsx_b(eax, Operand(ebx, ecx, times_1, 0)); 3411 __ SmiUntag(eax); // Untag the index.
3412 __ movsx_b(eax, Operand(ebx, eax, times_1, 0));
3414 break; 3413 break;
3415 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3414 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3416 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3415 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
3417 __ movzx_b(eax, Operand(ebx, ecx, times_1, 0)); 3416 __ SmiUntag(eax); // Untag the index.
3417 __ movzx_b(eax, Operand(ebx, eax, times_1, 0));
3418 break; 3418 break;
3419 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3419 case JSObject::EXTERNAL_SHORT_ELEMENTS:
3420 __ movsx_w(eax, Operand(ebx, ecx, times_2, 0)); 3420 __ movsx_w(eax, Operand(ebx, eax, times_1, 0));
3421 break; 3421 break;
3422 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3422 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3423 __ movzx_w(eax, Operand(ebx, ecx, times_2, 0)); 3423 __ movzx_w(eax, Operand(ebx, eax, times_1, 0));
3424 break; 3424 break;
3425 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3425 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
3426 case JSObject::EXTERNAL_INT_ELEMENTS: 3426 case JSObject::EXTERNAL_INT_ELEMENTS:
3427 __ mov(ecx, Operand(ebx, ecx, times_4, 0)); 3427 __ mov(ecx, Operand(ebx, eax, times_2, 0));
3428 break; 3428 break;
3429 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3429 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
3430 __ fld_s(Operand(ebx, ecx, times_4, 0)); 3430 __ fld_s(Operand(ebx, eax, times_2, 0));
3431 break; 3431 break;
3432 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3432 case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
3433 __ fld_d(Operand(ebx, ecx, times_8, 0)); 3433 __ fld_d(Operand(ebx, eax, times_4, 0));
3434 break; 3434 break;
3435 default: 3435 default:
3436 UNREACHABLE(); 3436 UNREACHABLE();
3437 break; 3437 break;
3438 } 3438 }
3439 3439
3440 // For integer array types: 3440 // For integer array types:
3441 // ecx: value 3441 // ecx: value
3442 // For floating-point array type: 3442 // For floating-point array type:
3443 // FP(0): value 3443 // FP(0): value
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
3549 Label miss_force_generic, slow, check_heap_number; 3549 Label miss_force_generic, slow, check_heap_number;
3550 3550
3551 // This stub is meant to be tail-jumped to, the receiver must already 3551 // This stub is meant to be tail-jumped to, the receiver must already
3552 // have been verified by the caller to not be a smi. 3552 // have been verified by the caller to not be a smi.
3553 3553
3554 // Check that the key is a smi. 3554 // Check that the key is a smi.
3555 __ JumpIfNotSmi(ecx, &miss_force_generic); 3555 __ JumpIfNotSmi(ecx, &miss_force_generic);
3556 3556
3557 // Check that the index is in range. 3557 // Check that the index is in range.
3558 __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset)); 3558 __ mov(edi, FieldOperand(edx, JSObject::kElementsOffset));
3559 __ mov(ebx, ecx); 3559 __ cmp(ecx, FieldOperand(edi, ExternalArray::kLengthOffset));
3560 __ SmiUntag(ebx);
3561 __ cmp(ebx, FieldOperand(edi, ExternalArray::kLengthOffset));
3562 // Unsigned comparison catches both negative and too-large values. 3560 // Unsigned comparison catches both negative and too-large values.
3563 __ j(above_equal, &slow); 3561 __ j(above_equal, &slow);
3564 3562
3565 // Handle both smis and HeapNumbers in the fast path. Go to the 3563 // Handle both smis and HeapNumbers in the fast path. Go to the
3566 // runtime for all other kinds of values. 3564 // runtime for all other kinds of values.
3567 // eax: value 3565 // eax: value
3568 // edx: receiver 3566 // edx: receiver
3569 // ecx: key 3567 // ecx: key
3570 // edi: elements array 3568 // edi: elements array
3571 // ebx: untagged index
3572 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3569 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) {
3573 __ JumpIfNotSmi(eax, &slow); 3570 __ JumpIfNotSmi(eax, &slow);
3574 } else { 3571 } else {
3575 __ JumpIfNotSmi(eax, &check_heap_number); 3572 __ JumpIfNotSmi(eax, &check_heap_number);
3576 } 3573 }
3577 3574
3578 // smi case 3575 // smi case
3579 __ mov(ecx, eax); // Preserve the value in eax. Key is no longer needed. 3576 __ mov(ebx, eax); // Preserve the value in eax as the return value.
3580 __ SmiUntag(ecx); 3577 __ SmiUntag(ebx);
3581 __ mov(edi, FieldOperand(edi, ExternalArray::kExternalPointerOffset)); 3578 __ mov(edi, FieldOperand(edi, ExternalArray::kExternalPointerOffset));
3582 // ecx: base pointer of external storage 3579 // edi: base pointer of external storage
3583 switch (elements_kind) { 3580 switch (elements_kind) {
3584 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3581 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
3585 { // Clamp the value to [0..255]. 3582 __ ClampUint8(ebx);
3586 Label done; 3583 __ SmiUntag(ecx);
3587 __ test(ecx, Immediate(0xFFFFFF00)); 3584 __ mov_b(Operand(edi, ecx, times_1, 0), ebx);
3588 __ j(zero, &done, Label::kNear);
3589 __ setcc(negative, ecx); // 1 if negative, 0 if positive.
3590 __ dec_b(ecx); // 0 if negative, 255 if positive.
3591 __ bind(&done);
3592 }
3593 __ mov_b(Operand(edi, ebx, times_1, 0), ecx);
3594 break; 3585 break;
3595 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3586 case JSObject::EXTERNAL_BYTE_ELEMENTS:
3596 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3587 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3597 __ mov_b(Operand(edi, ebx, times_1, 0), ecx); 3588 __ SmiUntag(ecx);
3589 __ mov_b(Operand(edi, ecx, times_1, 0), ebx);
3598 break; 3590 break;
3599 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3591 case JSObject::EXTERNAL_SHORT_ELEMENTS:
3600 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3592 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3601 __ mov_w(Operand(edi, ebx, times_2, 0), ecx); 3593 __ mov_w(Operand(edi, ecx, times_1, 0), ebx);
3602 break; 3594 break;
3603 case JSObject::EXTERNAL_INT_ELEMENTS: 3595 case JSObject::EXTERNAL_INT_ELEMENTS:
3604 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3596 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
3605 __ mov(Operand(edi, ebx, times_4, 0), ecx); 3597 __ mov(Operand(edi, ecx, times_2, 0), ebx);
3606 break; 3598 break;
3607 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3599 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
3608 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3600 case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
3609 // Need to perform int-to-float conversion. 3601 // Need to perform int-to-float conversion.
3610 __ push(ecx); 3602 __ push(ebx);
3611 __ fild_s(Operand(esp, 0)); 3603 __ fild_s(Operand(esp, 0));
3612 __ pop(ecx); 3604 __ pop(ebx);
3613 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 3605 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) {
3614 __ fstp_s(Operand(edi, ebx, times_4, 0)); 3606 __ fstp_s(Operand(edi, ecx, times_2, 0));
3615 } else { // elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS. 3607 } else { // elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS.
3616 __ fstp_d(Operand(edi, ebx, times_8, 0)); 3608 __ fstp_d(Operand(edi, ecx, times_4, 0));
3617 } 3609 }
3618 break; 3610 break;
3619 default: 3611 default:
3620 UNREACHABLE(); 3612 UNREACHABLE();
3621 break; 3613 break;
3622 } 3614 }
3623 __ ret(0); // Return the original value. 3615 __ ret(0); // Return the original value.
3624 3616
3625 // TODO(danno): handle heap number -> pixel array conversion 3617 // TODO(danno): handle heap number -> pixel array conversion
3626 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3618 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) {
3627 __ bind(&check_heap_number); 3619 __ bind(&check_heap_number);
3628 // eax: value 3620 // eax: value
3629 // edx: receiver 3621 // edx: receiver
3630 // ecx: key 3622 // ecx: key
3631 // edi: elements array 3623 // edi: elements array
3632 // ebx: untagged index
3633 __ cmp(FieldOperand(eax, HeapObject::kMapOffset), 3624 __ cmp(FieldOperand(eax, HeapObject::kMapOffset),
3634 Immediate(masm->isolate()->factory()->heap_number_map())); 3625 Immediate(masm->isolate()->factory()->heap_number_map()));
3635 __ j(not_equal, &slow); 3626 __ j(not_equal, &slow);
3636 3627
3637 // The WebGL specification leaves the behavior of storing NaN and 3628 // The WebGL specification leaves the behavior of storing NaN and
3638 // +/-Infinity into integer arrays basically undefined. For more 3629 // +/-Infinity into integer arrays basically undefined. For more
3639 // reproducible behavior, convert these to zero. 3630 // reproducible behavior, convert these to zero.
3640 __ mov(edi, FieldOperand(edi, ExternalArray::kExternalPointerOffset)); 3631 __ mov(edi, FieldOperand(edi, ExternalArray::kExternalPointerOffset));
3641 // ebx: untagged index
3642 // edi: base pointer of external storage 3632 // edi: base pointer of external storage
3643 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 3633 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) {
3644 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset)); 3634 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
3645 __ fstp_s(Operand(edi, ebx, times_4, 0)); 3635 __ fstp_s(Operand(edi, ecx, times_2, 0));
3646 __ ret(0); 3636 __ ret(0);
3647 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 3637 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) {
3648 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset)); 3638 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
3649 __ fstp_d(Operand(edi, ebx, times_8, 0)); 3639 __ fstp_d(Operand(edi, ecx, times_4, 0));
3650 __ ret(0); 3640 __ ret(0);
3651 } else { 3641 } else {
3652 // Perform float-to-int conversion with truncation (round-to-zero) 3642 // Perform float-to-int conversion with truncation (round-to-zero)
3653 // behavior. 3643 // behavior.
3654 3644
3655 // For the moment we make the slow call to the runtime on 3645 // For the moment we make the slow call to the runtime on
3656 // processors that don't support SSE2. The code in IntegerConvert 3646 // processors that don't support SSE2. The code in IntegerConvert
3657 // (code-stubs-ia32.cc) is roughly what is needed here though the 3647 // (code-stubs-ia32.cc) is roughly what is needed here though the
3658 // conversion failure case does not need to be handled. 3648 // conversion failure case does not need to be handled.
3659 if (CpuFeatures::IsSupported(SSE2)) { 3649 if (CpuFeatures::IsSupported(SSE2)) {
3660 if (elements_kind != JSObject::EXTERNAL_INT_ELEMENTS && 3650 if (elements_kind != JSObject::EXTERNAL_INT_ELEMENTS &&
3661 elements_kind != JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS) { 3651 elements_kind != JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS) {
3662 ASSERT(CpuFeatures::IsSupported(SSE2)); 3652 ASSERT(CpuFeatures::IsSupported(SSE2));
3663 CpuFeatures::Scope scope(SSE2); 3653 CpuFeatures::Scope scope(SSE2);
3664 __ cvttsd2si(ecx, FieldOperand(eax, HeapNumber::kValueOffset)); 3654 __ cvttsd2si(ebx, FieldOperand(eax, HeapNumber::kValueOffset));
3665 // ecx: untagged integer value 3655 // ecx: untagged integer value
3666 switch (elements_kind) { 3656 switch (elements_kind) {
3667 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3657 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
3668 { // Clamp the value to [0..255]. 3658 __ ClampUint8(ebx);
3669 Label done; 3659 // Fall through.
3670 __ test(ecx, Immediate(0xFFFFFF00));
3671 __ j(zero, &done, Label::kNear);
3672 __ setcc(negative, ecx); // 1 if negative, 0 if positive.
3673 __ dec_b(ecx); // 0 if negative, 255 if positive.
3674 __ bind(&done);
3675 }
3676 __ mov_b(Operand(edi, ebx, times_1, 0), ecx);
3677 break;
3678 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3660 case JSObject::EXTERNAL_BYTE_ELEMENTS:
3679 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3661 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3680 __ mov_b(Operand(edi, ebx, times_1, 0), ecx); 3662 __ SmiUntag(ecx);
3663 __ mov_b(Operand(edi, ecx, times_1, 0), ebx);
3681 break; 3664 break;
3682 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3665 case JSObject::EXTERNAL_SHORT_ELEMENTS:
3683 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3666 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3684 __ mov_w(Operand(edi, ebx, times_2, 0), ecx); 3667 __ mov_w(Operand(edi, ecx, times_1, 0), ebx);
3685 break; 3668 break;
3686 default: 3669 default:
3687 UNREACHABLE(); 3670 UNREACHABLE();
3688 break; 3671 break;
3689 } 3672 }
3690 } else { 3673 } else {
3691 if (CpuFeatures::IsSupported(SSE3)) { 3674 if (CpuFeatures::IsSupported(SSE3)) {
3692 CpuFeatures::Scope scope(SSE3); 3675 CpuFeatures::Scope scope(SSE3);
3693 // fisttp stores values as signed integers. To represent the 3676 // fisttp stores values as signed integers. To represent the
3694 // entire range of int and unsigned int arrays, store as a 3677 // entire range of int and unsigned int arrays, store as a
3695 // 64-bit int and discard the high 32 bits. 3678 // 64-bit int and discard the high 32 bits.
3696 // If the value is NaN or +/-infinity, the result is 0x80000000, 3679 // If the value is NaN or +/-infinity, the result is 0x80000000,
3697 // which is automatically zero when taken mod 2^n, n < 32. 3680 // which is automatically zero when taken mod 2^n, n < 32.
3698 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset)); 3681 __ fld_d(FieldOperand(eax, HeapNumber::kValueOffset));
3699 __ sub(Operand(esp), Immediate(2 * kPointerSize)); 3682 __ sub(Operand(esp), Immediate(2 * kPointerSize));
3700 __ fisttp_d(Operand(esp, 0)); 3683 __ fisttp_d(Operand(esp, 0));
3701 __ pop(ecx); 3684 __ pop(ebx);
3702 __ add(Operand(esp), Immediate(kPointerSize)); 3685 __ add(Operand(esp), Immediate(kPointerSize));
3703 } else { 3686 } else {
3704 ASSERT(CpuFeatures::IsSupported(SSE2)); 3687 ASSERT(CpuFeatures::IsSupported(SSE2));
3705 CpuFeatures::Scope scope(SSE2); 3688 CpuFeatures::Scope scope(SSE2);
3706 // We can easily implement the correct rounding behavior for the 3689 // We can easily implement the correct rounding behavior for the
3707 // range [0, 2^31-1]. For the time being, to keep this code simple, 3690 // range [0, 2^31-1]. For the time being, to keep this code simple,
3708 // make the slow runtime call for values outside this range. 3691 // make the slow runtime call for values outside this range.
3709 // Note: we could do better for signed int arrays. 3692 // Note: we could do better for signed int arrays.
3710 __ movd(xmm0, FieldOperand(eax, HeapNumber::kValueOffset)); 3693 __ movd(xmm0, FieldOperand(eax, HeapNumber::kValueOffset));
3711 // We will need the key if we have to make the slow runtime call. 3694 // We will need the key if we have to make the slow runtime call.
3712 __ push(ecx); 3695 __ push(ebx);
3713 __ LoadPowerOf2(xmm1, ecx, 31); 3696 __ LoadPowerOf2(xmm1, ebx, 31);
3714 __ pop(ecx); 3697 __ pop(ebx);
3715 __ ucomisd(xmm1, xmm0); 3698 __ ucomisd(xmm1, xmm0);
3716 __ j(above_equal, &slow); 3699 __ j(above_equal, &slow);
3717 __ cvttsd2si(ecx, Operand(xmm0)); 3700 __ cvttsd2si(ebx, Operand(xmm0));
3718 } 3701 }
3719 // ecx: untagged integer value 3702 // ebx: untagged integer value
3720 __ mov(Operand(edi, ebx, times_4, 0), ecx); 3703 __ mov(Operand(edi, ecx, times_2, 0), ebx);
3721 } 3704 }
3722 __ ret(0); // Return original value. 3705 __ ret(0); // Return original value.
3723 } 3706 }
3724 } 3707 }
3725 } 3708 }
3726 3709
3727 // Slow case: call runtime. 3710 // Slow case: call runtime.
3728 __ bind(&slow); 3711 __ bind(&slow);
3729 Counters* counters = masm->isolate()->counters(); 3712 Counters* counters = masm->isolate()->counters();
3730 __ IncrementCounter(counters->keyed_store_external_array_slow(), 1); 3713 __ IncrementCounter(counters->keyed_store_external_array_slow(), 1);
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
3996 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); 3979 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric();
3997 __ jmp(ic_force_generic, RelocInfo::CODE_TARGET); 3980 __ jmp(ic_force_generic, RelocInfo::CODE_TARGET);
3998 } 3981 }
3999 3982
4000 3983
4001 #undef __ 3984 #undef __
4002 3985
4003 } } // namespace v8::internal 3986 } } // namespace v8::internal
4004 3987
4005 #endif // V8_TARGET_ARCH_IA32 3988 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/lithium-ia32.cc ('k') | src/mips/stub-cache-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698