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

Side by Side Diff: src/codegen.cc

Issue 3421009: Revision 2.4.4.... (Closed) Base URL: http://v8.googlecode.com/svn/trunk/
Patch Set: '' Created 10 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 | Annotate | Revision Log
« no previous file with comments | « src/codegen.h ('k') | src/flag-definitions.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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2010 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
11 // with the distribution. 11 // with the distribution.
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 // declaration the global variables and functions. 337 // declaration the global variables and functions.
338 DeclareGlobals(array); 338 DeclareGlobals(array);
339 } 339 }
340 340
341 341
342 void CodeGenerator::VisitIncrementOperation(IncrementOperation* expr) { 342 void CodeGenerator::VisitIncrementOperation(IncrementOperation* expr) {
343 UNREACHABLE(); 343 UNREACHABLE();
344 } 344 }
345 345
346 346
347 // List of special runtime calls which are generated inline. For some of these 347 // Lookup table for code generators for special runtime calls which are
348 // functions the code will be generated inline, and for others a call to a code 348 // generated inline.
349 // stub will be inlined. 349 #define INLINE_FUNCTION_GENERATOR_ADDRESS(Name, argc, ressize) \
350 &CodeGenerator::Generate##Name,
350 351
351 #define INLINE_RUNTIME_ENTRY(Name, argc, ressize) \ 352 const CodeGenerator::InlineFunctionGenerator
352 {&CodeGenerator::Generate##Name, "_" #Name, argc}, \ 353 CodeGenerator::kInlineFunctionGenerators[] = {
354 INLINE_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_ADDRESS)
355 INLINE_RUNTIME_FUNCTION_LIST(INLINE_FUNCTION_GENERATOR_ADDRESS)
356 };
357 #undef INLINE_FUNCTION_GENERATOR_ADDRESS
353 358
354 CodeGenerator::InlineRuntimeLUT CodeGenerator::kInlineRuntimeLUT[] = {
355 INLINE_RUNTIME_FUNCTION_LIST(INLINE_RUNTIME_ENTRY)
356 };
357 359
358 #undef INLINE_RUNTIME_ENTRY 360 CodeGenerator::InlineFunctionGenerator
359 361 CodeGenerator::FindInlineFunctionGenerator(Runtime::FunctionId id) {
360 CodeGenerator::InlineRuntimeLUT* CodeGenerator::FindInlineRuntimeLUT( 362 return kInlineFunctionGenerators[
361 Handle<String> name) { 363 static_cast<int>(id) - static_cast<int>(Runtime::kFirstInlineFunction)];
362 const int entries_count =
363 sizeof(kInlineRuntimeLUT) / sizeof(InlineRuntimeLUT);
364 for (int i = 0; i < entries_count; i++) {
365 InlineRuntimeLUT* entry = &kInlineRuntimeLUT[i];
366 if (name->IsEqualTo(CStrVector(entry->name))) {
367 return entry;
368 }
369 }
370 return NULL;
371 } 364 }
372 365
373 366
374 bool CodeGenerator::CheckForInlineRuntimeCall(CallRuntime* node) { 367 bool CodeGenerator::CheckForInlineRuntimeCall(CallRuntime* node) {
375 ZoneList<Expression*>* args = node->arguments(); 368 ZoneList<Expression*>* args = node->arguments();
376 Handle<String> name = node->name(); 369 Handle<String> name = node->name();
377 if (name->length() > 0 && name->Get(0) == '_') { 370 Runtime::Function* function = node->function();
378 InlineRuntimeLUT* entry = FindInlineRuntimeLUT(name); 371 if (function != NULL && function->intrinsic_type == Runtime::INLINE) {
379 if (entry != NULL) { 372 InlineFunctionGenerator generator =
380 ((*this).*(entry->method))(args); 373 FindInlineFunctionGenerator(function->function_id);
374 if (generator != NULL) {
375 ((*this).*(generator))(args);
381 return true; 376 return true;
382 } 377 }
383 } 378 }
384 return false; 379 return false;
385 } 380 }
386 381
387 382
388 int CodeGenerator::InlineRuntimeCallArgumentsCount(Handle<String> name) {
389 CodeGenerator::InlineRuntimeLUT* f =
390 CodeGenerator::FindInlineRuntimeLUT(name);
391 if (f != NULL) return f->nargs;
392 return -1;
393 }
394
395
396 // Simple condition analysis. ALWAYS_TRUE and ALWAYS_FALSE represent a 383 // Simple condition analysis. ALWAYS_TRUE and ALWAYS_FALSE represent a
397 // known result for the test expression, with no side effects. 384 // known result for the test expression, with no side effects.
398 CodeGenerator::ConditionAnalysis CodeGenerator::AnalyzeCondition( 385 CodeGenerator::ConditionAnalysis CodeGenerator::AnalyzeCondition(
399 Expression* cond) { 386 Expression* cond) {
400 if (cond == NULL) return ALWAYS_TRUE; 387 if (cond == NULL) return ALWAYS_TRUE;
401 388
402 Literal* lit = cond->AsLiteral(); 389 Literal* lit = cond->AsLiteral();
403 if (lit == NULL) return DONT_KNOW; 390 if (lit == NULL) return DONT_KNOW;
404 391
405 if (lit->IsTrue()) { 392 if (lit->IsTrue()) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 } 492 }
506 } 493 }
507 494
508 495
509 void ApiGetterEntryStub::SetCustomCache(Code* value) { 496 void ApiGetterEntryStub::SetCustomCache(Code* value) {
510 info()->set_load_stub_cache(value); 497 info()->set_load_stub_cache(value);
511 } 498 }
512 499
513 500
514 } } // namespace v8::internal 501 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/codegen.h ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698