Home | History | Annotate | Download | only in src
      1 // Copyright 2011 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 #ifndef V8_CODEGEN_H_
     29 #define V8_CODEGEN_H_
     30 
     31 #include "code-stubs.h"
     32 #include "runtime.h"
     33 #include "type-info.h"
     34 
     35 // Include the declaration of the architecture defined class CodeGenerator.
     36 // The contract  to the shared code is that the the CodeGenerator is a subclass
     37 // of Visitor and that the following methods are available publicly:
     38 //   MakeCode
     39 //   MakeCodePrologue
     40 //   MakeCodeEpilogue
     41 //   masm
     42 //   frame
     43 //   script
     44 //   has_valid_frame
     45 //   SetFrame
     46 //   DeleteFrame
     47 //   allocator
     48 //   AddDeferred
     49 //   in_spilled_code
     50 //   set_in_spilled_code
     51 //   RecordPositions
     52 //
     53 // These methods are either used privately by the shared code or implemented as
     54 // shared code:
     55 //   CodeGenerator
     56 //   ~CodeGenerator
     57 //   Generate
     58 //   ComputeLazyCompile
     59 //   BuildFunctionInfo
     60 //   ProcessDeclarations
     61 //   DeclareGlobals
     62 //   CheckForInlineRuntimeCall
     63 //   AnalyzeCondition
     64 //   CodeForFunctionPosition
     65 //   CodeForReturnPosition
     66 //   CodeForStatementPosition
     67 //   CodeForDoWhileConditionPosition
     68 //   CodeForSourcePosition
     69 
     70 enum TypeofState { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF };
     71 
     72 #if V8_TARGET_ARCH_IA32
     73 #include "ia32/codegen-ia32.h"
     74 #elif V8_TARGET_ARCH_X64
     75 #include "x64/codegen-x64.h"
     76 #elif V8_TARGET_ARCH_ARM
     77 #include "arm/codegen-arm.h"
     78 #elif V8_TARGET_ARCH_MIPS
     79 #include "mips/codegen-mips.h"
     80 #else
     81 #error Unsupported target architecture.
     82 #endif
     83 
     84 namespace v8 {
     85 namespace internal {
     86 
     87 // Results of the library implementation of transcendental functions may differ
     88 // from the one we use in our generated code.  Therefore we use the same
     89 // generated code both in runtime and compiled code.
     90 typedef double (*UnaryMathFunction)(double x);
     91 
     92 UnaryMathFunction CreateTranscendentalFunction(TranscendentalCache::Type type);
     93 UnaryMathFunction CreateSqrtFunction();
     94 
     95 
     96 class ElementsTransitionGenerator : public AllStatic {
     97  public:
     98   static void GenerateSmiOnlyToObject(MacroAssembler* masm);
     99   static void GenerateSmiOnlyToDouble(MacroAssembler* masm, Label* fail);
    100   static void GenerateDoubleToObject(MacroAssembler* masm, Label* fail);
    101 
    102  private:
    103   DISALLOW_COPY_AND_ASSIGN(ElementsTransitionGenerator);
    104 };
    105 
    106 } }  // namespace v8::internal
    107 
    108 #endif  // V8_CODEGEN_H_
    109