 Chromium Code Reviews
 Chromium Code Reviews Issue 115744:
  This patch much improves our tracking of whether function is...  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
    
  
    Issue 115744:
  This patch much improves our tracking of whether function is...  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/| OLD | NEW | 
|---|---|
| 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 __ ldr(ip, MemOperand(ip, offset, LSL, 1)); | 54 __ ldr(ip, MemOperand(ip, offset, LSL, 1)); | 
| 55 __ cmp(name, Operand(ip)); | 55 __ cmp(name, Operand(ip)); | 
| 56 __ b(ne, &miss); | 56 __ b(ne, &miss); | 
| 57 | 57 | 
| 58 // Get the code entry from the cache. | 58 // Get the code entry from the cache. | 
| 59 __ mov(ip, Operand(value_offset)); | 59 __ mov(ip, Operand(value_offset)); | 
| 60 __ ldr(offset, MemOperand(ip, offset, LSL, 1)); | 60 __ ldr(offset, MemOperand(ip, offset, LSL, 1)); | 
| 61 | 61 | 
| 62 // Check that the flags match what we're looking for. | 62 // Check that the flags match what we're looking for. | 
| 63 __ ldr(offset, FieldMemOperand(offset, Code::kFlagsOffset)); | 63 __ ldr(offset, FieldMemOperand(offset, Code::kFlagsOffset)); | 
| 64 __ and_(offset, offset, Operand(~Code::kFlagsTypeMask)); | 64 __ and_(offset, | 
| 65 offset, | |
| 66 Operand(~(Code::kFlagsTypeMask | Code::kFlagsICInLoopMask))); | |
| 
Kasper Lund
2009/05/25 09:45:42
Why not have a constant mask for the combination o
 | |
