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

Side by Side Diff: src/builtins/x87/builtins-x87.cc

Issue 2263533002: [builtins] Migrate DatePrototype_GetField to TurboFan builtin. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix C call return type Created 4 years, 3 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/builtins/x64/builtins-x64.cc ('k') | src/compiler/code-assembler.h » ('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 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 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/codegen.h" 8 #include "src/codegen.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1347 1347
1348 void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) { 1348 void Builtins::Generate_NotifySoftDeoptimized(MacroAssembler* masm) {
1349 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT); 1349 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::SOFT);
1350 } 1350 }
1351 1351
1352 void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) { 1352 void Builtins::Generate_NotifyLazyDeoptimized(MacroAssembler* masm) {
1353 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY); 1353 Generate_NotifyDeoptimizedHelper(masm, Deoptimizer::LAZY);
1354 } 1354 }
1355 1355
1356 // static 1356 // static
1357 void Builtins::Generate_DatePrototype_GetField(MacroAssembler* masm,
1358 int field_index) {
1359 // ----------- S t a t e -------------
1360 // -- eax : number of arguments
1361 // -- edi : function
1362 // -- esi : context
1363 // -- esp[0] : return address
1364 // -- esp[4] : receiver
1365 // -----------------------------------
1366
1367 // 1. Load receiver into eax and check that it's actually a JSDate object.
1368 Label receiver_not_date;
1369 {
1370 __ mov(eax, Operand(esp, kPointerSize));
1371 __ JumpIfSmi(eax, &receiver_not_date);
1372 __ CmpObjectType(eax, JS_DATE_TYPE, ebx);
1373 __ j(not_equal, &receiver_not_date);
1374 }
1375
1376 // 2. Load the specified date field, falling back to the runtime as necessary.
1377 if (field_index == JSDate::kDateValue) {
1378 __ mov(eax, FieldOperand(eax, JSDate::kValueOffset));
1379 } else {
1380 if (field_index < JSDate::kFirstUncachedField) {
1381 Label stamp_mismatch;
1382 __ mov(edx, Operand::StaticVariable(
1383 ExternalReference::date_cache_stamp(masm->isolate())));
1384 __ cmp(edx, FieldOperand(eax, JSDate::kCacheStampOffset));
1385 __ j(not_equal, &stamp_mismatch, Label::kNear);
1386 __ mov(eax, FieldOperand(
1387 eax, JSDate::kValueOffset + field_index * kPointerSize));
1388 __ ret(1 * kPointerSize);
1389 __ bind(&stamp_mismatch);
1390 }
1391 FrameScope scope(masm, StackFrame::INTERNAL);
1392 __ PrepareCallCFunction(2, ebx);
1393 __ mov(Operand(esp, 0), eax);
1394 __ mov(Operand(esp, 1 * kPointerSize),
1395 Immediate(Smi::FromInt(field_index)));
1396 __ CallCFunction(
1397 ExternalReference::get_date_field_function(masm->isolate()), 2);
1398 }
1399 __ ret(1 * kPointerSize);
1400
1401 // 3. Raise a TypeError if the receiver is not a date.
1402 __ bind(&receiver_not_date);
1403 {
1404 FrameScope scope(masm, StackFrame::MANUAL);
1405 __ Move(ebx, Immediate(0));
1406 __ EnterBuiltinFrame(esi, edi, ebx);
1407 __ CallRuntime(Runtime::kThrowNotDateError);
1408
1409 // It's far from obvious, but this final trailing instruction after the call
1410 // is required for StackFrame::LookupCode to work correctly. To illustrate
1411 // why: if call were the final instruction in the code object, then the pc
1412 // (== return address) would point beyond the code object when the stack is
1413 // traversed. When we then try to look up the code object through
1414 // StackFrame::LookupCode, we actually return the next code object that
1415 // happens to be on the same page in memory.
1416 // TODO(jgruber): A proper fix for this would be nice.
1417 __ nop();
1418 }
1419 }
1420
1421 // static
1422 void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) { 1357 void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
1423 // ----------- S t a t e ------------- 1358 // ----------- S t a t e -------------
1424 // -- eax : argc 1359 // -- eax : argc
1425 // -- esp[0] : return address 1360 // -- esp[0] : return address
1426 // -- esp[4] : argArray 1361 // -- esp[4] : argArray
1427 // -- esp[8] : thisArg 1362 // -- esp[8] : thisArg
1428 // -- esp[12] : receiver 1363 // -- esp[12] : receiver
1429 // ----------------------------------- 1364 // -----------------------------------
1430 1365
1431 // 1. Load receiver into edi, argArray into eax (if present), remove all 1366 // 1. Load receiver into edi, argArray into eax (if present), remove all
(...skipping 1746 matching lines...) Expand 10 before | Expand all | Expand 10 after
3178 3113
3179 void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) { 3114 void Builtins::Generate_InterpreterOnStackReplacement(MacroAssembler* masm) {
3180 Generate_OnStackReplacementHelper(masm, true); 3115 Generate_OnStackReplacementHelper(masm, true);
3181 } 3116 }
3182 3117
3183 #undef __ 3118 #undef __
3184 } // namespace internal 3119 } // namespace internal
3185 } // namespace v8 3120 } // namespace v8
3186 3121
3187 #endif // V8_TARGET_ARCH_X87 3122 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/builtins/x64/builtins-x64.cc ('k') | src/compiler/code-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698