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