Temporarily move the ia32 fast code generator into the platform-specific directory.

This allows us to make changes to one platform without affecting the others.


Review URL: http://codereview.chromium.org/646019

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3907 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent e1041c9f
...@@ -57,7 +57,6 @@ SOURCES = { ...@@ -57,7 +57,6 @@ SOURCES = {
disassembler.cc disassembler.cc
execution.cc execution.cc
factory.cc factory.cc
fast-codegen.cc
flags.cc flags.cc
frame-element.cc frame-element.cc
frames.cc frames.cc
...@@ -109,6 +108,7 @@ SOURCES = { ...@@ -109,6 +108,7 @@ SOURCES = {
zone.cc zone.cc
"""), """),
'arch:arm': Split(""" 'arch:arm': Split("""
fast-codegen.cc
arm/builtins-arm.cc arm/builtins-arm.cc
arm/codegen-arm.cc arm/codegen-arm.cc
arm/constants-arm.cc arm/constants-arm.cc
...@@ -133,6 +133,7 @@ SOURCES = { ...@@ -133,6 +133,7 @@ SOURCES = {
arm/assembler-thumb2.cc arm/assembler-thumb2.cc
"""), """),
'arch:mips': Split(""" 'arch:mips': Split("""
fast-codegen.cc
mips/assembler-mips.cc mips/assembler-mips.cc
mips/builtins-mips.cc mips/builtins-mips.cc
mips/codegen-mips.cc mips/codegen-mips.cc
...@@ -169,6 +170,7 @@ SOURCES = { ...@@ -169,6 +170,7 @@ SOURCES = {
ia32/virtual-frame-ia32.cc ia32/virtual-frame-ia32.cc
"""), """),
'arch:x64': Split(""" 'arch:x64': Split("""
fast-codegen.cc
x64/assembler-x64.cc x64/assembler-x64.cc
x64/builtins-x64.cc x64/builtins-x64.cc
x64/codegen-x64.cc x64/codegen-x64.cc
......
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
#ifndef V8_FAST_CODEGEN_H_ #ifndef V8_FAST_CODEGEN_H_
#define V8_FAST_CODEGEN_H_ #define V8_FAST_CODEGEN_H_
#if V8_TARGET_ARCH_IA32
#include "ia32/fast-codegen-ia32.h"
#else
#include "v8.h" #include "v8.h"
#include "ast.h" #include "ast.h"
...@@ -152,4 +156,6 @@ class FastCodeGenerator: public AstVisitor { ...@@ -152,4 +156,6 @@ class FastCodeGenerator: public AstVisitor {
} } // namespace v8::internal } } // namespace v8::internal
#endif // V8_TARGET_ARCH_IA32
#endif // V8_FAST_CODEGEN_H_ #endif // V8_FAST_CODEGEN_H_
This diff is collapsed.
// Copyright 2010 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef V8_FAST_CODEGEN_IA32_H_
#define V8_FAST_CODEGEN_IA32_H_
namespace v8 {
namespace internal {
class FastCodeGenSyntaxChecker: public AstVisitor {
public:
explicit FastCodeGenSyntaxChecker()
: info_(NULL), has_supported_syntax_(true) {
}
void Check(CompilationInfo* info);
CompilationInfo* info() { return info_; }
bool has_supported_syntax() { return has_supported_syntax_; }
private:
void VisitDeclarations(ZoneList<Declaration*>* decls);
void VisitStatements(ZoneList<Statement*>* stmts);
// AST node visit functions.
#define DECLARE_VISIT(type) virtual void Visit##type(type* node);
AST_NODE_LIST(DECLARE_VISIT)
#undef DECLARE_VISIT
CompilationInfo* info_;
bool has_supported_syntax_;
DISALLOW_COPY_AND_ASSIGN(FastCodeGenSyntaxChecker);
};
class FastCodeGenerator: public AstVisitor {
public:
explicit FastCodeGenerator(MacroAssembler* masm)
: masm_(masm), info_(NULL), destination_(no_reg), smi_bits_(0) {
}
static Handle<Code> MakeCode(CompilationInfo* info);
void Generate(CompilationInfo* compilation_info);
private:
MacroAssembler* masm() { return masm_; }
CompilationInfo* info() { return info_; }
Label* bailout() { return &bailout_; }
Register destination() { return destination_; }
void set_destination(Register reg) { destination_ = reg; }
FunctionLiteral* function() { return info_->function(); }
Scope* scope() { return info_->scope(); }
// Platform-specific fixed registers, all guaranteed distinct.
Register accumulator0();
Register accumulator1();
Register scratch0();
Register scratch1();
Register receiver_reg();
Register context_reg();
Register other_accumulator(Register reg) {
ASSERT(reg.is(accumulator0()) || reg.is(accumulator1()));
return (reg.is(accumulator0())) ? accumulator1() : accumulator0();
}
// Flags are true if the respective register is statically known to hold a
// smi. We do not track every register, only the accumulator registers.
bool is_smi(Register reg) {
ASSERT(!reg.is(no_reg));
return (smi_bits_ & reg.bit()) != 0;
}
void set_as_smi(Register reg) {
ASSERT(!reg.is(no_reg));
smi_bits_ = smi_bits_ | reg.bit();
}
void clear_as_smi(Register reg) {
ASSERT(!reg.is(no_reg));
smi_bits_ = smi_bits_ & ~reg.bit();
}
// AST node visit functions.
#define DECLARE_VISIT(type) virtual void Visit##type(type* node);
AST_NODE_LIST(DECLARE_VISIT)
#undef DECLARE_VISIT
// Emit code to load the receiver from the stack into receiver_reg.
void EmitLoadReceiver();
// Emit code to load a global variable directly from a global property
// cell into the destination register.
void EmitGlobalVariableLoad(Handle<Object> cell);
// Emit a store to an own property of this. The stored value is expected
// in accumulator0 and the receiver in receiver_reg. The receiver
// register is preserved and the result (the stored value) is left in the
// destination register.
void EmitThisPropertyStore(Handle<String> name);
// Emit a load from an own property of this. The receiver is expected in
// receiver_reg. The receiver register is preserved and the result is
// left in the destination register.
void EmitThisPropertyLoad(Handle<String> name);
// Emit a bitwise or operation. The left operand is in accumulator1 and
// the right is in accumulator0. The result should be left in the
// destination register.
void EmitBitOr();
MacroAssembler* masm_;
CompilationInfo* info_;
Label bailout_;
Register destination_;
uint32_t smi_bits_;
DISALLOW_COPY_AND_ASSIGN(FastCodeGenerator);
};
} } // namespace v8::internal
#endif // V8_FAST_CODEGEN_IA32_H_
...@@ -269,7 +269,6 @@ ...@@ -269,7 +269,6 @@
'../../src/execution.h', '../../src/execution.h',
'../../src/factory.cc', '../../src/factory.cc',
'../../src/factory.h', '../../src/factory.h',
'../../src/fast-codegen.cc',
'../../src/fast-codegen.h', '../../src/fast-codegen.h',
'../../src/flag-definitions.h', '../../src/flag-definitions.h',
'../../src/flags.cc', '../../src/flags.cc',
...@@ -404,6 +403,7 @@ ...@@ -404,6 +403,7 @@
'../../src/arm', '../../src/arm',
], ],
'sources': [ 'sources': [
'../../src/fast-codegen.cc',
'../../src/arm/assembler-arm-inl.h', '../../src/arm/assembler-arm-inl.h',
'../../src/arm/assembler-arm.cc', '../../src/arm/assembler-arm.cc',
'../../src/arm/assembler-arm.h', '../../src/arm/assembler-arm.h',
...@@ -455,6 +455,7 @@ ...@@ -455,6 +455,7 @@
'../../src/ia32/debug-ia32.cc', '../../src/ia32/debug-ia32.cc',
'../../src/ia32/disasm-ia32.cc', '../../src/ia32/disasm-ia32.cc',
'../../src/ia32/fast-codegen-ia32.cc', '../../src/ia32/fast-codegen-ia32.cc',
'../../src/ia32/fast-codegen-ia32.h',
'../../src/ia32/frames-ia32.cc', '../../src/ia32/frames-ia32.cc',
'../../src/ia32/frames-ia32.h', '../../src/ia32/frames-ia32.h',
'../../src/ia32/full-codegen-ia32.cc', '../../src/ia32/full-codegen-ia32.cc',
...@@ -475,6 +476,7 @@ ...@@ -475,6 +476,7 @@
'../../src/x64', '../../src/x64',
], ],
'sources': [ 'sources': [
'../../src/fast-codegen.cc',
'../../src/x64/assembler-x64-inl.h', '../../src/x64/assembler-x64-inl.h',
'../../src/x64/assembler-x64.cc', '../../src/x64/assembler-x64.cc',
'../../src/x64/assembler-x64.h', '../../src/x64/assembler-x64.h',
......
...@@ -401,7 +401,7 @@ ...@@ -401,7 +401,7 @@
> >
</File> </File>
<File <File
RelativePath="..\..\src\fast-codegen.cc" RelativePath="..\..\src\ia32\fast-codegen-ia32.h"
> >
</File> </File>
<File <File
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment