blob: e551abfb11a88d606cdd1829af6f82b12653cc1c [file] [log] [blame]
karlklose@chromium.org44bc7082011-04-11 12:33:05 +00001// Copyright 2011 the V8 project authors. All rights reserved.
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +00002// 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_
ager@chromium.org7c537e22008-10-16 08:43:32 +000029#define V8_CODEGEN_H_
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000030
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000031#include "code-stubs.h"
32#include "runtime.h"
sgjesse@chromium.orgdf7a2842010-03-25 14:34:15 +000033#include "type-info.h"
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000034
ager@chromium.org7c537e22008-10-16 08:43:32 +000035// 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:
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000038// MakeCode
christian.plesner.hansen@gmail.com9d58c2b2009-10-16 11:48:38 +000039// MakeCodePrologue
40// MakeCodeEpilogue
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000041// masm
42// frame
ager@chromium.orgc4c92722009-11-18 14:12:51 +000043// script
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000044// has_valid_frame
45// SetFrame
46// DeleteFrame
47// allocator
48// AddDeferred
49// in_spilled_code
50// set_in_spilled_code
christian.plesner.hansen@gmail.com9d58c2b2009-10-16 11:48:38 +000051// RecordPositions
ager@chromium.org7c537e22008-10-16 08:43:32 +000052//
53// These methods are either used privately by the shared code or implemented as
54// shared code:
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000055// CodeGenerator
56// ~CodeGenerator
sgjesse@chromium.orgb302e562010-02-03 11:26:59 +000057// Generate
ager@chromium.org3811b432009-10-28 14:53:37 +000058// ComputeLazyCompile
kmillikin@chromium.org5d8f0e62010-03-24 08:21:20 +000059// BuildFunctionInfo
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000060// ProcessDeclarations
61// DeclareGlobals
62// CheckForInlineRuntimeCall
christian.plesner.hansen@gmail.com9d58c2b2009-10-16 11:48:38 +000063// AnalyzeCondition
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000064// CodeForFunctionPosition
65// CodeForReturnPosition
66// CodeForStatementPosition
ager@chromium.orgc4c92722009-11-18 14:12:51 +000067// CodeForDoWhileConditionPosition
kasperl@chromium.org8ccb0be2009-04-07 07:21:39 +000068// CodeForSourcePosition
ager@chromium.org7c537e22008-10-16 08:43:32 +000069
kasperl@chromium.orga5551262010-12-07 12:49:48 +000070enum TypeofState { INSIDE_TYPEOF, NOT_INSIDE_TYPEOF };
71
lrn@chromium.orgc4e51ac2010-08-09 09:47:21 +000072#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
christian.plesner.hansen43d26ec2008-07-03 15:10:15 +000084#endif // V8_CODEGEN_H_