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_ |