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

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

Issue 115744: This patch much improves our tracking of whether function is... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 7 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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 // Check that the key in the entry matches the name. 52 // Check that the key in the entry matches the name.
53 __ cmp(name, Operand::StaticArray(offset, times_2, key_offset)); 53 __ cmp(name, Operand::StaticArray(offset, times_2, key_offset));
54 __ j(not_equal, &miss, not_taken); 54 __ j(not_equal, &miss, not_taken);
55 55
56 // Get the code entry from the cache. 56 // Get the code entry from the cache.
57 __ mov(offset, Operand::StaticArray(offset, times_2, value_offset)); 57 __ mov(offset, Operand::StaticArray(offset, times_2, value_offset));
58 58
59 // Check that the flags match what we're looking for. 59 // Check that the flags match what we're looking for.
60 __ mov(offset, FieldOperand(offset, Code::kFlagsOffset)); 60 __ mov(offset, FieldOperand(offset, Code::kFlagsOffset));
61 __ and_(offset, ~Code::kFlagsTypeMask); 61 __ and_(offset, ~(Code::kFlagsTypeMask | Code::kFlagsICInLoopMask));
62 __ cmp(offset, flags); 62 __ cmp(offset, flags);
63 __ j(not_equal, &miss); 63 __ j(not_equal, &miss);
64 64
65 // Restore offset and re-load code entry from cache. 65 // Restore offset and re-load code entry from cache.
66 __ pop(offset); 66 __ pop(offset);
67 __ mov(offset, Operand::StaticArray(offset, times_2, value_offset)); 67 __ mov(offset, Operand::StaticArray(offset, times_2, value_offset));
68 68
69 // Jump to the first instruction in the code stub. 69 // Jump to the first instruction in the code stub.
70 __ add(Operand(offset), Immediate(Code::kHeaderSize - kHeapObjectTag)); 70 __ add(Operand(offset), Immediate(Code::kHeaderSize - kHeapObjectTag));
71 __ jmp(Operand(offset)); 71 __ jmp(Operand(offset));
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 __ lea(ecx, FieldOperand(eax, Code::kHeaderSize)); 463 __ lea(ecx, FieldOperand(eax, Code::kHeaderSize));
464 __ jmp(Operand(ecx)); 464 __ jmp(Operand(ecx));
465 465
466 return GetCodeWithFlags(flags, "LazyCompileStub"); 466 return GetCodeWithFlags(flags, "LazyCompileStub");
467 } 467 }
468 468
469 469
470 Object* CallStubCompiler::CompileCallField(Object* object, 470 Object* CallStubCompiler::CompileCallField(Object* object,
471 JSObject* holder, 471 JSObject* holder,
472 int index, 472 int index,
473 String* name) { 473 String* name,
474 Code::Flags flags) {
Kevin Millikin (Chromium) 2009/05/25 11:00:42 Same comment about ASSERT as in the ARM file.
474 // ----------- S t a t e ------------- 475 // ----------- S t a t e -------------
475 // ----------------------------------- 476 // -----------------------------------
476 Label miss; 477 Label miss;
477 478
478 // Get the receiver from the stack. 479 // Get the receiver from the stack.
479 const int argc = arguments().immediate(); 480 const int argc = arguments().immediate();
480 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); 481 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
481 482
482 // Check that the receiver isn't a smi. 483 // Check that the receiver isn't a smi.
483 __ test(edx, Immediate(kSmiTagMask)); 484 __ test(edx, Immediate(kSmiTagMask));
(...skipping 20 matching lines...) Expand all
504 505
505 // Invoke the function. 506 // Invoke the function.
506 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION); 507 __ InvokeFunction(edi, arguments(), JUMP_FUNCTION);
507 508
508 // Handle call cache miss. 509 // Handle call cache miss.
509 __ bind(&miss); 510 __ bind(&miss);
510 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 511 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
511 __ jmp(ic, RelocInfo::CODE_TARGET); 512 __ jmp(ic, RelocInfo::CODE_TARGET);
512 513
513 // Return the generated code. 514 // Return the generated code.
514 return GetCode(FIELD, name); 515 return GetCodeWithFlags(flags, name);
515 } 516 }
516 517
517 518
518 Object* CallStubCompiler::CompileCallConstant(Object* object, 519 Object* CallStubCompiler::CompileCallConstant(Object* object,
519 JSObject* holder, 520 JSObject* holder,
520 JSFunction* function, 521 JSFunction* function,
521 CheckType check) { 522 CheckType check,
523 Code::Flags flags) {
Kevin Millikin (Chromium) 2009/05/25 11:00:42 And here.
522 // ----------- S t a t e ------------- 524 // ----------- S t a t e -------------
523 // ----------------------------------- 525 // -----------------------------------
524 Label miss; 526 Label miss;
525 527
526 // Get the receiver from the stack. 528 // Get the receiver from the stack.
527 const int argc = arguments().immediate(); 529 const int argc = arguments().immediate();
528 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize)); 530 __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
529 531
530 // Check that the receiver isn't a smi. 532 // Check that the receiver isn't a smi.
531 if (check != NUMBER_CHECK) { 533 if (check != NUMBER_CHECK) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 // Handle call cache miss. 628 // Handle call cache miss.
627 __ bind(&miss); 629 __ bind(&miss);
628 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); 630 Handle<Code> ic = ComputeCallMiss(arguments().immediate());
629 __ jmp(ic, RelocInfo::CODE_TARGET); 631 __ jmp(ic, RelocInfo::CODE_TARGET);
630 632
631 // Return the generated code. 633 // Return the generated code.
632 String* function_name = NULL; 634 String* function_name = NULL;
633 if (function->shared()->name()->IsString()) { 635 if (function->shared()->name()->IsString()) {
634 function_name = String::cast(function->shared()->name()); 636 function_name = String::cast(function->shared()->name());
635 } 637 }
636 return GetCode(CONSTANT_FUNCTION, function_name); 638 return GetCodeWithFlags(flags, function_name);
637 } 639 }
638 640
639 641
640 Object* CallStubCompiler::CompileCallInterceptor(Object* object, 642 Object* CallStubCompiler::CompileCallInterceptor(Object* object,
641 JSObject* holder, 643 JSObject* holder,
642 String* name) { 644 String* name) {
643 // ----------- S t a t e ------------- 645 // ----------- S t a t e -------------
644 // ----------------------------------- 646 // -----------------------------------
645 Label miss; 647 Label miss;
646 648
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); 1172 GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC);
1171 1173
1172 // Return the generated code. 1174 // Return the generated code.
1173 return GetCode(CALLBACKS, name); 1175 return GetCode(CALLBACKS, name);
1174 } 1176 }
1175 1177
1176 1178
1177 #undef __ 1179 #undef __
1178 1180
1179 } } // namespace v8::internal 1181 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698