| Index: src/compiler/x64/instruction-selector-x64.cc
|
| diff --git a/src/compiler/x64/instruction-selector-x64.cc b/src/compiler/x64/instruction-selector-x64.cc
|
| index 306c4f24ea22f1b235903fd1d5b1a37620f080c8..4c9f09abb0512b4f32d202e230eee492f08af62d 100644
|
| --- a/src/compiler/x64/instruction-selector-x64.cc
|
| +++ b/src/compiler/x64/instruction-selector-x64.cc
|
| @@ -54,91 +54,6 @@ class X64OperandGenerator FINAL : public OperandGenerator {
|
| };
|
|
|
|
|
| -// Matches nodes of form [x * N] for N in {1,2,4,8}
|
| -class ScaleFactorMatcher : public NodeMatcher {
|
| - public:
|
| - explicit ScaleFactorMatcher(Node* node)
|
| - : NodeMatcher(node), left_(NULL), power_(0) {
|
| - Match();
|
| - }
|
| -
|
| - bool Matches() { return left_ != NULL; }
|
| - int Power() {
|
| - DCHECK(Matches());
|
| - return power_;
|
| - }
|
| - Node* Left() {
|
| - DCHECK(Matches());
|
| - return left_;
|
| - }
|
| -
|
| - private:
|
| - void Match() {
|
| - if (opcode() != IrOpcode::kInt32Mul) return;
|
| - Int32BinopMatcher m(node());
|
| - if (!m.right().HasValue()) return;
|
| - int32_t value = m.right().Value();
|
| - switch (value) {
|
| - case 8:
|
| - power_++; // Fall through.
|
| - case 4:
|
| - power_++; // Fall through.
|
| - case 2:
|
| - power_++; // Fall through.
|
| - case 1:
|
| - break;
|
| - default:
|
| - return;
|
| - }
|
| - left_ = m.left().node();
|
| - }
|
| -
|
| - Node* left_;
|
| - int power_;
|
| -};
|
| -
|
| -
|
| -// Matches nodes of form:
|
| -// [x * N]
|
| -// [x * N + K]
|
| -// [x + K]
|
| -// [x] -- fallback case
|
| -// for N in {1,2,4,8} and K int32_t
|
| -class IndexAndDisplacementMatcher : public NodeMatcher {
|
| - public:
|
| - explicit IndexAndDisplacementMatcher(Node* node)
|
| - : NodeMatcher(node), index_node_(node), displacement_(0), power_(0) {
|
| - Match();
|
| - }
|
| -
|
| - Node* index_node() { return index_node_; }
|
| - int displacement() { return displacement_; }
|
| - int power() { return power_; }
|
| -
|
| - private:
|
| - void Match() {
|
| - if (opcode() == IrOpcode::kInt32Add) {
|
| - // Assume reduction has put constant on the right.
|
| - Int32BinopMatcher m(node());
|
| - if (m.right().HasValue()) {
|
| - displacement_ = m.right().Value();
|
| - index_node_ = m.left().node();
|
| - }
|
| - }
|
| - // Test scale factor.
|
| - ScaleFactorMatcher scale_matcher(index_node_);
|
| - if (scale_matcher.Matches()) {
|
| - index_node_ = scale_matcher.Left();
|
| - power_ = scale_matcher.Power();
|
| - }
|
| - }
|
| -
|
| - Node* index_node_;
|
| - int displacement_;
|
| - int power_;
|
| -};
|
| -
|
| -
|
| class AddressingModeMatcher {
|
| public:
|
| AddressingModeMatcher(X64OperandGenerator* g, Node* base, Node* index)
|
|
|