Chromium Code Reviews| Index: src/arm/macro-assembler-arm.cc |
| =================================================================== |
| --- src/arm/macro-assembler-arm.cc (revision 3824) |
| +++ src/arm/macro-assembler-arm.cc (working copy) |
| @@ -37,7 +37,6 @@ |
| MacroAssembler::MacroAssembler(void* buffer, int size) |
| : Assembler(buffer, size), |
| - unresolved_(0), |
| generating_stub_(false), |
| allow_stub_calls_(true), |
| code_object_(Heap::undefined_value()) { |
| @@ -1233,58 +1232,29 @@ |
| } |
| -Handle<Code> MacroAssembler::ResolveBuiltin(Builtins::JavaScript id, |
| - bool* resolved) { |
| - // Contract with compiled functions is that the function is passed in r1. |
| - int builtins_offset = |
| - JSBuiltinsObject::kJSBuiltinsOffset + (id * kPointerSize); |
| - ldr(r1, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); |
| - ldr(r1, FieldMemOperand(r1, GlobalObject::kBuiltinsOffset)); |
| - ldr(r1, FieldMemOperand(r1, builtins_offset)); |
| - |
| - return Builtins::GetCode(id, resolved); |
| -} |
| - |
| - |
| void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, |
| InvokeJSFlags flags) { |
| - bool resolved; |
| - Handle<Code> code = ResolveBuiltin(id, &resolved); |
| - |
| + GetBuiltinEntry(r2, id); |
| if (flags == CALL_JS) { |
| - Call(code, RelocInfo::CODE_TARGET); |
| + Call(r2); |
| } else { |
| ASSERT(flags == JUMP_JS); |
| - Jump(code, RelocInfo::CODE_TARGET); |
| + Jump(r2); |
| } |
| - |
| - if (!resolved) { |
| - const char* name = Builtins::GetName(id); |
| - int argc = Builtins::GetArgumentsCount(id); |
| - uint32_t flags = |
| - Bootstrapper::FixupFlagsArgumentsCount::encode(argc) | |
| - Bootstrapper::FixupFlagsUseCodeObject::encode(false); |
| - Unresolved entry = { pc_offset() - kInstrSize, flags, name }; |
| - unresolved_.Add(entry); |
| - } |
| } |
| void MacroAssembler::GetBuiltinEntry(Register target, Builtins::JavaScript id) { |
| - bool resolved; |
| - Handle<Code> code = ResolveBuiltin(id, &resolved); |
| - |
| - mov(target, Operand(code)); |
| - if (!resolved) { |
| - const char* name = Builtins::GetName(id); |
| - int argc = Builtins::GetArgumentsCount(id); |
| - uint32_t flags = |
| - Bootstrapper::FixupFlagsArgumentsCount::encode(argc) | |
| - Bootstrapper::FixupFlagsUseCodeObject::encode(true); |
| - Unresolved entry = { pc_offset() - kInstrSize, flags, name }; |
| - unresolved_.Add(entry); |
| - } |
| - |
| + // Load the JavaScript builtin function from the builtins object |
| + // using the target register as a scratch register. |
| + ldr(target, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); |
| + ldr(target, FieldMemOperand(target, GlobalObject::kBuiltinsOffset)); |
| + int builtins_offset = |
| + JSBuiltinsObject::kJSBuiltinsOffset + (id * kPointerSize); |
| + ldr(r1, FieldMemOperand(target, builtins_offset)); |
|
Erik Corry
2010/02/10 17:22:49
Seems like you might as well just use r1 throughou
Mads Ager (chromium)
2010/02/11 07:58:30
Yes, done on all platforms.
|
| + // Load the code entry point from the function into the target register. |
| + ldr(target, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); |
| + ldr(target, FieldMemOperand(target, SharedFunctionInfo::kCodeOffset)); |
|
Erik Corry
2010/02/10 17:22:49
A chain of 5 dependent loads! If this turns out t
|
| add(target, target, Operand(Code::kHeaderSize - kHeapObjectTag)); |
| } |