Commit f7f817d7 authored by bjaideep's avatar bjaideep Committed by Commit bot

PPC: Split kPPC_Add into kPPC_Add[32|64]

R=joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N

Review-Url: https://codereview.chromium.org/2559433003
Cr-Commit-Position: refs/heads/master@{#41536}
parent 1f53653e
...@@ -263,7 +263,8 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { ...@@ -263,7 +263,8 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) {
// Overflow checked for add/sub only. // Overflow checked for add/sub only.
switch (op) { switch (op) {
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
case kPPC_Add: case kPPC_Add32:
case kPPC_Add64:
case kPPC_Sub: case kPPC_Sub:
#endif #endif
case kPPC_AddWithOverflow32: case kPPC_AddWithOverflow32:
...@@ -276,7 +277,8 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { ...@@ -276,7 +277,8 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) {
case kNotOverflow: case kNotOverflow:
switch (op) { switch (op) {
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
case kPPC_Add: case kPPC_Add32:
case kPPC_Add64:
case kPPC_Sub: case kPPC_Sub:
#endif #endif
case kPPC_AddWithOverflow32: case kPPC_AddWithOverflow32:
...@@ -1322,7 +1324,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1322,7 +1324,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
63 - i.InputInt32(2), i.OutputRCBit()); 63 - i.InputInt32(2), i.OutputRCBit());
break; break;
#endif #endif
case kPPC_Add: case kPPC_Add32:
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
if (FlagsModeField::decode(instr->opcode()) != kFlags_none) { if (FlagsModeField::decode(instr->opcode()) != kFlags_none) {
ASSEMBLE_ADD_WITH_OVERFLOW(); ASSEMBLE_ADD_WITH_OVERFLOW();
...@@ -1335,10 +1337,26 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( ...@@ -1335,10 +1337,26 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
__ addi(i.OutputRegister(), i.InputRegister(0), i.InputImmediate(1)); __ addi(i.OutputRegister(), i.InputRegister(0), i.InputImmediate(1));
DCHECK_EQ(LeaveRC, i.OutputRCBit()); DCHECK_EQ(LeaveRC, i.OutputRCBit());
} }
__ extsw(i.OutputRegister(), i.OutputRegister());
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
} }
#endif #endif
break; break;
#if V8_TARGET_ARCH_PPC64
case kPPC_Add64:
if (FlagsModeField::decode(instr->opcode()) != kFlags_none) {
ASSEMBLE_ADD_WITH_OVERFLOW();
} else {
if (HasRegisterInput(instr, 1)) {
__ add(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1),
LeaveOE, i.OutputRCBit());
} else {
__ addi(i.OutputRegister(), i.InputRegister(0), i.InputImmediate(1));
DCHECK_EQ(LeaveRC, i.OutputRCBit());
}
}
break;
#endif
case kPPC_AddWithOverflow32: case kPPC_AddWithOverflow32:
ASSEMBLE_ADD_WITH_OVERFLOW32(); ASSEMBLE_ADD_WITH_OVERFLOW32();
break; break;
......
...@@ -33,7 +33,8 @@ namespace compiler { ...@@ -33,7 +33,8 @@ namespace compiler {
V(PPC_RotLeftAndClear64) \ V(PPC_RotLeftAndClear64) \
V(PPC_RotLeftAndClearLeft64) \ V(PPC_RotLeftAndClearLeft64) \
V(PPC_RotLeftAndClearRight64) \ V(PPC_RotLeftAndClearRight64) \
V(PPC_Add) \ V(PPC_Add32) \
V(PPC_Add64) \
V(PPC_AddWithOverflow32) \ V(PPC_AddWithOverflow32) \
V(PPC_AddPair) \ V(PPC_AddPair) \
V(PPC_AddDouble) \ V(PPC_AddDouble) \
...@@ -42,7 +43,7 @@ namespace compiler { ...@@ -42,7 +43,7 @@ namespace compiler {
V(PPC_SubPair) \ V(PPC_SubPair) \
V(PPC_SubDouble) \ V(PPC_SubDouble) \
V(PPC_Mul32) \ V(PPC_Mul32) \
V(PPC_Mul32WithHigh32) \ V(PPC_Mul32WithHigh32) \
V(PPC_Mul64) \ V(PPC_Mul64) \
V(PPC_MulHigh32) \ V(PPC_MulHigh32) \
V(PPC_MulHighU32) \ V(PPC_MulHighU32) \
......
...@@ -35,7 +35,8 @@ int InstructionScheduler::GetTargetInstructionFlags( ...@@ -35,7 +35,8 @@ int InstructionScheduler::GetTargetInstructionFlags(
case kPPC_RotLeftAndClear64: case kPPC_RotLeftAndClear64:
case kPPC_RotLeftAndClearLeft64: case kPPC_RotLeftAndClearLeft64:
case kPPC_RotLeftAndClearRight64: case kPPC_RotLeftAndClearRight64:
case kPPC_Add: case kPPC_Add32:
case kPPC_Add64:
case kPPC_AddWithOverflow32: case kPPC_AddWithOverflow32:
case kPPC_AddPair: case kPPC_AddPair:
case kPPC_AddDouble: case kPPC_AddDouble:
......
...@@ -841,7 +841,7 @@ void VisitPairBinop(InstructionSelector* selector, InstructionCode opcode, ...@@ -841,7 +841,7 @@ void VisitPairBinop(InstructionSelector* selector, InstructionCode opcode,
} }
void InstructionSelector::VisitInt32PairAdd(Node* node) { void InstructionSelector::VisitInt32PairAdd(Node* node) {
VisitPairBinop(this, kPPC_AddPair, kPPC_Add, node); VisitPairBinop(this, kPPC_AddPair, kPPC_Add32, node);
} }
void InstructionSelector::VisitInt32PairSub(Node* node) { void InstructionSelector::VisitInt32PairSub(Node* node) {
...@@ -1018,13 +1018,13 @@ void InstructionSelector::VisitWord64ReverseBytes(Node* node) { UNREACHABLE(); } ...@@ -1018,13 +1018,13 @@ void InstructionSelector::VisitWord64ReverseBytes(Node* node) { UNREACHABLE(); }
void InstructionSelector::VisitWord32ReverseBytes(Node* node) { UNREACHABLE(); } void InstructionSelector::VisitWord32ReverseBytes(Node* node) { UNREACHABLE(); }
void InstructionSelector::VisitInt32Add(Node* node) { void InstructionSelector::VisitInt32Add(Node* node) {
VisitBinop<Int32BinopMatcher>(this, node, kPPC_Add, kInt16Imm); VisitBinop<Int32BinopMatcher>(this, node, kPPC_Add32, kInt16Imm);
} }
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
void InstructionSelector::VisitInt64Add(Node* node) { void InstructionSelector::VisitInt64Add(Node* node) {
VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm); VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add64, kInt16Imm);
} }
#endif #endif
...@@ -1486,11 +1486,11 @@ void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { ...@@ -1486,11 +1486,11 @@ void InstructionSelector::VisitInt32SubWithOverflow(Node* node) {
void InstructionSelector::VisitInt64AddWithOverflow(Node* node) { void InstructionSelector::VisitInt64AddWithOverflow(Node* node) {
if (Node* ovf = NodeProperties::FindProjection(node, 1)) { if (Node* ovf = NodeProperties::FindProjection(node, 1)) {
FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf);
return VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm, return VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add64, kInt16Imm,
&cont); &cont);
} }
FlagsContinuation cont; FlagsContinuation cont;
VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm, &cont); VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add64, kInt16Imm, &cont);
} }
...@@ -1698,7 +1698,7 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user, ...@@ -1698,7 +1698,7 @@ void VisitWordCompareZero(InstructionSelector* selector, Node* user,
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
case IrOpcode::kInt64AddWithOverflow: case IrOpcode::kInt64AddWithOverflow:
cont->OverwriteAndNegateIfEqual(kOverflow); cont->OverwriteAndNegateIfEqual(kOverflow);
return VisitBinop<Int64BinopMatcher>(selector, node, kPPC_Add, return VisitBinop<Int64BinopMatcher>(selector, node, kPPC_Add64,
kInt16Imm, cont); kInt16Imm, cont);
case IrOpcode::kInt64SubWithOverflow: case IrOpcode::kInt64SubWithOverflow:
cont->OverwriteAndNegateIfEqual(kOverflow); cont->OverwriteAndNegateIfEqual(kOverflow);
......
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