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

Side by Side Diff: src/s390/code-stubs-s390.cc

Issue 1799893002: S390: Upstream changes from the past 2 weeks (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « src/s390/builtins-s390.cc ('k') | src/s390/codegen-s390.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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 #if V8_TARGET_ARCH_S390 5 #if V8_TARGET_ARCH_S390
6 6
7 #include "src/code-stubs.h" 7 #include "src/code-stubs.h"
8 #include "src/api-arguments.h" 8 #include "src/api-arguments.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 __ bne(slow); // First was a heap number, second wasn't. Go slow case. 470 __ bne(slow); // First was a heap number, second wasn't. Go slow case.
471 471
472 // Both are heap numbers. Load them up then jump to the code we have 472 // Both are heap numbers. Load them up then jump to the code we have
473 // for that. 473 // for that.
474 __ LoadDouble(d6, FieldMemOperand(rhs, HeapNumber::kValueOffset)); 474 __ LoadDouble(d6, FieldMemOperand(rhs, HeapNumber::kValueOffset));
475 __ LoadDouble(d7, FieldMemOperand(lhs, HeapNumber::kValueOffset)); 475 __ LoadDouble(d7, FieldMemOperand(lhs, HeapNumber::kValueOffset));
476 476
477 __ b(both_loaded_as_doubles); 477 __ b(both_loaded_as_doubles);
478 } 478 }
479 479
480 // Fast negative check for internalized-to-internalized equality. 480 // Fast negative check for internalized-to-internalized equality or receiver
481 // equality. Also handles the undetectable receiver to null/undefined
482 // comparison.
481 static void EmitCheckForInternalizedStringsOrObjects(MacroAssembler* masm, 483 static void EmitCheckForInternalizedStringsOrObjects(MacroAssembler* masm,
482 Register lhs, Register rhs, 484 Register lhs, Register rhs,
483 Label* possible_strings, 485 Label* possible_strings,
484 Label* runtime_call) { 486 Label* runtime_call) {
485 DCHECK((lhs.is(r2) && rhs.is(r3)) || (lhs.is(r3) && rhs.is(r2))); 487 DCHECK((lhs.is(r2) && rhs.is(r3)) || (lhs.is(r3) && rhs.is(r2)));
486 488
487 // r4 is object type of rhs. 489 // r4 is object type of rhs.
488 Label object_test, return_unequal, undetectable; 490 Label object_test, return_equal, return_unequal, undetectable;
489 STATIC_ASSERT(kInternalizedTag == 0 && kStringTag == 0); 491 STATIC_ASSERT(kInternalizedTag == 0 && kStringTag == 0);
490 __ mov(r0, Operand(kIsNotStringMask)); 492 __ mov(r0, Operand(kIsNotStringMask));
491 __ AndP(r0, r4); 493 __ AndP(r0, r4);
492 __ bne(&object_test, Label::kNear); 494 __ bne(&object_test, Label::kNear);
493 __ mov(r0, Operand(kIsNotInternalizedMask)); 495 __ mov(r0, Operand(kIsNotInternalizedMask));
494 __ AndP(r0, r4); 496 __ AndP(r0, r4);
495 __ bne(possible_strings); 497 __ bne(possible_strings);
496 __ CompareObjectType(lhs, r5, r5, FIRST_NONSTRING_TYPE); 498 __ CompareObjectType(lhs, r5, r5, FIRST_NONSTRING_TYPE);
497 __ bge(runtime_call); 499 __ bge(runtime_call);
498 __ mov(r0, Operand(kIsNotInternalizedMask)); 500 __ mov(r0, Operand(kIsNotInternalizedMask));
(...skipping 20 matching lines...) Expand all
519 __ CompareInstanceType(r5, r5, FIRST_JS_RECEIVER_TYPE); 521 __ CompareInstanceType(r5, r5, FIRST_JS_RECEIVER_TYPE);
520 __ blt(runtime_call); 522 __ blt(runtime_call);
521 523
522 __ bind(&return_unequal); 524 __ bind(&return_unequal);
523 // Return non-equal by returning the non-zero object pointer in r2. 525 // Return non-equal by returning the non-zero object pointer in r2.
524 __ Ret(); 526 __ Ret();
525 527
526 __ bind(&undetectable); 528 __ bind(&undetectable);
527 __ AndP(r0, r7, Operand(1 << Map::kIsUndetectable)); 529 __ AndP(r0, r7, Operand(1 << Map::kIsUndetectable));
528 __ beq(&return_unequal); 530 __ beq(&return_unequal);
531
532 // If both sides are JSReceivers, then the result is false according to
533 // the HTML specification, which says that only comparisons with null or
534 // undefined are affected by special casing for document.all.
535 __ CompareInstanceType(r4, r4, ODDBALL_TYPE);
536 __ beq(&return_equal);
537 __ CompareInstanceType(r5, r5, ODDBALL_TYPE);
538 __ bne(&return_unequal);
539
540 __ bind(&return_equal);
529 __ LoadImmP(r2, Operand(EQUAL)); 541 __ LoadImmP(r2, Operand(EQUAL));
530 __ Ret(); 542 __ Ret();
531 } 543 }
532 544
533 static void CompareICStub_CheckInputType(MacroAssembler* masm, Register input, 545 static void CompareICStub_CheckInputType(MacroAssembler* masm, Register input,
534 Register scratch, 546 Register scratch,
535 CompareICState::State expected, 547 CompareICState::State expected,
536 Label* fail) { 548 Label* fail) {
537 Label ok; 549 Label ok;
538 if (expected == CompareICState::SMI) { 550 if (expected == CompareICState::SMI) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 StringHelper::GenerateCompareFlatOneByteStrings(masm, lhs, rhs, r4, r5, r6); 681 StringHelper::GenerateCompareFlatOneByteStrings(masm, lhs, rhs, r4, r5, r6);
670 } 682 }
671 // Never falls through to here. 683 // Never falls through to here.
672 684
673 __ bind(&slow); 685 __ bind(&slow);
674 686
675 if (cc == eq) { 687 if (cc == eq) {
676 { 688 {
677 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 689 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
678 __ Push(lhs, rhs); 690 __ Push(lhs, rhs);
679 __ CallRuntime(strict() ? Runtime::kStrictEquals : Runtime::kEquals); 691 __ CallRuntime(strict() ? Runtime::kStrictEqual : Runtime::kEqual);
680 } 692 }
681 // Turn true into 0 and false into some non-zero value. 693 // Turn true into 0 and false into some non-zero value.
682 STATIC_ASSERT(EQUAL == 0); 694 STATIC_ASSERT(EQUAL == 0);
683 __ LoadRoot(r4, Heap::kTrueValueRootIndex); 695 __ LoadRoot(r3, Heap::kTrueValueRootIndex);
684 __ sub(r3, r3, r4); 696 __ SubP(r2, r2, r3);
685 __ Ret(); 697 __ Ret();
686 } else { 698 } else {
687 __ Push(lhs, rhs); 699 __ Push(lhs, rhs);
688 int ncr; // NaN compare result 700 int ncr; // NaN compare result
689 if (cc == lt || cc == le) { 701 if (cc == lt || cc == le) {
690 ncr = GREATER; 702 ncr = GREATER;
691 } else { 703 } else {
692 DCHECK(cc == gt || cc == ge); // remaining cases 704 DCHECK(cc == gt || cc == ge); // remaining cases
693 ncr = LESS; 705 ncr = LESS;
694 } 706 }
(...skipping 2216 matching lines...) Expand 10 before | Expand all | Expand 10 after
2911 __ bind(&loop); 2923 __ bind(&loop);
2912 __ LoadlB(scratch1, MemOperand(left, index)); 2924 __ LoadlB(scratch1, MemOperand(left, index));
2913 __ LoadlB(r0, MemOperand(right, index)); 2925 __ LoadlB(r0, MemOperand(right, index));
2914 __ CmpP(scratch1, r0); 2926 __ CmpP(scratch1, r0);
2915 __ bne(chars_not_equal); 2927 __ bne(chars_not_equal);
2916 __ AddP(index, Operand(1)); 2928 __ AddP(index, Operand(1));
2917 __ CmpP(index, Operand::Zero()); 2929 __ CmpP(index, Operand::Zero());
2918 __ bne(&loop); 2930 __ bne(&loop);
2919 } 2931 }
2920 2932
2921 void StringCompareStub::Generate(MacroAssembler* masm) {
2922 // ----------- S t a t e -------------
2923 // -- r3 : left
2924 // -- r2 : right
2925 // -- r14 : return address
2926 // -----------------------------------
2927 __ AssertString(r3);
2928 __ AssertString(r2);
2929
2930 Label not_same;
2931 __ CmpP(r2, r3);
2932 __ bne(&not_same);
2933 __ LoadSmiLiteral(r2, Smi::FromInt(EQUAL));
2934 __ IncrementCounter(isolate()->counters()->string_compare_native(), 1, r3,
2935 r4);
2936 __ Ret();
2937
2938 __ bind(&not_same);
2939
2940 // Check that both objects are sequential one-byte strings.
2941 Label runtime;
2942 __ JumpIfNotBothSequentialOneByteStrings(r3, r2, r4, r5, &runtime);
2943
2944 // Compare flat one-byte strings natively.
2945 __ IncrementCounter(isolate()->counters()->string_compare_native(), 1, r4,
2946 r5);
2947 StringHelper::GenerateCompareFlatOneByteStrings(masm, r3, r2, r4, r5, r6);
2948
2949 // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater)
2950 // tagged as a small integer.
2951 __ bind(&runtime);
2952 __ Push(r3, r2);
2953 __ TailCallRuntime(Runtime::kStringCompare);
2954 }
2955
2956 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) { 2933 void BinaryOpICWithAllocationSiteStub::Generate(MacroAssembler* masm) {
2957 // ----------- S t a t e ------------- 2934 // ----------- S t a t e -------------
2958 // -- r3 : left 2935 // -- r3 : left
2959 // -- r2 : right 2936 // -- r2 : right
2960 // r3: second string 2937 // r3: second string
2961 // ----------------------------------- 2938 // -----------------------------------
2962 2939
2963 // Load r4 with the allocation site. We stick an undefined dummy value here 2940 // Load r4 with the allocation site. We stick an undefined dummy value here
2964 // and replace it with the real allocation site later when we instantiate this 2941 // and replace it with the real allocation site later when we instantiate this
2965 // stub in BinaryOpICWithAllocationSiteStub::GetCodeCopyFromTemplate(). 2942 // stub in BinaryOpICWithAllocationSiteStub::GetCodeCopyFromTemplate().
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
3248 if (equality) { 3225 if (equality) {
3249 StringHelper::GenerateFlatOneByteStringEquals(masm, left, right, tmp1, 3226 StringHelper::GenerateFlatOneByteStringEquals(masm, left, right, tmp1,
3250 tmp2); 3227 tmp2);
3251 } else { 3228 } else {
3252 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1, 3229 StringHelper::GenerateCompareFlatOneByteStrings(masm, left, right, tmp1,
3253 tmp2, tmp3); 3230 tmp2, tmp3);
3254 } 3231 }
3255 3232
3256 // Handle more complex cases in runtime. 3233 // Handle more complex cases in runtime.
3257 __ bind(&runtime); 3234 __ bind(&runtime);
3258 __ Push(left, right);
3259 if (equality) { 3235 if (equality) {
3260 __ TailCallRuntime(Runtime::kStringEquals); 3236 {
3237 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
3238 __ Push(left, right);
3239 __ CallRuntime(Runtime::kStringEqual);
3240 }
3241 __ LoadRoot(r3, Heap::kTrueValueRootIndex);
3242 __ SubP(r2, r2, r3);
3243 __ Ret();
3261 } else { 3244 } else {
3245 __ Push(left, right);
3262 __ TailCallRuntime(Runtime::kStringCompare); 3246 __ TailCallRuntime(Runtime::kStringCompare);
3263 } 3247 }
3264 3248
3265 __ bind(&miss); 3249 __ bind(&miss);
3266 GenerateMiss(masm); 3250 GenerateMiss(masm);
3267 } 3251 }
3268 3252
3269 void CompareICStub::GenerateReceivers(MacroAssembler* masm) { 3253 void CompareICStub::GenerateReceivers(MacroAssembler* masm) {
3270 DCHECK_EQ(CompareICState::RECEIVER, state()); 3254 DCHECK_EQ(CompareICState::RECEIVER, state());
3271 Label miss; 3255 Label miss;
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
3775 3759
3776 __ bind(&need_incremental); 3760 __ bind(&need_incremental);
3777 3761
3778 // Fall through when we need to inform the incremental marker. 3762 // Fall through when we need to inform the incremental marker.
3779 } 3763 }
3780 3764
3781 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { 3765 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
3782 CEntryStub ces(isolate(), 1, kSaveFPRegs); 3766 CEntryStub ces(isolate(), 1, kSaveFPRegs);
3783 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET); 3767 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET);
3784 int parameter_count_offset = 3768 int parameter_count_offset =
3785 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset; 3769 StubFailureTrampolineFrameConstants::kArgumentsLengthOffset;
3786 __ LoadP(r3, MemOperand(fp, parameter_count_offset)); 3770 __ LoadP(r3, MemOperand(fp, parameter_count_offset));
3787 if (function_mode() == JS_FUNCTION_STUB_MODE) { 3771 if (function_mode() == JS_FUNCTION_STUB_MODE) {
3788 __ AddP(r3, Operand(1)); 3772 __ AddP(r3, Operand(1));
3789 } 3773 }
3790 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); 3774 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
3791 __ ShiftLeftP(r3, r3, Operand(kPointerSizeLog2)); 3775 __ ShiftLeftP(r3, r3, Operand(kPointerSizeLog2));
3792 __ la(sp, MemOperand(r3, sp)); 3776 __ la(sp, MemOperand(r3, sp));
3793 __ Ret(); 3777 __ Ret();
3794 } 3778 }
3795 3779
(...skipping 971 matching lines...) Expand 10 before | Expand all | Expand 10 after
4767 // we reach the JavaScript frame for the function (similar to what the 4751 // we reach the JavaScript frame for the function (similar to what the
4768 // runtime fallback implementation does). So make r4 point to that 4752 // runtime fallback implementation does). So make r4 point to that
4769 // JavaScript frame. 4753 // JavaScript frame.
4770 { 4754 {
4771 Label loop, loop_entry; 4755 Label loop, loop_entry;
4772 __ LoadRR(r4, fp); 4756 __ LoadRR(r4, fp);
4773 __ b(&loop_entry); 4757 __ b(&loop_entry);
4774 __ bind(&loop); 4758 __ bind(&loop);
4775 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset)); 4759 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset));
4776 __ bind(&loop_entry); 4760 __ bind(&loop_entry);
4777 __ LoadP(ip, MemOperand(r4, StandardFrameConstants::kMarkerOffset)); 4761 __ LoadP(ip, MemOperand(r4, StandardFrameConstants::kFunctionOffset));
4778 __ CmpP(ip, r3); 4762 __ CmpP(ip, r3);
4779 __ bne(&loop); 4763 __ bne(&loop);
4780 } 4764 }
4781 4765
4782 // Check if we have rest parameters (only possible if we have an 4766 // Check if we have rest parameters (only possible if we have an
4783 // arguments adaptor frame below the function frame). 4767 // arguments adaptor frame below the function frame).
4784 Label no_rest_parameters; 4768 Label no_rest_parameters;
4785 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset)); 4769 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset));
4786 __ LoadP(ip, MemOperand(r4, StandardFrameConstants::kContextOffset)); 4770 __ LoadP(ip, MemOperand(r4, CommonFrameConstants::kContextOrFrameTypeOffset));
4787 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 4771 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
4788 __ bne(&no_rest_parameters); 4772 __ bne(&no_rest_parameters);
4789 4773
4790 // Check if the arguments adaptor frame contains more arguments than 4774 // Check if the arguments adaptor frame contains more arguments than
4791 // specified by the function's internal formal parameter count. 4775 // specified by the function's internal formal parameter count.
4792 Label rest_parameters; 4776 Label rest_parameters;
4793 __ LoadP(r2, MemOperand(r4, ArgumentsAdaptorFrameConstants::kLengthOffset)); 4777 __ LoadP(r2, MemOperand(r4, ArgumentsAdaptorFrameConstants::kLengthOffset));
4794 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset)); 4778 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset));
4795 __ LoadW( 4779 __ LoadW(
4796 r3, FieldMemOperand(r3, SharedFunctionInfo::kFormalParameterCountOffset)); 4780 r3, FieldMemOperand(r3, SharedFunctionInfo::kFormalParameterCountOffset));
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
4924 // r3 : function 4908 // r3 : function
4925 // r4 : number of parameters (tagged) 4909 // r4 : number of parameters (tagged)
4926 // r5 : parameters pointer 4910 // r5 : parameters pointer
4927 // Registers used over whole function: 4911 // Registers used over whole function:
4928 // r7 : arguments count (tagged) 4912 // r7 : arguments count (tagged)
4929 // r8 : mapped parameter count (tagged) 4913 // r8 : mapped parameter count (tagged)
4930 4914
4931 // Check if the calling frame is an arguments adaptor frame. 4915 // Check if the calling frame is an arguments adaptor frame.
4932 Label adaptor_frame, try_allocate, runtime; 4916 Label adaptor_frame, try_allocate, runtime;
4933 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 4917 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
4934 __ LoadP(r2, MemOperand(r6, StandardFrameConstants::kContextOffset)); 4918 __ LoadP(r2, MemOperand(r6, CommonFrameConstants::kContextOrFrameTypeOffset));
4935 __ CmpSmiLiteral(r2, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 4919 __ CmpSmiLiteral(r2, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
4936 __ beq(&adaptor_frame); 4920 __ beq(&adaptor_frame);
4937 4921
4938 // No adaptor, parameter count = argument count. 4922 // No adaptor, parameter count = argument count.
4939 __ LoadRR(r7, r4); 4923 __ LoadRR(r7, r4);
4940 __ LoadRR(r8, r4); 4924 __ LoadRR(r8, r4);
4941 __ b(&try_allocate); 4925 __ b(&try_allocate);
4942 4926
4943 // We have an adaptor frame. Patch the parameters pointer. 4927 // We have an adaptor frame. Patch the parameters pointer.
4944 __ bind(&adaptor_frame); 4928 __ bind(&adaptor_frame);
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
5151 // we reach the JavaScript frame for the function (similar to what the 5135 // we reach the JavaScript frame for the function (similar to what the
5152 // runtime fallback implementation does). So make r4 point to that 5136 // runtime fallback implementation does). So make r4 point to that
5153 // JavaScript frame. 5137 // JavaScript frame.
5154 { 5138 {
5155 Label loop, loop_entry; 5139 Label loop, loop_entry;
5156 __ LoadRR(r4, fp); 5140 __ LoadRR(r4, fp);
5157 __ b(&loop_entry); 5141 __ b(&loop_entry);
5158 __ bind(&loop); 5142 __ bind(&loop);
5159 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset)); 5143 __ LoadP(r4, MemOperand(r4, StandardFrameConstants::kCallerFPOffset));
5160 __ bind(&loop_entry); 5144 __ bind(&loop_entry);
5161 __ LoadP(ip, MemOperand(r4, StandardFrameConstants::kMarkerOffset)); 5145 __ LoadP(ip, MemOperand(r4, StandardFrameConstants::kFunctionOffset));
5162 __ CmpP(ip, r3); 5146 __ CmpP(ip, r3);
5163 __ bne(&loop); 5147 __ bne(&loop);
5164 } 5148 }
5165 5149
5166 // Check if we have an arguments adaptor frame below the function frame. 5150 // Check if we have an arguments adaptor frame below the function frame.
5167 Label arguments_adaptor, arguments_done; 5151 Label arguments_adaptor, arguments_done;
5168 __ LoadP(r5, MemOperand(r4, StandardFrameConstants::kCallerFPOffset)); 5152 __ LoadP(r5, MemOperand(r4, StandardFrameConstants::kCallerFPOffset));
5169 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kContextOffset)); 5153 __ LoadP(ip, MemOperand(r5, CommonFrameConstants::kContextOrFrameTypeOffset));
5170 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 5154 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
5171 __ beq(&arguments_adaptor); 5155 __ beq(&arguments_adaptor);
5172 { 5156 {
5173 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset)); 5157 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset));
5174 __ LoadW(r2, FieldMemOperand( 5158 __ LoadW(r2, FieldMemOperand(
5175 r3, SharedFunctionInfo::kFormalParameterCountOffset)); 5159 r3, SharedFunctionInfo::kFormalParameterCountOffset));
5176 #if V8_TARGET_ARCH_S390X 5160 #if V8_TARGET_ARCH_S390X
5177 __ SmiTag(r2); 5161 __ SmiTag(r2);
5178 #endif 5162 #endif
5179 __ SmiToPtrArrayOffset(r8, r2); 5163 __ SmiToPtrArrayOffset(r8, r2);
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
5570 STATIC_ASSERT(FCA::kCalleeIndex == 5); 5554 STATIC_ASSERT(FCA::kCalleeIndex == 5);
5571 STATIC_ASSERT(FCA::kDataIndex == 4); 5555 STATIC_ASSERT(FCA::kDataIndex == 4);
5572 STATIC_ASSERT(FCA::kReturnValueOffset == 3); 5556 STATIC_ASSERT(FCA::kReturnValueOffset == 3);
5573 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2); 5557 STATIC_ASSERT(FCA::kReturnValueDefaultValueIndex == 2);
5574 STATIC_ASSERT(FCA::kIsolateIndex == 1); 5558 STATIC_ASSERT(FCA::kIsolateIndex == 1);
5575 STATIC_ASSERT(FCA::kHolderIndex == 0); 5559 STATIC_ASSERT(FCA::kHolderIndex == 0);
5576 STATIC_ASSERT(FCA::kArgsLength == 7); 5560 STATIC_ASSERT(FCA::kArgsLength == 7);
5577 5561
5578 // context save 5562 // context save
5579 __ push(context); 5563 __ push(context);
5580 if (!is_lazy) { 5564 if (!is_lazy()) {
5581 // load context from callee 5565 // load context from callee
5582 __ LoadP(context, FieldMemOperand(callee, JSFunction::kContextOffset)); 5566 __ LoadP(context, FieldMemOperand(callee, JSFunction::kContextOffset));
5583 } 5567 }
5584 5568
5585 // callee 5569 // callee
5586 __ push(callee); 5570 __ push(callee);
5587 5571
5588 // call data 5572 // call data
5589 __ push(call_data); 5573 __ push(call_data);
5590 5574
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
5726 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5710 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5727 kStackUnwindSpace, NULL, return_value_operand, NULL); 5711 kStackUnwindSpace, NULL, return_value_operand, NULL);
5728 } 5712 }
5729 5713
5730 #undef __ 5714 #undef __
5731 5715
5732 } // namespace internal 5716 } // namespace internal
5733 } // namespace v8 5717 } // namespace v8
5734 5718
5735 #endif // V8_TARGET_ARCH_S390 5719 #endif // V8_TARGET_ARCH_S390
OLDNEW
« no previous file with comments | « src/s390/builtins-s390.cc ('k') | src/s390/codegen-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698