| 65 __ cmp(offset, Operand(flags)); | 67 __ cmp(offset, Operand(flags)); | 
| 66 __ b(ne, &miss); | 68 __ b(ne, &miss); | 
| 67 | 69 | 
| 68 // Restore offset and re-load code entry from cache. | 70 // Restore offset and re-load code entry from cache. | 
| 69 __ pop(offset); | 71 __ pop(offset); | 
| 70 __ mov(ip, Operand(value_offset)); | 72 __ mov(ip, Operand(value_offset)); | 
| 71 __ ldr(offset, MemOperand(ip, offset, LSL, 1)); | 73 __ ldr(offset, MemOperand(ip, offset, LSL, 1)); | 
| 72 | 74 | 
| 73 // Jump to the first instruction in the code stub. | 75 // Jump to the first instruction in the code stub. | 
| 74 __ add(offset, offset, Operand(Code::kHeaderSize - kHeapObjectTag)); | 76 __ add(offset, offset, Operand(Code::kHeaderSize - kHeapObjectTag)); | 
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 487 // Do a tail-call of the compiled function. | 489 // Do a tail-call of the compiled function. | 
| 488 __ Jump(r2); | 490 __ Jump(r2); | 
| 489 | 491 | 
| 490 return GetCodeWithFlags(flags, "LazyCompileStub"); | 492 return GetCodeWithFlags(flags, "LazyCompileStub"); | 
| 491 } | 493 } | 
| 492 | 494 | 
| 493 | 495 | 
| 494 Object* CallStubCompiler::CompileCallField(Object* object, | 496 Object* CallStubCompiler::CompileCallField(Object* object, | 
| 495 JSObject* holder, | 497 JSObject* holder, | 
| 496 int index, | 498 int index, | 
| 497 String* name) { | 499 String* name, | 
| 500 Code::Flags flags) { | |
| 
Kevin Millikin (Chromium)
2009/05/25 11:00:42
Since you've generalized the call site to take fla
 | |
| 498 // ----------- S t a t e ------------- | 501 // ----------- S t a t e ------------- | 
| 499 // -- lr: return address | 502 // -- lr: return address | 
| 500 // ----------------------------------- | 503 // ----------------------------------- | 
| 501 Label miss; | 504 Label miss; | 
| 502 | 505 | 
| 503 const int argc = arguments().immediate(); | 506 const int argc = arguments().immediate(); | 
| 504 | 507 | 
| 505 // Get the receiver of the function from the stack into r0. | 508 // Get the receiver of the function from the stack into r0. | 
| 506 __ ldr(r0, MemOperand(sp, argc * kPointerSize)); | 509 __ ldr(r0, MemOperand(sp, argc * kPointerSize)); | 
| 507 // Check that the receiver isn't a smi. | 510 // Check that the receiver isn't a smi. | 
| (...skipping 23 matching lines...) Expand all Loading... | |
| 531 | 534 | 
| 532 // Invoke the function. | 535 // Invoke the function. | 
| 533 __ InvokeFunction(r1, arguments(), JUMP_FUNCTION); | 536 __ InvokeFunction(r1, arguments(), JUMP_FUNCTION); | 
| 534 | 537 | 
| 535 // Handle call cache miss. | 538 // Handle call cache miss. | 
| 536 __ bind(&miss); | 539 __ bind(&miss); | 
| 537 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); | 540 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); | 
| 538 __ Jump(ic, RelocInfo::CODE_TARGET); | 541 __ Jump(ic, RelocInfo::CODE_TARGET); | 
| 539 | 542 | 
| 540 // Return the generated code. | 543 // Return the generated code. | 
| 541 return GetCode(FIELD, name); | 544 return GetCodeWithFlags(flags, name); | 
| 542 } | 545 } | 
| 543 | 546 | 
| 544 | 547 | 
| 545 Object* CallStubCompiler::CompileCallConstant(Object* object, | 548 Object* CallStubCompiler::CompileCallConstant(Object* object, | 
| 546 JSObject* holder, | 549 JSObject* holder, | 
| 547 JSFunction* function, | 550 JSFunction* function, | 
| 548 CheckType check) { | 551 CheckType check, | 
| 552 Code::Flags flags) { | |
| 
Kevin Millikin (Chromium)
2009/05/25 11:00:42
Same as above with type CONSTANT_FUNCTION.
 | |
| 549 // ----------- S t a t e ------------- | 553 // ----------- S t a t e ------------- | 
| 550 // -- lr: return address | 554 // -- lr: return address | 
| 551 // ----------------------------------- | 555 // ----------------------------------- | 
| 552 Label miss; | 556 Label miss; | 
| 553 | 557 | 
| 554 // Get the receiver from the stack | 558 // Get the receiver from the stack | 
| 555 const int argc = arguments().immediate(); | 559 const int argc = arguments().immediate(); | 
| 556 __ ldr(r1, MemOperand(sp, argc * kPointerSize)); | 560 __ ldr(r1, MemOperand(sp, argc * kPointerSize)); | 
| 557 | 561 | 
| 558 // Check that the receiver isn't a smi. | 562 // Check that the receiver isn't a smi. | 
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 656 // Handle call cache miss. | 660 // Handle call cache miss. | 
| 657 __ bind(&miss); | 661 __ bind(&miss); | 
| 658 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); | 662 Handle<Code> ic = ComputeCallMiss(arguments().immediate()); | 
| 659 __ Jump(ic, RelocInfo::CODE_TARGET); | 663 __ Jump(ic, RelocInfo::CODE_TARGET); | 
| 660 | 664 | 
| 661 // Return the generated code. | 665 // Return the generated code. | 
| 662 String* function_name = NULL; | 666 String* function_name = NULL; | 
| 663 if (function->shared()->name()->IsString()) { | 667 if (function->shared()->name()->IsString()) { | 
| 664 function_name = String::cast(function->shared()->name()); | 668 function_name = String::cast(function->shared()->name()); | 
| 665 } | 669 } | 
| 666 return GetCode(CONSTANT_FUNCTION, function_name); | 670 return GetCodeWithFlags(flags, function_name); | 
| 667 } | 671 } | 
| 668 | 672 | 
| 669 | 673 | 
| 670 Object* CallStubCompiler::CompileCallInterceptor(Object* object, | 674 Object* CallStubCompiler::CompileCallInterceptor(Object* object, | 
| 671 JSObject* holder, | 675 JSObject* holder, | 
| 672 String* name) { | 676 String* name) { | 
| 673 // ----------- S t a t e ------------- | 677 // ----------- S t a t e ------------- | 
| 674 // -- lr: return address | 678 // -- lr: return address | 
| 675 // ----------------------------------- | 679 // ----------------------------------- | 
| 676 Label miss; | 680 Label miss; | 
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1115 __ Jump(ic, RelocInfo::CODE_TARGET); | 1119 __ Jump(ic, RelocInfo::CODE_TARGET); | 
| 1116 | 1120 | 
| 1117 // Return the generated code. | 1121 // Return the generated code. | 
| 1118 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); | 1122 return GetCode(transition == NULL ? FIELD : MAP_TRANSITION, name); | 
| 1119 } | 1123 } | 
| 1120 | 1124 | 
| 1121 | 1125 | 
| 1122 #undef __ | 1126 #undef __ | 
| 1123 | 1127 | 
| 1124 } } // namespace v8::internal | 1128 } } // namespace v8::internal | 
| OLD | NEW |