1.1 --- a/src/share/vm/opto/vectornode.hpp Wed Aug 15 16:49:38 2012 -0700 1.2 +++ b/src/share/vm/opto/vectornode.hpp Mon Aug 20 09:07:21 2012 -0700 1.3 @@ -46,6 +46,7 @@ 1.4 1.5 const TypeVect* vect_type() const { return type()->is_vect(); } 1.6 uint length() const { return vect_type()->length(); } // Vector length 1.7 + uint length_in_bytes() const { return vect_type()->length_in_bytes(); } 1.8 1.9 virtual int Opcode() const; 1.10 1.11 @@ -57,7 +58,8 @@ 1.12 1.13 static int opcode(int opc, uint vlen, BasicType bt); 1.14 static bool implemented(int opc, uint vlen, BasicType bt); 1.15 - 1.16 + static bool is_shift(Node* n); 1.17 + static bool is_invariant_vector(Node* n); 1.18 }; 1.19 1.20 //===========================Vector=ALU=Operations==================================== 1.21 @@ -158,6 +160,22 @@ 1.22 virtual int Opcode() const; 1.23 }; 1.24 1.25 +//------------------------------MulVSNode--------------------------------------- 1.26 +// Vector multiply short 1.27 +class MulVSNode : public VectorNode { 1.28 + public: 1.29 + MulVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.30 + virtual int Opcode() const; 1.31 +}; 1.32 + 1.33 +//------------------------------MulVINode--------------------------------------- 1.34 +// Vector multiply int 1.35 +class MulVINode : public VectorNode { 1.36 + public: 1.37 + MulVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.38 + virtual int Opcode() const; 1.39 +}; 1.40 + 1.41 //------------------------------MulVFNode--------------------------------------- 1.42 // Vector multiply float 1.43 class MulVFNode : public VectorNode { 1.44 @@ -191,7 +209,7 @@ 1.45 }; 1.46 1.47 //------------------------------LShiftVBNode--------------------------------------- 1.48 -// Vector lshift byte 1.49 +// Vector left shift bytes 1.50 class LShiftVBNode : public VectorNode { 1.51 public: 1.52 LShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.53 @@ -199,7 +217,7 @@ 1.54 }; 1.55 1.56 //------------------------------LShiftVSNode--------------------------------------- 1.57 -// Vector lshift shorts 1.58 +// Vector left shift shorts 1.59 class LShiftVSNode : public VectorNode { 1.60 public: 1.61 LShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.62 @@ -207,39 +225,88 @@ 1.63 }; 1.64 1.65 //------------------------------LShiftVINode--------------------------------------- 1.66 -// Vector lshift ints 1.67 +// Vector left shift ints 1.68 class LShiftVINode : public VectorNode { 1.69 public: 1.70 LShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.71 virtual int Opcode() const; 1.72 }; 1.73 1.74 -//------------------------------URShiftVBNode--------------------------------------- 1.75 -// Vector urshift bytes 1.76 +//------------------------------LShiftVLNode--------------------------------------- 1.77 +// Vector left shift longs 1.78 +class LShiftVLNode : public VectorNode { 1.79 + public: 1.80 + LShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.81 + virtual int Opcode() const; 1.82 +}; 1.83 + 1.84 +//------------------------------RShiftVBNode--------------------------------------- 1.85 +// Vector right arithmetic (signed) shift bytes 1.86 class RShiftVBNode : public VectorNode { 1.87 public: 1.88 RShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.89 virtual int Opcode() const; 1.90 }; 1.91 1.92 -//------------------------------URShiftVSNode--------------------------------------- 1.93 -// Vector urshift shorts 1.94 +//------------------------------RShiftVSNode--------------------------------------- 1.95 +// Vector right arithmetic (signed) shift shorts 1.96 class RShiftVSNode : public VectorNode { 1.97 public: 1.98 RShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.99 virtual int Opcode() const; 1.100 }; 1.101 1.102 -//------------------------------URShiftVINode--------------------------------------- 1.103 -// Vector urshift ints 1.104 +//------------------------------RShiftVINode--------------------------------------- 1.105 +// Vector right arithmetic (signed) shift ints 1.106 class RShiftVINode : public VectorNode { 1.107 public: 1.108 RShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.109 virtual int Opcode() const; 1.110 }; 1.111 1.112 +//------------------------------RShiftVLNode--------------------------------------- 1.113 +// Vector right arithmetic (signed) shift longs 1.114 +class RShiftVLNode : public VectorNode { 1.115 + public: 1.116 + RShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.117 + virtual int Opcode() const; 1.118 +}; 1.119 + 1.120 +//------------------------------URShiftVBNode--------------------------------------- 1.121 +// Vector right logical (unsigned) shift bytes 1.122 +class URShiftVBNode : public VectorNode { 1.123 + public: 1.124 + URShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.125 + virtual int Opcode() const; 1.126 +}; 1.127 + 1.128 +//------------------------------URShiftVSNode--------------------------------------- 1.129 +// Vector right logical (unsigned) shift shorts 1.130 +class URShiftVSNode : public VectorNode { 1.131 + public: 1.132 + URShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.133 + virtual int Opcode() const; 1.134 +}; 1.135 + 1.136 +//------------------------------URShiftVINode--------------------------------------- 1.137 +// Vector right logical (unsigned) shift ints 1.138 +class URShiftVINode : public VectorNode { 1.139 + public: 1.140 + URShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.141 + virtual int Opcode() const; 1.142 +}; 1.143 + 1.144 +//------------------------------URShiftVLNode--------------------------------------- 1.145 +// Vector right logical (unsigned) shift longs 1.146 +class URShiftVLNode : public VectorNode { 1.147 + public: 1.148 + URShiftVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.149 + virtual int Opcode() const; 1.150 +}; 1.151 + 1.152 + 1.153 //------------------------------AndVNode--------------------------------------- 1.154 -// Vector and 1.155 +// Vector and integer 1.156 class AndVNode : public VectorNode { 1.157 public: 1.158 AndVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.159 @@ -247,7 +314,7 @@ 1.160 }; 1.161 1.162 //------------------------------OrVNode--------------------------------------- 1.163 -// Vector or 1.164 +// Vector or integer 1.165 class OrVNode : public VectorNode { 1.166 public: 1.167 OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} 1.168 @@ -255,7 +322,7 @@ 1.169 }; 1.170 1.171 //------------------------------XorVNode--------------------------------------- 1.172 -// Vector xor 1.173 +// Vector xor integer 1.174 class XorVNode : public VectorNode { 1.175 public: 1.176 XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {}