OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 1237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1248 name_reg, interceptor_holder); | 1248 name_reg, interceptor_holder); |
1249 __ push(scratch2); // restore old return address | 1249 __ push(scratch2); // restore old return address |
1250 | 1250 |
1251 ExternalReference ref = ExternalReference( | 1251 ExternalReference ref = ExternalReference( |
1252 IC_Utility(IC::kLoadPropertyWithInterceptorForLoad)); | 1252 IC_Utility(IC::kLoadPropertyWithInterceptorForLoad)); |
1253 __ TailCallExternalReference(ref, 5, 1); | 1253 __ TailCallExternalReference(ref, 5, 1); |
1254 } | 1254 } |
1255 } | 1255 } |
1256 | 1256 |
1257 | 1257 |
1258 // TODO(1241006): Avoid having lazy compile stubs specialized by the | |
1259 // number of arguments. It is not needed anymore. | |
1260 Object* StubCompiler::CompileLazyCompile(Code::Flags flags) { | |
1261 // Enter an internal frame. | |
1262 __ EnterInternalFrame(); | |
1263 | |
1264 // Push a copy of the function onto the stack. | |
1265 __ push(edi); | |
1266 | |
1267 __ push(edi); // function is also the parameter to the runtime call | |
1268 __ CallRuntime(Runtime::kLazyCompile, 1); | |
1269 __ pop(edi); | |
1270 | |
1271 // Tear down temporary frame. | |
1272 __ LeaveInternalFrame(); | |
1273 | |
1274 // Do a tail-call of the compiled function. | |
1275 __ lea(ecx, FieldOperand(eax, Code::kHeaderSize)); | |
1276 __ jmp(Operand(ecx)); | |
1277 | |
1278 return GetCodeWithFlags(flags, "LazyCompileStub"); | |
1279 } | |
1280 | |
1281 | |
1282 void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) { | 1258 void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) { |
1283 if (kind_ == Code::KEYED_CALL_IC) { | 1259 if (kind_ == Code::KEYED_CALL_IC) { |
1284 __ cmp(Operand(ecx), Immediate(Handle<String>(name))); | 1260 __ cmp(Operand(ecx), Immediate(Handle<String>(name))); |
1285 __ j(not_equal, miss, not_taken); | 1261 __ j(not_equal, miss, not_taken); |
1286 } | 1262 } |
1287 } | 1263 } |
1288 | 1264 |
1289 | 1265 |
1290 Object* CallStubCompiler::GenerateMissBranch() { | 1266 Object* CallStubCompiler::GenerateMissBranch() { |
1291 Object* obj = StubCache::ComputeCallMiss(arguments().immediate(), kind_); | 1267 Object* obj = StubCache::ComputeCallMiss(arguments().immediate(), kind_); |
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2747 // Return the generated code. | 2723 // Return the generated code. |
2748 return GetCode(); | 2724 return GetCode(); |
2749 } | 2725 } |
2750 | 2726 |
2751 | 2727 |
2752 #undef __ | 2728 #undef __ |
2753 | 2729 |
2754 } } // namespace v8::internal | 2730 } } // namespace v8::internal |
2755 | 2731 |
2756 #endif // V8_TARGET_ARCH_IA32 | 2732 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |