--- a/hotspot/src/share/vm/opto/vectornode.hpp Mon Oct 01 14:50:10 2012 -0700
+++ b/hotspot/src/share/vm/opto/vectornode.hpp Tue Oct 02 12:25:13 2012 -0700
@@ -29,7 +29,7 @@
#include "opto/node.hpp"
#include "opto/opcodes.hpp"
-//------------------------------VectorNode--------------------------------------
+//------------------------------VectorNode-------------------------------------
// Vector Operation
class VectorNode : public TypeNode {
public:
@@ -53,7 +53,7 @@
virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); }
static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t);
-
+ static VectorNode* shift_count(Compile* C, Node* shift, Node* cnt, uint vlen, BasicType bt);
static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt);
static int opcode(int opc, BasicType bt);
@@ -64,9 +64,9 @@
static void vector_operands(Node* n, uint* start, uint* end);
};
-//===========================Vector=ALU=Operations====================================
+//===========================Vector=ALU=Operations=============================
-//------------------------------AddVBNode---------------------------------------
+//------------------------------AddVBNode--------------------------------------
// Vector add byte
class AddVBNode : public VectorNode {
public:
@@ -74,7 +74,7 @@
virtual int Opcode() const;
};
-//------------------------------AddVSNode---------------------------------------
+//------------------------------AddVSNode--------------------------------------
// Vector add char/short
class AddVSNode : public VectorNode {
public:
@@ -82,7 +82,7 @@
virtual int Opcode() const;
};
-//------------------------------AddVINode---------------------------------------
+//------------------------------AddVINode--------------------------------------
// Vector add int
class AddVINode : public VectorNode {
public:
@@ -90,7 +90,7 @@
virtual int Opcode() const;
};
-//------------------------------AddVLNode---------------------------------------
+//------------------------------AddVLNode--------------------------------------
// Vector add long
class AddVLNode : public VectorNode {
public:
@@ -98,7 +98,7 @@
virtual int Opcode() const;
};
-//------------------------------AddVFNode---------------------------------------
+//------------------------------AddVFNode--------------------------------------
// Vector add float
class AddVFNode : public VectorNode {
public:
@@ -106,7 +106,7 @@
virtual int Opcode() const;
};
-//------------------------------AddVDNode---------------------------------------
+//------------------------------AddVDNode--------------------------------------
// Vector add double
class AddVDNode : public VectorNode {
public:
@@ -114,7 +114,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVBNode---------------------------------------
+//------------------------------SubVBNode--------------------------------------
// Vector subtract byte
class SubVBNode : public VectorNode {
public:
@@ -122,7 +122,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVSNode---------------------------------------
+//------------------------------SubVSNode--------------------------------------
// Vector subtract short
class SubVSNode : public VectorNode {
public:
@@ -130,7 +130,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVINode---------------------------------------
+//------------------------------SubVINode--------------------------------------
// Vector subtract int
class SubVINode : public VectorNode {
public:
@@ -138,7 +138,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVLNode---------------------------------------
+//------------------------------SubVLNode--------------------------------------
// Vector subtract long
class SubVLNode : public VectorNode {
public:
@@ -146,7 +146,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVFNode---------------------------------------
+//------------------------------SubVFNode--------------------------------------
// Vector subtract float
class SubVFNode : public VectorNode {
public:
@@ -154,7 +154,7 @@
virtual int Opcode() const;
};
-//------------------------------SubVDNode---------------------------------------
+//------------------------------SubVDNode--------------------------------------
// Vector subtract double
class SubVDNode : public VectorNode {
public:
@@ -162,7 +162,7 @@
virtual int Opcode() const;
};
-//------------------------------MulVSNode---------------------------------------
+//------------------------------MulVSNode--------------------------------------
// Vector multiply short
class MulVSNode : public VectorNode {
public:
@@ -170,7 +170,7 @@
virtual int Opcode() const;
};
-//------------------------------MulVINode---------------------------------------
+//------------------------------MulVINode--------------------------------------
// Vector multiply int
class MulVINode : public VectorNode {
public:
@@ -178,7 +178,7 @@
virtual int Opcode() const;
};
-//------------------------------MulVFNode---------------------------------------
+//------------------------------MulVFNode--------------------------------------
// Vector multiply float
class MulVFNode : public VectorNode {
public:
@@ -186,7 +186,7 @@
virtual int Opcode() const;
};
-//------------------------------MulVDNode---------------------------------------
+//------------------------------MulVDNode--------------------------------------
// Vector multiply double
class MulVDNode : public VectorNode {
public:
@@ -194,7 +194,7 @@
virtual int Opcode() const;
};
-//------------------------------DivVFNode---------------------------------------
+//------------------------------DivVFNode--------------------------------------
// Vector divide float
class DivVFNode : public VectorNode {
public:
@@ -202,7 +202,7 @@
virtual int Opcode() const;
};
-//------------------------------DivVDNode---------------------------------------
+//------------------------------DivVDNode--------------------------------------
// Vector Divide double
class DivVDNode : public VectorNode {
public:
@@ -210,7 +210,7 @@
virtual int Opcode() const;
};
-//------------------------------LShiftVBNode---------------------------------------
+//------------------------------LShiftVBNode-----------------------------------
// Vector left shift bytes
class LShiftVBNode : public VectorNode {
public:
@@ -218,7 +218,7 @@
virtual int Opcode() const;
};
-//------------------------------LShiftVSNode---------------------------------------
+//------------------------------LShiftVSNode-----------------------------------
// Vector left shift shorts
class LShiftVSNode : public VectorNode {
public:
@@ -226,7 +226,7 @@
virtual int Opcode() const;
};
-//------------------------------LShiftVINode---------------------------------------
+//------------------------------LShiftVINode-----------------------------------
// Vector left shift ints
class LShiftVINode : public VectorNode {
public:
@@ -234,7 +234,7 @@
virtual int Opcode() const;
};
-//------------------------------LShiftVLNode---------------------------------------
+//------------------------------LShiftVLNode-----------------------------------
// Vector left shift longs
class LShiftVLNode : public VectorNode {
public:
@@ -242,7 +242,7 @@
virtual int Opcode() const;
};
-//------------------------------RShiftVBNode---------------------------------------
+//------------------------------RShiftVBNode-----------------------------------
// Vector right arithmetic (signed) shift bytes
class RShiftVBNode : public VectorNode {
public:
@@ -250,7 +250,7 @@
virtual int Opcode() const;
};
-//------------------------------RShiftVSNode---------------------------------------
+//------------------------------RShiftVSNode-----------------------------------
// Vector right arithmetic (signed) shift shorts
class RShiftVSNode : public VectorNode {
public:
@@ -258,7 +258,7 @@
virtual int Opcode() const;
};
-//------------------------------RShiftVINode---------------------------------------
+//------------------------------RShiftVINode-----------------------------------
// Vector right arithmetic (signed) shift ints
class RShiftVINode : public VectorNode {
public:
@@ -266,7 +266,7 @@
virtual int Opcode() const;
};
-//------------------------------RShiftVLNode---------------------------------------
+//------------------------------RShiftVLNode-----------------------------------
// Vector right arithmetic (signed) shift longs
class RShiftVLNode : public VectorNode {
public:
@@ -274,7 +274,7 @@
virtual int Opcode() const;
};
-//------------------------------URShiftVBNode---------------------------------------
+//------------------------------URShiftVBNode----------------------------------
// Vector right logical (unsigned) shift bytes
class URShiftVBNode : public VectorNode {
public:
@@ -282,7 +282,7 @@
virtual int Opcode() const;
};
-//------------------------------URShiftVSNode---------------------------------------
+//------------------------------URShiftVSNode----------------------------------
// Vector right logical (unsigned) shift shorts
class URShiftVSNode : public VectorNode {
public:
@@ -290,7 +290,7 @@
virtual int Opcode() const;
};
-//------------------------------URShiftVINode---------------------------------------
+//------------------------------URShiftVINode----------------------------------
// Vector right logical (unsigned) shift ints
class URShiftVINode : public VectorNode {
public:
@@ -298,7 +298,7 @@
virtual int Opcode() const;
};
-//------------------------------URShiftVLNode---------------------------------------
+//------------------------------URShiftVLNode----------------------------------
// Vector right logical (unsigned) shift longs
class URShiftVLNode : public VectorNode {
public:
@@ -306,6 +306,24 @@
virtual int Opcode() const;
};
+//------------------------------LShiftCntVNode---------------------------------
+// Vector left shift count
+class LShiftCntVNode : public VectorNode {
+ public:
+ LShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {}
+ 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
+class RShiftCntVNode : public VectorNode {
+ public:
+ RShiftCntVNode(Node* cnt, const TypeVect* vt) : VectorNode(cnt,vt) {}
+ 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
@@ -452,7 +470,7 @@
static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt);
};
-//------------------------------PackBNode---------------------------------------
+//------------------------------PackBNode--------------------------------------
// Pack byte scalars into vector
class PackBNode : public PackNode {
public:
@@ -460,7 +478,7 @@
virtual int Opcode() const;
};
-//------------------------------PackSNode---------------------------------------
+//------------------------------PackSNode--------------------------------------
// Pack short scalars into a vector
class PackSNode : public PackNode {
public:
@@ -469,7 +487,7 @@
virtual int Opcode() const;
};
-//------------------------------PackINode---------------------------------------
+//------------------------------PackINode--------------------------------------
// Pack integer scalars into a vector
class PackINode : public PackNode {
public:
@@ -478,7 +496,7 @@
virtual int Opcode() const;
};
-//------------------------------PackLNode---------------------------------------
+//------------------------------PackLNode--------------------------------------
// Pack long scalars into a vector
class PackLNode : public PackNode {
public:
@@ -487,7 +505,7 @@
virtual int Opcode() const;
};
-//------------------------------Pack2LNode--------------------------------------
+//------------------------------Pack2LNode-------------------------------------
// Pack 2 long scalars into a vector
class Pack2LNode : public PackNode {
public:
@@ -495,7 +513,7 @@
virtual int Opcode() const;
};
-//------------------------------PackFNode---------------------------------------
+//------------------------------PackFNode--------------------------------------
// Pack float scalars into vector
class PackFNode : public PackNode {
public:
@@ -504,7 +522,7 @@
virtual int Opcode() const;
};
-//------------------------------PackDNode---------------------------------------
+//------------------------------PackDNode--------------------------------------
// Pack double scalars into a vector
class PackDNode : public PackNode {
public:
@@ -513,7 +531,7 @@
virtual int Opcode() const;
};
-//------------------------------Pack2DNode--------------------------------------
+//------------------------------Pack2DNode-------------------------------------
// Pack 2 double scalars into a vector
class Pack2DNode : public PackNode {
public:
@@ -522,9 +540,9 @@
};
-//========================Extract_Scalar_from_Vector===============================
+//========================Extract_Scalar_from_Vector===========================
-//------------------------------ExtractNode---------------------------------------
+//------------------------------ExtractNode------------------------------------
// Extract a scalar from a vector at position "pos"
class ExtractNode : public Node {
public:
@@ -537,7 +555,7 @@
static Node* make(Compile* C, Node* v, uint position, BasicType bt);
};
-//------------------------------ExtractBNode---------------------------------------
+//------------------------------ExtractBNode-----------------------------------
// Extract a byte from a vector at position "pos"
class ExtractBNode : public ExtractNode {
public:
@@ -547,7 +565,7 @@
virtual uint ideal_reg() const { return Op_RegI; }
};
-//------------------------------ExtractUBNode--------------------------------------
+//------------------------------ExtractUBNode----------------------------------
// Extract a boolean from a vector at position "pos"
class ExtractUBNode : public ExtractNode {
public:
@@ -557,7 +575,7 @@
virtual uint ideal_reg() const { return Op_RegI; }
};
-//------------------------------ExtractCNode---------------------------------------
+//------------------------------ExtractCNode-----------------------------------
// Extract a char from a vector at position "pos"
class ExtractCNode : public ExtractNode {
public:
@@ -567,7 +585,7 @@
virtual uint ideal_reg() const { return Op_RegI; }
};
-//------------------------------ExtractSNode---------------------------------------
+//------------------------------ExtractSNode-----------------------------------
// Extract a short from a vector at position "pos"
class ExtractSNode : public ExtractNode {
public:
@@ -577,7 +595,7 @@
virtual uint ideal_reg() const { return Op_RegI; }
};
-//------------------------------ExtractINode---------------------------------------
+//------------------------------ExtractINode-----------------------------------
// Extract an int from a vector at position "pos"
class ExtractINode : public ExtractNode {
public:
@@ -587,7 +605,7 @@
virtual uint ideal_reg() const { return Op_RegI; }
};
-//------------------------------ExtractLNode---------------------------------------
+//------------------------------ExtractLNode-----------------------------------
// Extract a long from a vector at position "pos"
class ExtractLNode : public ExtractNode {
public:
@@ -597,7 +615,7 @@
virtual uint ideal_reg() const { return Op_RegL; }
};
-//------------------------------ExtractFNode---------------------------------------
+//------------------------------ExtractFNode-----------------------------------
// Extract a float from a vector at position "pos"
class ExtractFNode : public ExtractNode {
public:
@@ -607,7 +625,7 @@
virtual uint ideal_reg() const { return Op_RegF; }
};
-//------------------------------ExtractDNode---------------------------------------
+//------------------------------ExtractDNode-----------------------------------
// Extract a double from a vector at position "pos"
class ExtractDNode : public ExtractNode {
public: