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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 static const int kMaxSmiInlinedBits = 16; | 466 static const int kMaxSmiInlinedBits = 16; |
467 bool IsUnsafeSmi(Handle<Object> value); | 467 bool IsUnsafeSmi(Handle<Object> value); |
468 // Load an integer constant x into a register target using | 468 // Load an integer constant x into a register target using |
469 // at most 16 bits of user-controlled data per assembly operation. | 469 // at most 16 bits of user-controlled data per assembly operation. |
470 void LoadUnsafeSmi(Register target, Handle<Object> value); | 470 void LoadUnsafeSmi(Register target, Handle<Object> value); |
471 | 471 |
472 void CallWithArguments(ZoneList<Expression*>* arguments, int position); | 472 void CallWithArguments(ZoneList<Expression*>* arguments, int position); |
473 | 473 |
474 void CheckStack(); | 474 void CheckStack(); |
475 | 475 |
| 476 struct InlineRuntimeLUT { |
| 477 void (CodeGenerator::*method)(ZoneList<Expression*>*); |
| 478 const char* name; |
| 479 }; |
| 480 |
| 481 static InlineRuntimeLUT* FindInlineRuntimeLUT(Handle<String> name); |
476 bool CheckForInlineRuntimeCall(CallRuntime* node); | 482 bool CheckForInlineRuntimeCall(CallRuntime* node); |
| 483 static bool PatchInlineRuntimeEntry(Handle<String> name, |
| 484 const InlineRuntimeLUT& new_entry, |
| 485 InlineRuntimeLUT* old_entry); |
| 486 |
477 Handle<JSFunction> BuildBoilerplate(FunctionLiteral* node); | 487 Handle<JSFunction> BuildBoilerplate(FunctionLiteral* node); |
478 void ProcessDeclarations(ZoneList<Declaration*>* declarations); | 488 void ProcessDeclarations(ZoneList<Declaration*>* declarations); |
479 | 489 |
480 Handle<Code> ComputeCallInitialize(int argc); | 490 Handle<Code> ComputeCallInitialize(int argc); |
481 Handle<Code> ComputeCallInitializeInLoop(int argc); | 491 Handle<Code> ComputeCallInitializeInLoop(int argc); |
482 | 492 |
483 // Declare global variables and functions in the given array of | 493 // Declare global variables and functions in the given array of |
484 // name/value pairs. | 494 // name/value pairs. |
485 void DeclareGlobals(Handle<FixedArray> pairs); | 495 void DeclareGlobals(Handle<FixedArray> pairs); |
486 | 496 |
(...skipping 14 matching lines...) Expand all Loading... |
501 void GenerateSetValueOf(ZoneList<Expression*>* args); | 511 void GenerateSetValueOf(ZoneList<Expression*>* args); |
502 | 512 |
503 // Fast support for charCodeAt(n). | 513 // Fast support for charCodeAt(n). |
504 void GenerateFastCharCodeAt(ZoneList<Expression*>* args); | 514 void GenerateFastCharCodeAt(ZoneList<Expression*>* args); |
505 | 515 |
506 // Fast support for object equality testing. | 516 // Fast support for object equality testing. |
507 void GenerateObjectEquals(ZoneList<Expression*>* args); | 517 void GenerateObjectEquals(ZoneList<Expression*>* args); |
508 | 518 |
509 void GenerateLog(ZoneList<Expression*>* args); | 519 void GenerateLog(ZoneList<Expression*>* args); |
510 | 520 |
| 521 void GenerateGetFramePointer(ZoneList<Expression*>* args); |
511 | 522 |
512 // Methods and constants for fast case switch statement support. | 523 // Methods and constants for fast case switch statement support. |
513 // | 524 // |
514 // Only allow fast-case switch if the range of labels is at most | 525 // Only allow fast-case switch if the range of labels is at most |
515 // this factor times the number of case labels. | 526 // this factor times the number of case labels. |
516 // Value is derived from comparing the size of code generated by the normal | 527 // Value is derived from comparing the size of code generated by the normal |
517 // switch code for Smi-labels to the size of a single pointer. If code | 528 // switch code for Smi-labels to the size of a single pointer. If code |
518 // quality increases this number should be decreased to match. | 529 // quality increases this number should be decreased to match. |
519 static const int kFastSwitchMaxOverheadFactor = 5; | 530 static const int kFastSwitchMaxOverheadFactor = 5; |
520 | 531 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 // function_return_ does not jump to the true function return, but rather | 608 // function_return_ does not jump to the true function return, but rather |
598 // to some unlinking code). | 609 // to some unlinking code). |
599 bool function_return_is_shadowed_; | 610 bool function_return_is_shadowed_; |
600 | 611 |
601 // True when we are in code that expects the virtual frame to be fully | 612 // True when we are in code that expects the virtual frame to be fully |
602 // spilled. Some virtual frame function are disabled in DEBUG builds when | 613 // spilled. Some virtual frame function are disabled in DEBUG builds when |
603 // called from spilled code, because they do not leave the virtual frame | 614 // called from spilled code, because they do not leave the virtual frame |
604 // in a spilled state. | 615 // in a spilled state. |
605 bool in_spilled_code_; | 616 bool in_spilled_code_; |
606 | 617 |
| 618 static InlineRuntimeLUT kInlineRuntimeLUT[]; |
| 619 |
607 friend class VirtualFrame; | 620 friend class VirtualFrame; |
608 friend class JumpTarget; | 621 friend class JumpTarget; |
609 friend class Reference; | 622 friend class Reference; |
610 friend class Result; | 623 friend class Result; |
611 | 624 |
| 625 friend class CodeGeneratorPatcher; // Used in test-log-ia32.cc |
| 626 |
612 DISALLOW_COPY_AND_ASSIGN(CodeGenerator); | 627 DISALLOW_COPY_AND_ASSIGN(CodeGenerator); |
613 }; | 628 }; |
614 | 629 |
615 | 630 |
616 } } // namespace v8::internal | 631 } } // namespace v8::internal |
617 | 632 |
618 #endif // V8_IA32_CODEGEN_IA32_H_ | 633 #endif // V8_IA32_CODEGEN_IA32_H_ |
OLD | NEW |