| Index: src/ppc/lithium-codegen-ppc.h
|
| diff --git a/src/arm/lithium-codegen-arm.h b/src/ppc/lithium-codegen-ppc.h
|
| similarity index 88%
|
| copy from src/arm/lithium-codegen-arm.h
|
| copy to src/ppc/lithium-codegen-ppc.h
|
| index ee5f4e908626aad95b11d7b5e8d9c62e6d298609..6a897aa4f7fae9ea2cfca21e2474303fc2bf3895 100644
|
| --- a/src/arm/lithium-codegen-arm.h
|
| +++ b/src/ppc/lithium-codegen-ppc.h
|
| @@ -1,13 +1,16 @@
|
| // Copyright 2012 the V8 project authors. All rights reserved.
|
| +//
|
| +// Copyright IBM Corp. 2012, 2013. All rights reserved.
|
| +//
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef V8_ARM_LITHIUM_CODEGEN_ARM_H_
|
| -#define V8_ARM_LITHIUM_CODEGEN_ARM_H_
|
| +#ifndef V8_PPC_LITHIUM_CODEGEN_PPC_H_
|
| +#define V8_PPC_LITHIUM_CODEGEN_PPC_H_
|
|
|
| -#include "src/arm/lithium-arm.h"
|
| +#include "src/ppc/lithium-ppc.h"
|
|
|
| -#include "src/arm/lithium-gap-resolver-arm.h"
|
| +#include "src/ppc/lithium-gap-resolver-ppc.h"
|
| #include "src/deoptimizer.h"
|
| #include "src/lithium-codegen.h"
|
| #include "src/safepoint-table.h"
|
| @@ -70,14 +73,14 @@ class LCodeGen: public LCodeGenBase {
|
| // LOperand is loaded into scratch, unless already a register.
|
| Register EmitLoadRegister(LOperand* op, Register scratch);
|
|
|
| + // LConstantOperand must be an Integer32 or Smi
|
| + void EmitLoadIntegerConstant(LConstantOperand* const_op, Register dst);
|
| +
|
| // LOperand must be a double register.
|
| - DwVfpRegister ToDoubleRegister(LOperand* op) const;
|
| + DoubleRegister ToDoubleRegister(LOperand* op) const;
|
|
|
| - // LOperand is loaded into dbl_scratch, unless already a double register.
|
| - DwVfpRegister EmitLoadDoubleRegister(LOperand* op,
|
| - SwVfpRegister flt_scratch,
|
| - DwVfpRegister dbl_scratch);
|
| - int32_t ToRepresentation(LConstantOperand* op, const Representation& r) const;
|
| + intptr_t ToRepresentation(LConstantOperand* op,
|
| + const Representation& r) const;
|
| int32_t ToInteger32(LConstantOperand* op) const;
|
| Smi* ToSmi(LConstantOperand* op) const;
|
| double ToDouble(LConstantOperand* op) const;
|
| @@ -116,7 +119,7 @@ class LCodeGen: public LCodeGenBase {
|
| void DoDeferredStringCharFromCode(LStringCharFromCode* instr);
|
| void DoDeferredAllocate(LAllocate* instr);
|
| void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| - Label* map_check, Label* bool_load);
|
| + Label* map_check);
|
| void DoDeferredInstanceMigration(LCheckMaps* instr, Register object);
|
| void DoDeferredLoadMutableDouble(LLoadFieldByIndex* instr,
|
| Register result,
|
| @@ -130,9 +133,9 @@ class LCodeGen: public LCodeGenBase {
|
| MemOperand PrepareKeyedOperand(Register key,
|
| Register base,
|
| bool key_is_constant,
|
| + bool key_is_tagged,
|
| int constant_key,
|
| - int element_size,
|
| - int shift_size,
|
| + int element_size_shift,
|
| int base_offset);
|
|
|
| // Emit frame translation commands for an environment.
|
| @@ -148,8 +151,8 @@ class LCodeGen: public LCodeGenBase {
|
|
|
| Scope* scope() const { return scope_; }
|
|
|
| - Register scratch0() { return r9; }
|
| - LowDwVfpRegister double_scratch0() { return kScratchDoubleReg; }
|
| + Register scratch0() { return r11; }
|
| + DoubleRegister double_scratch0() { return kScratchDoubleReg; }
|
|
|
| LInstruction* GetNextInstruction();
|
|
|
| @@ -183,20 +186,16 @@ class LCodeGen: public LCodeGenBase {
|
| RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS
|
| };
|
|
|
| - int CallCodeSize(Handle<Code> code, RelocInfo::Mode mode);
|
| -
|
| void CallCode(
|
| Handle<Code> code,
|
| RelocInfo::Mode mode,
|
| - LInstruction* instr,
|
| - TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
|
| + LInstruction* instr);
|
|
|
| void CallCodeGeneric(
|
| Handle<Code> code,
|
| RelocInfo::Mode mode,
|
| LInstruction* instr,
|
| - SafepointMode safepoint_mode,
|
| - TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
|
| + SafepointMode safepoint_mode);
|
|
|
| void CallRuntime(const Runtime::Function* function,
|
| int num_arguments,
|
| @@ -216,18 +215,18 @@ class LCodeGen: public LCodeGenBase {
|
| LInstruction* instr,
|
| LOperand* context);
|
|
|
| - enum R1State {
|
| - R1_UNINITIALIZED,
|
| - R1_CONTAINS_TARGET
|
| + enum R4State {
|
| + R4_UNINITIALIZED,
|
| + R4_CONTAINS_TARGET
|
| };
|
|
|
| // Generate a direct call to a known function. Expects the function
|
| - // to be in r1.
|
| + // to be in r4.
|
| void CallKnownFunction(Handle<JSFunction> function,
|
| int formal_parameter_count,
|
| int arity,
|
| LInstruction* instr,
|
| - R1State r1_state);
|
| + R4State r4_state);
|
|
|
| void RecordSafepointWithLazyDeopt(LInstruction* instr,
|
| SafepointMode safepoint_mode);
|
| @@ -236,8 +235,10 @@ class LCodeGen: public LCodeGenBase {
|
| Safepoint::DeoptMode mode);
|
| void DeoptimizeIf(Condition condition,
|
| LEnvironment* environment,
|
| - Deoptimizer::BailoutType bailout_type);
|
| - void DeoptimizeIf(Condition condition, LEnvironment* environment);
|
| + Deoptimizer::BailoutType bailout_type,
|
| + CRegister cr = cr7);
|
| + void DeoptimizeIf(Condition condition, LEnvironment* environment,
|
| + CRegister cr = cr7);
|
|
|
| void AddToTranslation(LEnvironment* environment,
|
| Translation* translation,
|
| @@ -252,13 +253,16 @@ class LCodeGen: public LCodeGenBase {
|
| void PopulateDeoptimizationLiteralsWithInlinedFunctions();
|
|
|
| Register ToRegister(int index) const;
|
| - DwVfpRegister ToDoubleRegister(int index) const;
|
| + DoubleRegister ToDoubleRegister(int index) const;
|
|
|
| MemOperand BuildSeqStringOperand(Register string,
|
| LOperand* index,
|
| String::Encoding encoding);
|
|
|
| - void EmitIntegerMathAbs(LMathAbs* instr);
|
| + void EmitMathAbs(LMathAbs* instr);
|
| +#if V8_TARGET_ARCH_PPC64
|
| + void EmitInteger32MathAbs(LMathAbs* instr);
|
| +#endif
|
|
|
| // Support for recording safepoint and position information.
|
| void RecordSafepoint(LPointerMap* pointers,
|
| @@ -273,16 +277,17 @@ class LCodeGen: public LCodeGenBase {
|
|
|
| void RecordAndWritePosition(int position) V8_OVERRIDE;
|
|
|
| - static Condition TokenToCondition(Token::Value op, bool is_unsigned);
|
| + static Condition TokenToCondition(Token::Value op);
|
| void EmitGoto(int block);
|
|
|
| // EmitBranch expects to be the last instruction of a block.
|
| template<class InstrType>
|
| - void EmitBranch(InstrType instr, Condition condition);
|
| + void EmitBranch(InstrType instr, Condition condition, CRegister cr = cr7);
|
| template<class InstrType>
|
| - void EmitFalseBranch(InstrType instr, Condition condition);
|
| + void EmitFalseBranch(InstrType instr, Condition condition,
|
| + CRegister cr = cr7);
|
| void EmitNumberUntagD(Register input,
|
| - DwVfpRegister result,
|
| + DoubleRegister result,
|
| bool allow_undefined_as_nan,
|
| bool deoptimize_on_minus_zero,
|
| LEnvironment* env,
|
| @@ -358,12 +363,12 @@ class LCodeGen: public LCodeGenBase {
|
| DCHECK(codegen_->info()->is_calling());
|
| DCHECK(codegen_->expected_safepoint_kind_ == Safepoint::kSimple);
|
| codegen_->expected_safepoint_kind_ = Safepoint::kWithRegisters;
|
| - codegen_->masm_->PushSafepointRegisters();
|
| + codegen_->masm_->PushSafepointRegisters();
|
| }
|
|
|
| ~PushSafepointRegistersScope() {
|
| DCHECK(codegen_->expected_safepoint_kind_ == Safepoint::kWithRegisters);
|
| - codegen_->masm_->PopSafepointRegisters();
|
| + codegen_->masm_->PopSafepointRegisters();
|
| codegen_->expected_safepoint_kind_ = Safepoint::kSimple;
|
| }
|
|
|
| @@ -410,4 +415,4 @@ class LDeferredCode : public ZoneObject {
|
|
|
| } } // namespace v8::internal
|
|
|
| -#endif // V8_ARM_LITHIUM_CODEGEN_ARM_H_
|
| +#endif // V8_PPC_LITHIUM_CODEGEN_PPC_H_
|
|
|