/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef SHARE_VM_OPTO_VECTORNODE_HPP
#define SHARE_VM_OPTO_VECTORNODE_HPP
#include "opto/matcher.hpp"
#include "opto/memnode.hpp"
#include "opto/opcodes.hpp"
//------------------------------VectorNode-------------------------------------
// Vector Operation
public:
}
}
virtual int Opcode() const;
virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); }
static bool is_invariant_vector(Node* n);
// [Start, end) half-open range defining which operands are vectors
};
//===========================Vector=ALU=Operations=============================
//------------------------------AddVBNode--------------------------------------
// Vector add byte
public:
virtual int Opcode() const;
};
//------------------------------AddVSNode--------------------------------------
public:
virtual int Opcode() const;
};
//------------------------------AddVINode--------------------------------------
// Vector add int
public:
virtual int Opcode() const;
};
//------------------------------AddVLNode--------------------------------------
// Vector add long
public:
virtual int Opcode() const;
};
//------------------------------AddVFNode--------------------------------------
// Vector add float
public:
virtual int Opcode() const;
};
//------------------------------AddVDNode--------------------------------------
// Vector add double
public:
virtual int Opcode() const;
};
//------------------------------SubVBNode--------------------------------------
// Vector subtract byte
public:
virtual int Opcode() const;
};
//------------------------------SubVSNode--------------------------------------
// Vector subtract short
public:
virtual int Opcode() const;
};
//------------------------------SubVINode--------------------------------------
// Vector subtract int
public:
virtual int Opcode() const;
};
//------------------------------SubVLNode--------------------------------------
// Vector subtract long
public:
virtual int Opcode() const;
};
//------------------------------SubVFNode--------------------------------------
// Vector subtract float
public:
virtual int Opcode() const;
};
//------------------------------SubVDNode--------------------------------------
// Vector subtract double
public:
virtual int Opcode() const;
};
//------------------------------MulVSNode--------------------------------------
// Vector multiply short
public:
virtual int Opcode() const;
};
//------------------------------MulVINode--------------------------------------
// Vector multiply int
public:
virtual int Opcode() const;
};
//------------------------------MulVFNode--------------------------------------
// Vector multiply float
public:
virtual int Opcode() const;
};
//------------------------------MulVDNode--------------------------------------
// Vector multiply double
public:
virtual int Opcode() const;
};
//------------------------------DivVFNode--------------------------------------
// Vector divide float
public:
virtual int Opcode() const;
};
//------------------------------DivVDNode--------------------------------------
// Vector Divide double
public:
virtual int Opcode() const;
};
//------------------------------LShiftVBNode-----------------------------------
// Vector left shift bytes
public:
virtual int Opcode() const;
};
//------------------------------LShiftVSNode-----------------------------------
// Vector left shift shorts
public:
virtual int Opcode() const;
};
//------------------------------LShiftVINode-----------------------------------
// Vector left shift ints
public:
virtual int Opcode() const;
};
//------------------------------LShiftVLNode-----------------------------------
// Vector left shift longs
public:
virtual int Opcode() const;
};
//------------------------------RShiftVBNode-----------------------------------
// Vector right arithmetic (signed) shift bytes
public:
virtual int Opcode() const;
};
//------------------------------RShiftVSNode-----------------------------------
// Vector right arithmetic (signed) shift shorts
public:
virtual int Opcode() const;
};
//------------------------------RShiftVINode-----------------------------------
// Vector right arithmetic (signed) shift ints
public:
virtual int Opcode() const;
};
//------------------------------RShiftVLNode-----------------------------------
// Vector right arithmetic (signed) shift longs
public:
virtual int Opcode() const;
};
//------------------------------URShiftVBNode----------------------------------
// Vector right logical (unsigned) shift bytes
public:
virtual int Opcode() const;
};
//------------------------------URShiftVSNode----------------------------------
// Vector right logical (unsigned) shift shorts
public:
virtual int Opcode() const;
};
//------------------------------URShiftVINode----------------------------------
// Vector right logical (unsigned) shift ints
public:
virtual int Opcode() const;
};
//------------------------------URShiftVLNode----------------------------------
// Vector right logical (unsigned) shift longs
public:
virtual int Opcode() const;
};
//------------------------------LShiftCntVNode---------------------------------
// Vector left shift count
public:
virtual int Opcode() const;
virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); }
};
//------------------------------RShiftCntVNode---------------------------------
// Vector right shift count
public:
virtual int Opcode() const;
virtual uint ideal_reg() const { return Matcher::vector_shift_count_ideal_reg(vect_type()->length_in_bytes()); }
};
//------------------------------AndVNode---------------------------------------
// Vector and integer
public:
virtual int Opcode() const;
};
//------------------------------OrVNode---------------------------------------
// Vector or integer
public:
virtual int Opcode() const;
};
//------------------------------XorVNode---------------------------------------
// Vector xor integer
public:
virtual int Opcode() const;
};
//================================= M E M O R Y ===============================
//------------------------------LoadVectorNode---------------------------------
// Load Vector from memory
public:
}
virtual int Opcode() const;
};
//------------------------------StoreVectorNode--------------------------------
// Store Vector to memory
public:
}
virtual int Opcode() const;
};
//=========================Promote_Scalar_to_Vector============================
//------------------------------ReplicateBNode---------------------------------
// Replicate byte scalar to be vector
public:
virtual int Opcode() const;
};
//------------------------------ReplicateSNode---------------------------------
// Replicate short scalar to be vector
public:
virtual int Opcode() const;
};
//------------------------------ReplicateINode---------------------------------
// Replicate int scalar to be vector
public:
virtual int Opcode() const;
};
//------------------------------ReplicateLNode---------------------------------
// Replicate long scalar to be vector
public:
virtual int Opcode() const;
};
//------------------------------ReplicateFNode---------------------------------
// Replicate float scalar to be vector
public:
virtual int Opcode() const;
};
//------------------------------ReplicateDNode---------------------------------
// Replicate double scalar to be vector
public:
virtual int Opcode() const;
};
//========================Pack_Scalars_into_a_Vector===========================
//------------------------------PackNode---------------------------------------
// Pack parent class (not for code generation).
public:
virtual int Opcode() const;
add_req(n);
}
// Create a binary tree form for Packs. [lo, hi) (half-open) range
};
//------------------------------PackBNode--------------------------------------
// Pack byte scalars into vector
public:
virtual int Opcode() const;
};
//------------------------------PackSNode--------------------------------------
// Pack short scalars into a vector
public:
virtual int Opcode() const;
};
//------------------------------PackINode--------------------------------------
// Pack integer scalars into a vector
public:
virtual int Opcode() const;
};
//------------------------------PackLNode--------------------------------------
// Pack long scalars into a vector
public:
virtual int Opcode() const;
};
//------------------------------Pack2LNode-------------------------------------
// Pack 2 long scalars into a vector
public:
virtual int Opcode() const;
};
//------------------------------PackFNode--------------------------------------
// Pack float scalars into vector
public:
virtual int Opcode() const;
};
//------------------------------PackDNode--------------------------------------
// Pack double scalars into a vector
public:
virtual int Opcode() const;
};
//------------------------------Pack2DNode-------------------------------------
// Pack 2 double scalars into a vector
public:
virtual int Opcode() const;
};
//========================Extract_Scalar_from_Vector===========================
//------------------------------ExtractNode------------------------------------
// Extract a scalar from a vector at position "pos"
public:
}
virtual int Opcode() const;
};
//------------------------------ExtractBNode-----------------------------------
// Extract a byte from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractUBNode----------------------------------
// Extract a boolean from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractCNode-----------------------------------
// Extract a char from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractSNode-----------------------------------
// Extract a short from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractINode-----------------------------------
// Extract an int from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractLNode-----------------------------------
// Extract a long from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractFNode-----------------------------------
// Extract a float from a vector at position "pos"
public:
virtual int Opcode() const;
};
//------------------------------ExtractDNode-----------------------------------
// Extract a double from a vector at position "pos"
public:
virtual int Opcode() const;
};
#endif // SHARE_VM_OPTO_VECTORNODE_HPP